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 (двойные кавычки, эскейпы).
  • c: вставляет символьный аргумент.
  • C: преобразует символьный аргумент в синтаксис OCaml (одинарные кавычки, эскейпы).
  • 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 (шестнадцатеричная мантисса, порядок в десятичной системе и обозначает степень двойки).
  • 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, но ничего не выводит. Полезно игнорировать некоторый материал при условном выводе.

  • Since 3.10
val ibprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a

Аналогично Printf.bprintf, но ничего не выводит. Полезно игнорировать некоторый материал при условном выводе.

  • Since 4.11

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

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

Аналогично fprintf, но вместо немедленного возврата передает канал вывода своему первому аргументу в конце вывода.

  • Since 3.09
val ikfprintf : ('b -> 'd) -> 'b -> ('a, 'b, 'c, 'd) format4 -> 'a

Аналогично kfprintf выше, но ничего не выводит. Полезно игнорировать некоторый материал при условном выводе.

  • Since 4.01
val ksprintf : (string -> 'd) -> ('a, unit, string, 'd) format4 -> 'a

Аналогично sprintf выше, но вместо возвращения строки передает её первому аргументу.

  • Since 3.09
val kbprintf : (Buffer.t -> 'd) ->       Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

Аналогично bprintf, но вместо немедленного возврата передает буфер своему первому аргументу в конце вывода.

  • Since 3.10
val ikbprintf : (Buffer.t -> 'd) ->       Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a

Аналогично kbprintf выше, но ничего не выводит. Полезно игнорировать некоторый материал при условном выводе.

  • Since 4.11

Устаревшее

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

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

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/Printf.html

Spec-Zone.ru

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