非常教程

Erlang 20参考手册

stdlib

io_lib

模块

io_lib

模块摘要

I/O库功能。

描述

此模块包含用于转换字符串(字符列表)的函数。它们用于实现io模块中的功能。无法保证从某些函数返回的字符列表是平坦的,它们可以是深层列表。函数lists:flatten/1可用于展平深层列表。

数据类型

chars() = [char() |chars()]

continuation()

由...fread/3返回的延续。

depth() = -1 | integer() >= 0

fread_error() =

atom |

based |

character |

float |

format |

input |

integer |

string |

unsigned

fread_item() = string() | atom() | integer() | float()

latin1_string() = [unicode:latin1_char()]

format_spec() =

#{control_char := char(),

args := [any()],

width := none | integer(),

adjust := left | right,

precision := none | integer(),

pad_char := char(),

encoding := unicode | latin1,

strings := boolean()}

其中:

  • control_char是控制序列的类型:$P$w等等。
  • args是控制序列使用的参数列表,或者如果控制序列不使用任何参数,则为空列表。
  • width字段宽度。
  • adjust是调整。
  • precision是打印参数的精确性。
  • pad_char是填充字符。
  • 如果存在转换修饰符t,则编码设置为true。
  • 如果修饰符l存在,则字符串设置为false。

输出

build_text(FormatList) -> chars()

类型

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

char_list(Term) -> boolean()

类型

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

deep_char_list(Term) -> boolean()

类型

如果Term是Unicode范围中可能较深的字符列表,则返回true,否则返回false。

deep_latin1_char_list(Term) -> boolean()

类型

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

format(Format, Data) -> chars()

fwrite(Format, Data) -> chars()

类型

返回表示Data根据的格式化的字符列表Format。有关可用格式选项的详细说明,请参阅io:fwrite/1,2,3。如果格式字符串或参数列表包含错误,则会生成错误。

当且仅当在格式字符串(即~ts~tc)中使用Unicode转换修饰符时,结果列表可以包含超出ISO Latin-1字符范围(即数字> 255)的字符。如果是这样,结果仍然是普通的Erlang string(),并且可以在任何允许Unicode数据的上下文中使用。

fread(Format, String) -> Result

类型

尝试String按照中的控制顺序阅读Format。有关可用格式选项的详细说明,请参阅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) -> Return

类型

这是可重入格式的阅读器。首次调用函数的继续必须是[]。有关可重入输入方案如何工作的完整描述,请参见Armstrong,Virding,Williams:'Erlang中的并发编程',第13章。

函数返回:

{done, Result, LeftOverChars}

输入完成。其结果如下:

{ok, InputList}

字符串被读出了。InputList成功匹配和读取项的列表,以及LeftOverChars剩下的角色。

eof

遇到文件结束。LeftOverChars是否未使用输入字符。

{error, What}

发生错误和参数What提示错误。

**`{more, Continuation}`**  

构建一个术语需要更多的数据。Continuation必须传递给fread/3当更多的数据可用时。

indentation(String,StartIndent) - > integer()

类型

如果已经打印了字符串,则从StartIndent开始返回缩进。

latin1_char_list(Term) -> boolean()

类型

如果Term是ISO Latin-1范围内的字符的平面列表,则返回true,否则返回false。

nl() -> string()

返回表示新行字符的字符列表。

print(Term) -> chars()

print(Term, Column, LineLength, Depth) -> chars()

类型

返回表示Term的字符列表,但将表示长度超过一行的表示切分为多行并合理缩进每行。 还尝试检测并输出可打印字符的列表作为字符串。

  • Column起始列;默认值为1。
  • LineLength最大行长;默认值为80。
  • Depth最大打印深度;默认值为-1,这意味着没有限制。

printable_latin1_list(Term) -> boolean()

类型

如果Term是可打印ISO Latin-1字符的平面列表,则返回true,否则返回false。

printable_list(Term) -> boolean()

类型

如果Term是可打印字符的平面列表,则返回true,否则返回false。

在这种情况下,可打印字符是由启动标志+ pc到Erlang VM确定的; 见io:printable_range / 0和erl(1)。

printable_unicode_list(Term) -> boolean()

类型

如果Term是可打印的Unicode字符的平面列表,则返回true,否则返回false。

scan_format(Format, Data) -> FormatList

类型

返回与指定格式字符串对应的列表,其中控制序列已被相应的元组替换。此列表可传递给:

  • build_text / 1与format(Format,Args)具有相同的效果
  • unscan_format/1得到相应的一对FormatArgs(每个*和相应的参数展开为数值)

一个典型的使用这个功能是替代像无限大小的控制序列~w~p与深度限定的变体~W~P格式化为文本中,例如,记录器之前。

unscan_format(FormatList) -> {Format, Data}

类型

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

write(Term) -> chars()

write(Term, Depth) -> chars()

write(Term, Options) -> chars()

类型

返回表示的字符列表Term。参数Depth控制着写入结构的深度。达到指定深度时,低于此级别的所有内容都将替换为“ ...”。Depth默认为-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],[...],...}"

write_atom(Atom) -> chars()

类型

返回打印原子所需的字符列表。Atom...

write_atom_as_latin1(Atom) -> latin1_string()

类型

返回打印原子所需的字符列表。Atom.非拉丁文-1个字符被转义。

write_char(Char) -> chars()

类型

返回在Unicode字符集中打印字符常量所需的字符列表。

write_char_as_latin1(Char) -> latin1_string()

类型

返回在Unicode字符集中打印字符常量所需的字符列表。非拉丁字符被转义。

write_latin1_char(Latin1Char) -> latin1_string()

类型

返回在ISO拉丁-1字符集中打印字符常量所需的字符列表。

write_latin1_string(Latin1String) -> latin1_string()

类型

返回打印Latin1String为字符串所需的字符列表。

write_string(String) -> chars()

类型

返回打印String为字符串所需的字符列表。

write_string_as_latin1(String) -> latin1_string()

类型

返回将字符串打印为字符串所需的字符列表。 非拉丁-1字符被转义。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1