檢視原始碼 io_lib (stdlib v6.2)

I/O 函式庫函式。

此模組包含用於字串(字元列表)之間轉換的函式。它們用於實作 io 模組中的函式。無法保證某些函式傳回的字元列表是扁平的,它們可能是深層列表。函式 lists:flatten/1 可用於扁平化深層列表。

摘要

類型

一個可能包含 char/0 的深層列表。

fread/3 傳回的 continuation。

描述格式字串內容的 map。

函式

詳細資訊請參閱 scan_format/2

如果 Term 是 Unicode 範圍內的字元扁平列表,則傳回 true,否則傳回 false

如果 Term 是 Unicode 範圍內的字元(可能為深層)列表,則傳回 true,否則傳回 false

如果 Term 是 ISO Latin-1 範圍內的字元(可能為深層)列表,則傳回 true,否則傳回 false

嘗試根據 Format 中的控制序列讀取 String

這是可重入的格式化讀取器。首次呼叫函式的 continuation 必須為 []

傳回根據 Format 格式化的 Data 的字元列表。

傳回根據 Format 格式化的 Data 的字元列表,其方式與 fwrite/2format/2 相同,但多了一個引數,即選項列表。

如果已列印 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 字元會被跳脫。

類型

-type chars() :: [char() | chars()].

一個可能包含 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,則設定為 reversedCmpFun
-type fread_error() :: atom | based | character | float | format | input | integer | string | unsigned.
-type fread_item() :: string() | atom() | integer() | float().
-type latin1_string() :: [unicode:latin1_char()].

函式

此函式的連結

build_text(FormatList)

檢視原始碼 (自 OTP 18.0 起)
-spec build_text(FormatList) -> chars() when FormatList :: [char() | format_spec()].

詳細資訊請參閱 scan_format/2

-spec char_list(Term) -> boolean() when Term :: term().

如果 Term 是 Unicode 範圍內的字元扁平列表,則傳回 true,否則傳回 false

-spec deep_char_list(Term) -> boolean() when Term :: term().

如果 Term 是 Unicode 範圍內的字元(可能為深層)列表,則傳回 true,否則傳回 false

此函式的連結

deep_latin1_char_list(Term)

檢視原始碼 (自 OTP R16B 起)
-spec deep_latin1_char_list(Term) -> boolean() when Term :: term().

如果 Term 是 ISO Latin-1 範圍內的字元(可能為深層)列表,則傳回 true,否則傳回 false

-spec format(Format, Data) -> chars() when Format :: io:format(), Data :: [term()].

等同於 fwrite(Format, Data)

此函式的連結

format(Format, Data, Options)

檢視原始碼 (自 OTP 21.0 起)
-spec format(Format, Data, Options) -> chars()
                when
                    Format :: io:format(),
                    Data :: [term()],
                    Options :: [Option],
                    Option :: {chars_limit, CharsLimit},
                    CharsLimit :: chars_limit().

等同於 fwrite(Format, Data, Options)

-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],[]}
此函式的連結

fread(Continuation, CharSpec, Format)

檢視原始碼
-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

-spec fwrite(Format, Data) -> chars() when Format :: io:format(), Data :: [term()].

傳回根據 Format 格式化的 Data 的字元列表。

如需可用格式化選項的詳細說明,請參閱 io:fwrite/1,2,3。如果格式字串或引數列表包含錯誤,則會產生錯誤。

當且僅當格式字串中使用 Unicode 翻譯修飾符(即 ~ts~tc)時,產生的列表才可能包含超出 ISO Latin-1 字元範圍(即數字 > 255)的字元。如果是,則結果仍然是一個普通的 Erlang string/0,並且可以在允許使用 Unicode 資料的任何內容中使用。

此函式的連結

fwrite(Format, Data, Options)

檢視原始碼 (自 OTP 21.0 起)
-spec fwrite(Format, Data, Options) -> chars()
                when
                    Format :: io:format(),
                    Data :: [term()],
                    Options :: [Option],
                    Option :: {chars_limit, CharsLimit},
                    CharsLimit :: chars_limit().

傳回根據 Format 格式化的 Data 的字元列表,其方式與 fwrite/2format/2 相同,但多了一個引數,即選項列表。

有效選項

  • {chars_limit, CharsLimit} - 對傳回的字元數設定軟性限制。當達到字元數時,其餘結構會被 "..." 取代。CharsLimit 預設為 -1,表示對傳回的字元數沒有限制。
此函式的連結

