用erlang语言将元组转换为字符串

时间:2015-02-18 12:53:10

标签: erlang

Tuple={<<"jid">>,Member},

Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),

它输出为:

"{<<\"jid\">>,\"sdfs\"}"

但我希望这个输出没有像

这样的斜线
"{<<"jid">>,Member}"

任何指针?

我已经尝试了所有答案,但最后使用了io:format(&#34; \&#34; ~s \&#34; ~n&#34;,[Tuple_in_string])。什么是geeting&#34; {&lt;&lt;&#34; jid&#34;&gt;&gt;,会员}&#34;但它不是一个string.it是一个atom.I需要字符串,我可以应用concat操作。任何指针?

4 个答案:

答案 0 :(得分:1)

L =  Packet_in_tuple_form={xmlel,<<"message">>,[{<<"id">>,<<"rkX6Q-8">>},{<<"to">>,<<"multicast.devlab">>}],[{xmlel,<<"body">>,[],[{xmlcdata,"Hello"}]},{xmlel,<<"addresses">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/address">>}],[{xmlel,<<"address">>,[{<<"type">>,<<"to">>},"{<<\"jid\">>,\"sds\"}",{<<"desc">>,"Description"}],[]}]}]}.

给我:

{xmlel,<<"message">>,
   [{<<"id">>,<<"rkX6Q-8">>},{<<"to">>,<<"multicast.devlab">>}],
   [{xmlel,<<"body">>,[],[{xmlcdata,"Hello"}]},
    {xmlel,<<"addresses">>,
           [{<<"xmlns">>,<<"http://jabber.org/protocol/address">>}],
           [{xmlel,<<"address">>,
                   [{<<"type">>,<<"to">>},
                    "{<<\"jid\">>,\"sds\"}",
                    {<<"desc">>,"Description"}],
                   []}]}]}

地址字段中的\是转义字符。 您可以通过检查字符串的长度来验证相同的内容。

答案 1 :(得分:0)

您可以这样打印:

io:format("\"~s\"~n", [Tuple_in_string]).

打印:

"{<<"jid">>,"sdfs"}"

答案 2 :(得分:0)

\这里表示以下“是字符串的一部分而不是字符串分隔符。它们不存在于字符串本身中。它们出现是因为你使用漂亮的打印格式~p。如果你使用字符串format~s它们不会出现在显示屏上。

1> io:format("~p~n",["a \"string\""]).               
"a \"string\""
ok
2> io:format("~s~n",["a \"string\""]).
a "string"
ok
3> length("a \"string\""). % is 10 and not 12                     
10

答案 3 :(得分:0)

首先,您不需要在此处展平列表:

Tuple_in_string=lists:flatten(io_lib:format("~p", [Tuple])),

Erlang具有iodata()的概念,这意味着可打印的东西可以在嵌套列表中,大多数函数都可以处理它们,所以你应该只留下:

Tuple_in_string = io_lib:format("~p", [Tuple]),

其次,当您使用~p时,您告诉Erlang以这种方式打印该术语,可以将其复制并粘贴到控制台中。这就是所有双引号都被转义\"的原因。使用~s,表示&#34;视为字符串&#34;。

1> 38> Tuple = {<<"jid">>,"asdf"}.
{<<"jid">>,"asdf"}
2> IODATA = io_lib:format("~p", [Tuple]).
[[123,[[60,60,"\"jid\"",62,62],44,"\"asdf\""],125]]
3> io:format("~s~n", [IODATA]).
{<<"jid">>,"asdf"}
ok