erlang 格式化输出

io:format的格式化参数。

c输出多个重复的字符。

1.io:format(”~2c”,”a”).

结果:aa,标识输出字母2次。

2.io:format(”~2.1c”,”a”).

结果:_a,标识输出2个字符,1个是后面跟的字母,另一个位置用空格补充,从左开始,如果是”~-2.1c”是从右侧开始。

s打印字符串,按手册说只接受list,atom,2进制的结构。

w,p是标准输出,支持term,区别是p会对输出的数据做一些分行处理,w会显示在一行。

io_lib:format("~2.10.0B",[2])

结果[["0","2"]]

2表示总位数,10B表示10进制,0表示不足的位补0

补充:

c表示只接受ASCII码所表示的数字,如果传的参数是字符串"a"或者字符a都会报错

2> 
io:format("|~10.5c|~-10.5c|~5c|~n", [$a, $b, $c]).
|     aaaaa|bbbbb     |ccccc|
ok

10.5表示长度是10打印5次

~t表示按unicode输出

2> 
1> io:format("~tc~n",[1024]).
\x{400}
ok
2> io:format("~c~n",[1024]).
^@
ok

f,e,g数据类型都是跟float

f默认保留6为小数,不足位补0,小数位数最少是1位

ሀ踀130> io:format("~f~n",[97.1]).
97.100000
ok
131> io:format("~f~n",[97.16578]).
97.165780
ok
132> io:format("~15.5f~n",[97.16578]).
       97.16578
ok
15.5表示 数字占15位,小数保留5位(保留时四舍五入)
133> io:format("~15.0f~n",[97.16578]).
** exception error: bad argument
     in function  io:format/3
        called as io:format(<0.24.0>,"~15.0f~n",[97.16578])
134> io:format("~15.1f~n",[97.16578]).
           97.2
ok
135> io:format("~3.1f~n",[97.16578]). 
***
ok
如果给出的位数小于最小显示的位数(这里必须保留一位小数,所以(~4.1f)才能显示完全,小数点占一位 ,结构得到***

e默认保留6为小数,不足位补0,小数位数最少是2位

142> io:format("~8.3e~n",[97.16578]).
 9.72e+1
ok
143> io:format("~8.4e~n",[97.16578]).
9.717e+1
ok

g如果值>=0.1<10000.0则按f规则显示,否则按e的规则。

s按string语法规则输出,如果不带t,参数可以使I/O字符串,二进制数据或atom(不能使integer和float),

如果输出规则有t参数类型数chardata(),

输出结构都无引号

152> 
io:format("~s~n",[{hey,hey,hey}]).
** exception error: bad argument
     in function  io:format/3
        called as io:format(<0.24.0>,"~s~n",[{hey,hey,hey}])
153> io:format("~s~n",["{hey,hey,hey}"]).
{hey,hey,hey}
ok

155> A=io_lib:write({hey,hey,hey}).
[123,["hey",44,"hey",44,"hey"],125]
156> io:format("~s~n",[A]).              
{hey,hey,hey}
ok
157> io:format("~10.4s~n",["{hey,hey,hey}"]).
      {hey
ok
163> io:format("~ts~n",[a]).     
a
ok

158> io:format("~s~n",[[a]]).                
** exception error: bad argument
     in function  io:format/3
        called as io:format(<0.24.0>,"~s~n",[[a]])

159> io:format("~s~n",[[97]]).
a
ok
这里正确因为[97] = "a"  所以参数不管是atom a还是字符串“a” 结果都是atom a
160> io:format("~s~n",[[970]]).
** exception error: bad argument
     in function  io:format/3
        called as io:format(<0.24.0>,"~s~n",[[970]])
161> io:format("~ts~n",[[970]]).
ϊ
ok

w用于输出erlangterm

164> io:format("~w~n",[a]). 
a
ok
165> io:format("~w~n",[[a]]).
[a]
ok
166> io:format("~w~n",[[97]]).
[97]
ok

p和w相识的输出规则,不同的是w输出是没有格式的,字符串会显示位ascII编码

p的输出是有格式的,默认一行的显示的最大长度为80,可以自己定义显示的最大值。并且尽可能字符串输出

5> T = [{attributes,[[{id,age,1.50000},{mode,explicit},
{typename,"INTEGER"}], [{id,cho},{mode,explicit},{typename,'Cho'}]]},
{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}].
...
6> io:format("~w~n", [T]).
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,
[73,78,84,69,71,69,82]}],[{id,cho},{mode,explicit},{typena
me,'Cho'}]]},{typename,'Person'},{tag,{'PRIVATE',3}},{mode
,implicit}]
ok
7> io:format("~62p~n", [T]).
[{attributes,[[{id,age,1.5},
               {mode,explicit},
               {typename,"INTEGER"}],
              [{id,cho},{mode,explicit},{typename,'Cho'}]]},
 {typename,'Person'},
 {tag,{'PRIVATE',3}},
 {mode,implicit}]
ok

W,P和w,p的区别在于可以控制terms输出的深度(深度的定义?)

239> io:format("~W~n",[T,9]). 
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,...}],[{id,cho},{mode,...},{...}]]},{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}]
ok
240> io:format("~W~n",[T,8]).
[{attributes,[[{id,age,...},{mode,...},{...}],[{id,...},{...}|...]]},{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}]
ok
241> io:format("~W~n",[T,7]).
[{attributes,[[{id,...},{...}|...],[{...}|...]]},{typename,'Person'},{tag,{'PRIVATE',...}},{mode,implicit}]
ok

B同b值为2-36默认是10控制按多少进制显示

248> io:format("|~3.16b|~n",[31]).
| 1f|
ok
11> io:format("~.16B~n", [31]).
1F
ok
12> io:format("~.2B~n", [-19]).
-10011
ok
285> io:format("~15.16.2B~n", [-19]).
222222222222-13
ok

Xx和B类似,比B多一个参数,显示在结果的前面

14> io:format("~X~n", [31,"1000#"]).
1000#31
ok
15> io:format("~.16X~n", [-31,"0x"]).
-0x1F
ok

#和B类似,在结果的前面显示进制数

16> io:format("~.10#~n", [31]).
10#31
ok
17> io:format("~.16#~n", [-31]).
-16#1F
ok
ok

b

同B,但打印小写字母。

x

同X,但打印小写字母。

+

同#,但打印小写字母。

i

忽略了下一届。

相关推荐