模組 Printf

module Printf: sig .. end

格式化輸出函式。


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 具有相同的類型。
  • !:不採用任何參數並刷新輸出。
  • %:不採用任何參數並輸出一個 % 字元。
  • @:不採用任何參數並輸出一個 @ 字元。
  • ,:不採用任何參數且不輸出任何內容:用於轉換規範的 no-op 分隔符。

可選的 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 的已棄用同義詞。