Модуль 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 выводит число с плавающей точкой с 4 дробными цифрами.
Целое число в width или precision также может быть задано как *, в этом случае дополнительный целочисленный аргумент используется для указания соответствующего width или precision . Этот целочисленный аргумент непосредственно предшествует аргументу для вывода. Например, %.*f выводит число с плавающей точкой с количеством дробных цифр, соответствующим значению аргумента, предшествующего числу с плавающей точкой.
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.0
val ibprintf : Buffer.t -> ('a, Buffer.t, unit) format -> 'a
Аналогично Printf.bprintf, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.
- Since 4.11.0
Функции форматированного вывода с продолжениями.
val kfprintf : (out_channel -> 'd) -> out_channel -> ('a, out_channel, unit, 'd) format4 -> 'a
Аналогично fprintf, но вместо немедленного возврата передает канал вывода своему первому аргументу в конце вывода.
- Since 3.09.0
val ikfprintf : ('b -> 'd) -> 'b -> ('a, 'b, 'c, 'd) format4 -> 'a
Аналогично kfprintf выше, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.
- Since 4.01.0
val ksprintf : (string -> 'd) -> ('a, unit, string, 'd) format4 -> 'a
Аналогично sprintf выше, но вместо возврата строки передает её первому аргументу.
- Since 3.09.0
val kbprintf : (Buffer.t -> 'd) -> Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a
Аналогично bprintf, но вместо немедленного возврата передает буфер своему первому аргументу в конце вывода.
- Since 3.10.0
val ikbprintf : (Buffer.t -> 'd) -> Buffer.t -> ('a, Buffer.t, unit, 'd) format4 -> 'a
Аналогично kbprintf выше, но ничего не выводит. Полезно для игнорирования некоторых данных при условном выводе.
- Since 4.11.0
Устаревшее
val kprintf : (string -> 'b) -> ('a, unit, string, 'b) format4 -> 'a
Устаревший синоним для ksprintf.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Printf.html