2015-12-13 22 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