indentation(String, StartIndent)

檢視原始碼
-spec indentation(String, StartIndent) -> integer() when String :: string(), StartIndent :: integer().

如果已列印 String,則從 StartIndent 開始傳回縮排。

此函式的連結

latin1_char_list(Term)

檢視原始碼 (自 OTP R16B 起)
-spec latin1_char_list(Term) -> boolean() when Term :: term().

如果 Term 是 ISO Latin-1 範圍內的字元扁平列表,則傳回 true,否則傳回 false

-spec nl() -> string().

傳回表示新行字元的字元列表。

-spec print(Term) -> chars() when Term :: term().

等同於 print(Term, 1, 80, -1)

此函式的連結

print(Term, Column, LineLength, Depth)

檢視原始碼
-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,表示沒有限制。
此函式的連結

printable_latin1_list(Term)

檢視原始碼 (自 OTP R16B 起)
-spec printable_latin1_list(Term) -> boolean() when Term :: term().

如果 Term 是可列印的 ISO Latin-1 字元的扁平列表,則傳回 true,否則傳回 false

-spec printable_list(Term) -> boolean() when Term :: term().

如果 Term 是可列印字元的扁平列表,則傳回 true,否則傳回 false

在這種情況下,可列印字元由 Erlang VM 的啟動旗標 +pc 決定;請參閱 io:printable_range/0erl(1)

此函式的連結

printable_unicode_list(Term)

檢視原始碼 (自 OTP R16B 起)
-spec printable_unicode_list(Term) -> boolean() when Term :: term().

如果 Term 是可列印的 Unicode 字元的扁平列表,則傳回 true,否則傳回 false

此函式的連結

scan_format(Format, Data)

檢視原始碼 (自 OTP 18.0 起)
-spec scan_format(Format, Data) -> FormatList
                     when
                         Format :: io:format(), Data :: [term()], FormatList :: [char() | format_spec()].

傳回對應於指定格式字串的列表,其中控制序列已替換為對應的元組。此列表可以傳遞至

此函數的典型用途是在格式化為文字之前,將無邊界大小的控制序列(如 ~w~p)替換為深度限制的版本(如 ~W~P),例如在記錄器中。

此函式的連結

unscan_format(FormatList)

檢視原始碼 (自 OTP 18.0 起)
-spec unscan_format(FormatList) -> {Format, Data}
                       when
                           FormatList :: [char() | format_spec()],
                           Format :: io:format(),
                           Data :: [term()].

詳細資訊請參閱 scan_format/2

-spec write(Term) -> chars() when Term :: term().

等同於 write(Term, -1)

此函式的連結

write(Term, DepthOrOptions)

檢視原始碼
-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|...],...}"
-spec write_atom(Atom) -> chars() when Atom :: atom().

傳回列印原子 Atom 所需的字元列表。

此函式的連結

write_atom_as_latin1(Atom)

檢視原始碼 (自 OTP 20.0 起)
-spec write_atom_as_latin1(Atom) -> latin1_string() when Atom :: atom().

傳回列印原子 Atom 所需的字元列表。非 Latin-1 字元會被跳脫。

-spec write_char(Char) -> chars() when Char :: char().

傳回列印 Unicode 字元集中字元常數所需的字元列表。

此函式的連結

write_char_as_latin1(Char)

檢視原始碼 (自 OTP R16B 起)
-spec write_char_as_latin1(Char) -> latin1_string() when Char :: char().

傳回列印 Unicode 字元集中字元常數所需的字元列表。非 Latin-1 字元會被跳脫。

此函式的連結

write_latin1_char(Latin1Char)

檢視原始碼 (自 OTP R16B 起)
-spec write_latin1_char(Latin1Char) -> latin1_string() when Latin1Char :: unicode:latin1_char().

傳回列印 ISO Latin-1 字元集中字元常數所需的字元列表。

此函式的連結

write_latin1_string(Latin1String)

檢視原始碼 (自 OTP R16B 起)
-spec write_latin1_string(Latin1String) -> latin1_string() when Latin1String :: latin1_string().

傳回列印 Latin1String 作為字串所需的字元列表。

-spec write_string(String) -> chars() when String :: string().

傳回列印 String 作為字串所需的字元列表。

此函式的連結

write_string_as_latin1(String)

檢視原始碼 (自 OTP R16B 起)
-spec write_string_as_latin1(String) -> latin1_string() when String :: string().

傳回列印 String 作為字串所需的字元列表。非 Latin-1 字元會被跳脫。