Spec-Zone.ru › OCaml

Модуль Printf

module Printf: sig .. end

Функции форматированного вывода.

val fprintf : out_channel -> ('a, out_channel, unit) format -> 'a

fprintf outchan format arg1 ... argN форматирует аргументы arg1 в argN в соответствии со строкой формата format и выводит полученную строку в канал outchan.

Строка формата — это строка символов, содержащая два типа элементов: обычные символы, которые просто копируются в канал вывода, и спецификаторы преобразования, каждый из которых выполняет преобразование и печать аргументов.

Спецификаторы преобразования имеют следующий вид:

% [flags] [width] [.precision] type

Кратко говоря, спецификатор преобразования состоит из символа %, за которым следуют необязательные модификаторы и тип, состоящий из одного или двух символов.

Типы и их значения:

  • d, i: преобразовать целочисленный аргумент в десятичное число со знаком. Флаг # добавляет подчёркивания в большие числа для удобства чтения.
  • u, n, l, L или N: преобразовать целочисленный аргумент в десятичное число без знака. Внимание: n, l, L и N используются для scanf и не должны использоваться для printf. Флаг # добавляет подчёркивания в большие числа для удобства чтения.
  • x: преобразовать целочисленный аргумент в шестнадцатеричное число без знака, используя строчные буквы. Флаг # добавляет префикс 0x для ненулевых значений.
  • X: преобразовать целочисленный аргумент в шестнадцатеричное число без знака, используя заглавные буквы. Флаг # добавляет префикс 0X для ненулевых значений.
  • o: преобразовать целочисленный аргумент в восьмеричное число без знака. Флаг # добавляет префикс 0 для ненулевых значений.
  • s: вставить строковый аргумент.
  • S: преобразовать строковый аргумент в синтаксис OCaml (двойные кавычки, escape-последовательности).
  • c: вставить символьный аргумент.
  • C: преобразовать символьный аргумент в синтаксис OCaml (одинарные кавычки, escape-последовательности).
  • f: преобразовать аргумент с плавающей точкой в десятичную запись в стиле dddd.ddd.
  • F: преобразовать аргумент с плавающей точкой в синтаксис OCaml (dddd. или dddd.ddd или d.ddd e+-dd). Флаг # включает шестнадцатеричное представление (см. h).
  • e или E: преобразовать аргумент с плавающей точкой в десятичную запись в стиле d.ddd e+-dd (мантисса и экспонента).
  • g или G: преобразовать аргумент с плавающей точкой в десятичную запись в стиле f или e, E (в зависимости от того, какой вариант компактнее). Кроме того, все завершающие нули удаляются из дробной части результата, а десятичный разделитель удаляется, если дробной части не осталось.
  • h или H: преобразовать аргумент с плавающей точкой в шестнадцатеричную запись в стиле 0xh.hhhh p+-dd (шестнадцатеричная мантисса, десятичная экспонента, обозначающая степень числа 2).
  • B: преобразовать логический аргумент в строку true или false
  • b: преобразовать логический аргумент (устарело; не используйте в новых программах).
  • ld, li, lu, lx, lX, lo: преобразовать аргумент типа int32 в формат, задаваемый второй буквой (десятичный, шестнадцатеричный и т. д.).
  • nd, ni, nu, nx, nX, no: преобразовать аргумент типа nativeint в формат, задаваемый второй буквой.
  • Ld, Li, Lu, Lx, LX, Lo: преобразовать аргумент типа int64 в формат, задаваемый второй буквой.
  • a: пользовательская функция печати. Принимает два аргумента и применяет первый к outchan (текущему каналу вывода) и ко второму аргументу. Поэтому первый аргумент должен иметь тип out_channel -> 'b -> unit, а второй — тип 'b. Результат работы функции вставляется в вывод fprintf в текущей позиции.
  • t: то же, что и %a, но принимает только один аргумент (типа out_channel -> unit) и применяет его к outchan.
  • { fmt %}: преобразовать аргумент-строку формата в его дайджест типа. Аргумент должен иметь тот же тип, что и внутренняя строка формата fmt.
  • ( fmt %): подстановка строки формата. Принимает аргумент-строку формата и подставляет его во внутреннюю строку формата fmt для вывода следующих аргументов. Аргумент должен иметь тот же тип, что и внутренняя строка формата fmt.
  • !: не принимает аргументов и сбрасывает буфер вывода.
  • %: не принимает аргументов и выводит один символ %.
  • @: не принимает аргументов и выводит один символ @.
  • ,: не принимает аргументов и ничего не выводит: разделитель спецификаторов преобразования, не выполняющий никаких действий.

Необязательные flags:

  • -: выравнивать вывод по левому краю (по умолчанию используется выравнивание по правому краю).
  • 0: для числовых преобразований дополнять нулями вместо пробелов.
  • +: для числовых преобразований со знаком добавлять перед положительным числом знак +.
  • пробел: для числовых преобразований со знаком добавлять перед положительным числом пробел.
  • #: запрашивать альтернативный стиль форматирования для целочисленных типов и типа с плавающей точкой F.

Необязательное width — это целое число, задающее минимальную ширину результата. Например, %6d выводит целое число, добавляя перед ним пробелы, чтобы его длина составляла не менее 6 символов.

Необязательное precision — это точка ., за которой следует целое число, задающее количество цифр после десятичного разделителя в преобразованиях %f, %e, %E, %h и %H или максимальное количество значащих цифр в преобразованиях %F, %g и %G. Например, %.4f выводит число float с 4 цифрами после десятичного разделителя.

Целое число в width или precision также можно указать как *; в этом случае для задания соответствующего width или precision используется дополнительный целочисленный аргумент. Этот целочисленный аргумент непосредственно предшествует выводимому аргументу. Например, %.*f выводит число float с количеством цифр после десятичного разделителя, равным значению аргумента, указанного перед числом с плавающей точкой.

val printf : ('a, out_channel, unit) format -> 'a

То же, что и Printf.fprintf, но выводит в stdout.

val eprintf : ('a, out_channel, unit) format -> 'a

То же, что и Printf.fprintf, но выводит в stderr.

val sprintf : ('a, unit, string) format -> 'a

То же, что и Printf.fprintf, но вместо вывода в канал возвращает строку, содержащую результат форматирования аргументов.

val bprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a

То же, что и Printf.fprintf, но вместо вывода в канал добавляет отформатированные аргументы в указанный расширяемый буфер (см. модуль Buffer).

val ifprintf : 'b -> ('a, 'b, 'c, unit) format4 -> 'a

То же, что и Printf.fprintf, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.

  • Начиная с версии 3.10
val ibprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a

То же, что и Printf.bprintf, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.

  • Начиная с версии 4.11

Функции форматированного вывода с продолжениями.

val kfprintf : (out_channel -> 'd) ->       out_channel -> ('a, out_channel, unit, 'd) format4 -> 'a

То же, что и fprintf, но вместо немедленного возврата передаёт канал вывода своему первому аргументу по завершении вывода.

  • Начиная с версии 3.09
val ikfprintf : ('b -> 'd) -> 'b -> ('a, 'b, 'c, 'd) format4 -> 'a

То же, что и kfprintf выше, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.

  • Начиная с версии 4.01
val ksprintf : (string -> 'd) -> ('a, unit, string, 'd) format4 -> 'a

То же, что и sprintf выше, но вместо возврата строки передаёт её первому аргументу.

  • Начиная с версии 3.09
val kbprintf : (Buffer.t -> 'd) ->       Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

То же, что и bprintf, но вместо немедленного возврата передаёт буфер своему первому аргументу по завершении вывода.

  • Начиная с версии 3.10
val ikbprintf : (Buffer.t -> 'd) ->       Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

То же, что и kbprintf выше, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.

  • Начиная с версии 4.11

Функции форматированного вывода с гетерогенными списками аргументов.

Следующие функции работают так же, как соответствующие функции без «l», но получают аргументы, объединённые в один гетерогенный список.

Гетерогенный список представляет собой синтаксически ограниченную коллекцию аргументов, устраняя необходимость в вариантах с продолжениями. Такой подход также повышает ясность сообщений об ошибках типов, особенно при несовпадении строки формата и количества переданных аргументов.

Например:

    Printf.lprintf "%s %d %.02f %c\n" [ "ocaml"; 42; 3.14; 'c' ]
  
module Args: sig .. end

Модуль Args определяет тип гетерогенного списка, который можно использовать в качестве аргумента функций l*printf.

val lfprintf : out_channel ->       ('a, out_channel, unit) format ->       ('a, unit) Args.t -> unit

То же, что и fprintf выше, но аргументы объединены в один гетерогенный список. Например:

    Printf.lfprintf (open_out "some/file.txt") "@[%s@ %d@]@." [ "x ="; 1 ]
  
  • Начиная с версии 5.5
val lbprintf : Buffer.t ->       ('a, Buffer.t, unit) format -> ('a, unit) Args.t -> unit

То же, что и bprintf выше, но аргументы объединены в один гетерогенный список.

  • Начиная с версии 5.5
val lprintf : ('a, out_channel, unit) format ->       ('a, unit) Args.t -> unit

То же, что и printf выше, но аргументы объединены в один гетерогенный список.

  • Начиная с версии 5.5
val leprintf : ('a, out_channel, unit) format ->       ('a, unit) Args.t -> unit

То же, что и eprintf выше, но аргументы объединены в один гетерогенный список.

  • Начиная с версии 5.5
val lsprintf : ('a, unit, string) format -> ('a, string) Args.t -> string

То же, что и sprintf выше, но аргументы объединены в один гетерогенный список.

  • Начиная с версии 5.5

Устарело

val kprintf : (string -> 'b) -> ('a, unit, string, 'b) format4 -> 'a
Устарело. Используйте вместо этого Printf.ksprintf.

Устаревший синоним ksprintf.

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Printf.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API