檢視原始碼 io_lib (stdlib v6.2)
I/O 函式庫函式。
此模組包含用於字串(字元列表)之間轉換的函式。它們用於實作 io
模組中的函式。無法保證某些函式傳回的字元列表是扁平的,它們可能是深層列表。函式 lists:flatten/1
可用於扁平化深層列表。
摘要
函式
詳細資訊請參閱 scan_format/2
。
如果 Term
是 Unicode 範圍內的字元扁平列表,則傳回 true
,否則傳回 false
。
如果 Term
是 Unicode 範圍內的字元(可能為深層)列表,則傳回 true
,否則傳回 false
。
如果 Term
是 ISO Latin-1 範圍內的字元(可能為深層)列表,則傳回 true
,否則傳回 false
。
嘗試根據 Format
中的控制序列讀取 String
。
這是可重入的格式化讀取器。首次呼叫函式的 continuation 必須為 []
。
傳回根據 Format
格式化的 Data
的字元列表。
如果已列印 String
,則從 StartIndent
開始傳回縮排。
如果 Term
是 ISO Latin-1 範圍內的字元扁平列表,則傳回 true
,否則傳回 false
。
傳回表示新行字元的字元列表。
傳回表示 Term
的字元列表,但將長度超過一行的表示式分成多行,並適當地縮排每一行。
如果 Term
是可列印的 ISO Latin-1 字元的扁平列表,則傳回 true
,否則傳回 false
。
如果 Term
是可列印字元的扁平列表,則傳回 true
,否則傳回 false
。
如果 Term
是可列印的 Unicode 字元的扁平列表,則傳回 true
,否則傳回 false
。
傳回對應於指定格式字串的列表,其中控制序列已替換為對應的元組。此列表可以傳遞至
詳細資訊請參閱 scan_format/2
。
傳回表示 Term
的字元列表。選項 Depth
控制寫入結構的深度。
傳回列印原子 Atom
所需的字元列表。
傳回列印原子 Atom
所需的字元列表。非 Latin-1 字元會被跳脫。
傳回列印 Unicode 字元集中字元常數所需的字元列表。
傳回列印 Unicode 字元集中字元常數所需的字元列表。非 Latin-1 字元會被跳脫。
傳回列印 ISO Latin-1 字元集中字元常數所需的字元列表。
傳回列印 Latin1String
作為字串所需的字元列表。
傳回列印 String
作為字串所需的字元列表。
傳回列印 String
作為字串所需的字元列表。非 Latin-1 字元會被跳脫。
類型
一個可能包含 char/0
的深層列表。
-type chars_limit() :: integer().
-opaque continuation()
由 fread/3
傳回的 continuation。
-type depth() :: -1 | non_neg_integer().
-type format_spec() :: #{control_char := char(), args := [any()], width := none | integer(), adjust := left | right, precision := none | integer(), pad_char := char(), encoding := unicode | latin1, strings := boolean(), maps_order => maps:iterator_order()}.
描述格式字串內容的 map。
control_char
是控制序列的類型:$P
、$w
等。args
是控制序列使用的引數列表,如果控制序列不採用任何引數,則為空列表。width
是欄位寬度。adjust
是對齊方式。precision
是列印引數的精確度。pad_char
是填補字元。- 如果存在翻譯修飾符
t
,則encoding
設定為true
。 - 如果存在修飾符
l
,則strings
設定為false
。 maps_order
預設設定為undefined
,如果存在修飾符k
,則設定為ordered
,如果存在修飾符K
,則設定為reversed
或CmpFun
。
-type fread_error() :: atom | based | character | float | format | input | integer | string | unsigned.
-type latin1_string() :: [unicode:latin1_char()].
函式
-spec build_text(FormatList) -> chars() when FormatList :: [char() | format_spec()].
詳細資訊請參閱 scan_format/2
。
如果 Term
是 Unicode 範圍內的字元扁平列表,則傳回 true
,否則傳回 false
。
如果 Term
是 Unicode 範圍內的字元(可能為深層)列表,則傳回 true
,否則傳回 false
。
如果 Term
是 ISO Latin-1 範圍內的字元(可能為深層)列表,則傳回 true
,否則傳回 false
。
等同於 fwrite(Format, Data)
。
-spec format(Format, Data, Options) -> chars() when Format :: io:format(), Data :: [term()], Options :: [Option], Option :: {chars_limit, CharsLimit}, CharsLimit :: chars_limit().
-spec fread(Format, String) -> Result when Format :: string(), String :: string(), Result :: {ok, InputList :: [fread_item()], LeftOverChars :: string()} | {more, RestFormat :: string(), Nchars :: non_neg_integer(), InputStack :: chars()} | {error, {fread, What :: fread_error()}}.
嘗試根據 Format
中的控制序列讀取 String
。
如需可用格式化選項的詳細說明,請參閱 io:fread/3
。假設 String
包含完整行。
函式傳回
{ok, InputList, LeftOverChars}
- 已讀取字串。InputList
是成功匹配和讀取的項目列表,而LeftOverChars
是未使用的輸入字元。{more, RestFormat, Nchars, InputStack}
- 已讀取字串,但需要更多輸入才能完成原始格式字串。RestFormat
是剩餘的格式字串,Nchars
是掃描的字元數,而InputStack
是到目前為止匹配的輸入反向列表。{error, What}
- 讀取操作失敗,而參數What
提供錯誤提示。
範例
3> io_lib:fread("~f~f~f", "15.6 17.3e-6 24.5").
{ok,[15.6,1.73e-5,24.5],[]}
-spec fread(Continuation, CharSpec, Format) -> Return when Continuation :: continuation() | [], CharSpec :: string() | eof, Format :: string(), Return :: {more, Continuation1 :: continuation()} | {done, Result, LeftOverChars :: string()}, Result :: {ok, InputList :: [fread_item()]} | eof | {error, {fread, What :: fread_error()}}.
這是可重入的格式化讀取器。首次呼叫函式的 continuation 必須為 []
。
如需可重入輸入方案如何運作的完整說明,請參閱 Armstrong、Virding、Williams 的著作:「Erlang 並行程式設計」,第 13 章。
函式傳回
{done, Result, LeftOverChars}
- 輸入已完成。結果為下列其中之一{ok, InputList}
- 已讀取字串。InputList
是成功匹配和讀取的項目列表,而LeftOverChars
是剩餘的字元。eof
- 遇到檔案結尾。LeftOverChars
是未使用的輸入字元。{error, What}
- 發生錯誤,而參數What
提供錯誤提示。
{more, Continuation}
- 需要更多資料才能建立 term。Continuation
在有更多資料可用時,必須傳遞至fread/3
。
傳回根據 Format
格式化的 Data
的字元列表。
如需可用格式化選項的詳細說明,請參閱 io:fwrite/1,2,3
。如果格式字串或引數列表包含錯誤,則會產生錯誤。
當且僅當格式字串中使用 Unicode 翻譯修飾符(即 ~ts
或 ~tc
)時,產生的列表才可能包含超出 ISO Latin-1 字元範圍(即數字 > 255)的字元。如果是,則結果仍然是一個普通的 Erlang string/0
,並且可以在允許使用 Unicode 資料的任何內容中使用。
-spec fwrite(Format, Data, Options) -> chars() when Format :: io:format(), Data :: [term()], Options :: [Option], Option :: {chars_limit, CharsLimit}, CharsLimit :: chars_limit().
傳回根據 Format
格式化的 Data
的字元列表,其方式與 fwrite/2
和 format/2
相同,但多了一個引數,即選項列表。
有效選項
{chars_limit, CharsLimit}
- 對傳回的字元數設定軟性限制。當達到字元數時,其餘結構會被 "...
" 取代。CharsLimit
預設為 -1,表示對傳回的字元數沒有限制。
-spec indentation(String, StartIndent) -> integer() when String :: string(), StartIndent :: integer().
如果已列印 String
,則從 StartIndent
開始傳回縮排。
如果 Term
是 ISO Latin-1 範圍內的字元扁平列表,則傳回 true
,否則傳回 false
。
-spec nl() -> string().
傳回表示新行字元的字元列表。
-spec print(Term, Column, LineLength, Depth) -> chars() when Term :: term(), Column :: non_neg_integer(), LineLength :: non_neg_integer(), Depth :: depth().
傳回表示 Term
的字元列表,但將長度超過一行的表示式分成多行,並適當地縮排每一行。
也會嘗試偵測並將可列印的字元列表輸出為字串。
Column
是起始欄位;預設為 1。LineLength
是最大行長度;預設為 80。Depth
是最大列印深度;預設為 -1,表示沒有限制。
如果 Term
是可列印的 ISO Latin-1 字元的扁平列表,則傳回 true
,否則傳回 false
。
如果 Term
是可列印字元的扁平列表,則傳回 true
,否則傳回 false
。
在這種情況下,可列印字元由 Erlang VM 的啟動旗標 +pc
決定;請參閱 io:printable_range/0
和 erl(1)
。
如果 Term
是可列印的 Unicode 字元的扁平列表,則傳回 true
,否則傳回 false
。
-spec scan_format(Format, Data) -> FormatList when Format :: io:format(), Data :: [term()], FormatList :: [char() | format_spec()].
傳回對應於指定格式字串的列表,其中控制序列已替換為對應的元組。此列表可以傳遞至
build_text/1
的效果與format(Format, Args)
相同unscan_format/1
用於取得對應的Format
和Args
配對(每個*
和對應的參數都會擴展為數值)
此函數的典型用途是在格式化為文字之前,將無邊界大小的控制序列(如 ~w
和 ~p
)替換為深度限制的版本(如 ~W
和 ~P
),例如在記錄器中。
-spec unscan_format(FormatList) -> {Format, Data} when FormatList :: [char() | format_spec()], Format :: io:format(), Data :: [term()].
詳細資訊請參閱 scan_format/2
。
等同於 write(Term, -1)
。
-spec write(Term, Depth) -> chars() when Term :: term(), Depth :: depth(); (Term, Options) -> chars() when Term :: term(), Options :: [Option], Option :: {chars_limit, CharsLimit} | {depth, Depth} | {encoding, latin1 | utf8 | unicode}, CharsLimit :: chars_limit(), Depth :: depth().
傳回表示 Term
的字元列表。選項 Depth
控制寫入結構的深度。
當達到指定的深度時,此層級以下的所有內容都會被 "...
" 取代。
Depth
預設為 -1,表示沒有限制。選項 CharsLimit
對返回的字元數設定軟限制。當達到字元數時,剩餘的結構會被 "...
" 取代。CharsLimit
預設為 -1,表示對返回的字元數沒有限制。
範例
1> lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9})).
"{1,[2],[3],[4,5],6,7,8,9}"
2> lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5)).
"{1,[2],[3],[...],...}"
3> lists:flatten(io_lib:write({[1,2,3],[4,5],6,7,8,9}, [{chars_limit,20}])).
"{[1,2|...],[4|...],...}"
傳回列印原子 Atom
所需的字元列表。
-spec write_atom_as_latin1(Atom) -> latin1_string() when Atom :: atom().
傳回列印原子 Atom
所需的字元列表。非 Latin-1 字元會被跳脫。
傳回列印 Unicode 字元集中字元常數所需的字元列表。
-spec write_char_as_latin1(Char) -> latin1_string() when Char :: char().
傳回列印 Unicode 字元集中字元常數所需的字元列表。非 Latin-1 字元會被跳脫。
-spec write_latin1_char(Latin1Char) -> latin1_string() when Latin1Char :: unicode:latin1_char().
傳回列印 ISO Latin-1 字元集中字元常數所需的字元列表。
-spec write_latin1_string(Latin1String) -> latin1_string() when Latin1String :: latin1_string().
傳回列印 Latin1String
作為字串所需的字元列表。
傳回列印 String
作為字串所需的字元列表。
-spec write_string_as_latin1(String) -> latin1_string() when String :: string().
傳回列印 String
作為字串所需的字元列表。非 Latin-1 字元會被跳脫。