2015-12-13 23 views
2

我在程序FREAD:如何在二郎获得用fread字符串没有“”

{ok, [S]} = io:fread("entry: \n", "~s") 

,但我得到{ok, "string"}

我希望得到公正的字符串,而不是引号。

所以我可以用它:

digraph:add_vertex(G, S) 

,并获得顶点的字符串,而不是“字符串”

我怎样才能做到这一点?

+0

请问您的问题是否意味着您想要原子而不是字符串? –

回答

9

这是一种幻觉。引号不是真的在那里。外壳或其他显示机制可以让他们在一定的情境,以表示正在显示的数据呈现,但在这种情况下,报价其实只是元数据:

这里是你的情况:

1> {ok, [S]} = io:fread("entry: \n", "~s"). 
entry: 
foo 
{ok,["foo"]} 

如果显示个不折不扣不过,你会看到它是一个只有3个字符的列表:

2> io:format("~w~n", [S]).     
[102,111,111] 
ok 

如果你问IO:格式/ 2到一般显示的数据,用它诠释的最好体现的数据虽然,它认为'啊哈,这是一个字符串,我将作为一个字符串“显示它:

3> io:format("~p~n", [S]). 
"foo" 
ok 
4> 

字符串是显然只是列出,所以在这这种情况下,决定要作出显示为一个字符串,或者作为一个列表,由于列表字节都表示可打印字符,所以决定显示为字符串。添加一个不可打印的字符会改变行为,如下所示:

5> io:format("~p~n", [[2|S]]). 
[2,102,111,111] 
ok 
6> 
+0

如果要打印不带引号的字符串,可以使用〜s格式:'io:format(“〜s〜n”,[“Hello”])。'' – Pascal