模組 Stdlib.Printf

module Printf: Printf

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

fprintf outchan format arg1 ... argN 依照格式字串 format 格式化參數 arg1argN,並將結果字串輸出到通道 outchan

格式字串是一個字元字串,包含兩種物件:純文字字元,這些字元會直接複製到輸出通道;以及轉換規格,每個轉換規格都會導致參數的轉換和列印。

轉換規格具有以下形式

% [旗標] [寬度] [.精確度] 類型

簡而言之,轉換規格由 % 字元組成,後面跟著可選的修飾符和一個由一或兩個字元組成的類型。

類型及其含義如下

  • di:將整數參數轉換為帶正負號的十進位數。旗標 # 會為大型數值添加底線以提高可讀性。
  • unlLN:將整數參數轉換為無正負號的十進位數。警告:nlLN 用於 scanf,不應在 printf 中使用。旗標 # 會為大型數值添加底線以提高可讀性。
  • x:將整數參數轉換為無正負號的十六進位數,使用小寫字母。旗標 # 會為非零值添加 0x 前綴。
  • X:將整數參數轉換為無正負號的十六進位數,使用大寫字母。旗標 # 會為非零值添加 0X 前綴。
  • o:將整數參數轉換為無正負號的八進位數。旗標 # 會為非零值添加 0 前綴。
  • s:插入字串參數。
  • S:將字串參數轉換為 OCaml 語法(雙引號、跳脫字元)。
  • c:插入字元參數。
  • C:將字元參數轉換為 OCaml 語法(單引號、跳脫字元)。
  • f:將浮點數參數轉換為十進位表示法,格式為 dddd.ddd
  • F:將浮點數參數轉換為 OCaml 語法(dddd.dddd.dddd.ddd e+-dd)。使用旗標 # 轉換為十六進位(請參閱 h)。
  • eE:將浮點數參數轉換為十進位表示法,格式為 d.ddd e+-dd(尾數和指數)。
  • gG:將浮點數參數轉換為十進位表示法,格式為 feE(以較簡潔的格式為準)。此外,會從結果的小數部分移除所有尾隨零,如果沒有剩餘的小數部分,則會移除小數點字元。
  • hH:將浮點數參數轉換為十六進位表示法,格式為 0xh.hhhh p+-dd(十六進位尾數,指數為十進位並表示 2 的冪)。
  • B:將布林值參數轉換為字串 truefalse
  • b:轉換布林值參數(已棄用;請勿在新程式中使用)。
  • ldlilulxlXlo:將 int32 參數轉換為第二個字母指定的格式(十進位、十六進位等等)。
  • ndninunxnXno:將 nativeint 參數轉換為第二個字母指定的格式。
  • LdLiLuLxLXLo:將 int64 參數轉換為第二個字母指定的格式。
  • a:使用者定義的列印函式。接受兩個參數,並將第一個參數應用於 outchan(目前的輸出通道)和第二個參數。因此,第一個參數的類型必須為 out_channel -> '-> 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 位小數位數的 float

widthprecision 中的整數也可以指定為 *,在這種情況下,會採用一個額外的整數參數來指定相應的 widthprecision。這個整數參數會緊接在要列印的參數之前。例如,%.*f 會列印一個 float,其小數位數與在 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 相同,但不列印任何內容。適用於在有條件列印時忽略某些材料。

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

Printf.bprintf 相同,但不列印任何內容。適用於在有條件列印時忽略某些材料。

具有連續性的格式化輸出函式。

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

fprintf 相同,但不會立即傳回,而是在列印結束時將輸出通道傳遞給其第一個參數。

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

與上面的 kfprintf 相同,但不列印任何內容。適用於在有條件列印時忽略某些材料。

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

與上面的 sprintf 相同,但不會傳回字串,而是將字串傳遞給其第一個參數。

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

bprintf 相同,但不會立即傳回,而是在列印結束時將緩衝區傳遞給其第一個參數。

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

與上面的 kbprintf 相同,但不列印任何內容。適用於在有條件列印時忽略某些材料。

已棄用

val kprintf : (string -> 'b) -> ('a, unit, string, 'b) format4 -> 'a
已棄用。請改用 Printf.ksprintf。

已棄用的 ksprintf 同義詞。