查看源代码 io_lib (stdlib v6.2)

I/O 库函数。

此模块包含用于与字符串(字符列表)相互转换的函数。它们用于实现 io 模块中的函数。不能保证某些函数返回的字符列表是扁平的,它们可以是深层列表。函数 lists:flatten/1 可用于扁平化深层列表。

概述

类型

一个可能很深的列表,仅包含 char/0

fread/3 返回的延续。

描述格式字符串内容的映射。

函数

有关详细信息,请参阅 scan_format/2

如果 Term 是 Unicode 范围内的字符的扁平列表,则返回 true,否则返回 false

如果 Term 是 Unicode 范围内的字符的(可能很深)列表,则返回 true,否则返回 false

如果 Term 是 ISO Latin-1 范围内的字符的(可能很深)列表,则返回 true,否则返回 false

尝试根据 Format 中的控制序列读取 String

这是可重入的格式化读取器。对函数的第一次调用延续必须为 []

返回一个字符列表,表示根据 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 返回的延续。

-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()}.

描述格式字符串内容的映射。

  • 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()}}.

这是可重入的格式化读取器。对函数的第一次调用延续必须为 []

有关可重入输入方案如何工作的完整描述,请参阅 Armstrong、Virding、Williams:《Erlang 并发编程》第 13 章。

该函数返回

  • {done, Result, LeftOverChars} - 输入完成。结果是以下之一

    • {ok, InputList} - 字符串已读取。InputList 是成功匹配和读取的项的列表,LeftOverChars 是剩余的字符。

    • eof - 遇到文件结尾。LeftOverChars 是未使用的输入字符。

    • {error, What} - 发生错误,参数 What 提供了有关错误的提示。

  • {more, Continuation} - 需要更多数据才能构建项。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 字符会被转义。