将元组的字符串表示转换为实际的元组

3

如何将此字符串 "[{type,a},{to,room01023123},{body,hey what's up mister},{by,someone}]" 转换为如下元组 [{"type","a"},{"to","room01023123"},{"body","hey what's up mister"},{"by","someone"}]


那不是一个有效的 Erlang 元组,具体来说是 {body,hey what's up mister} 部分。这只是一个虚构的例子吗? - Patrick Oscity
你想用Erlang还是Elixir来完成它? - Patrick Oscity
1
如果您修复字符串中的引号以使其有效,并在字符串末尾添加句号,例如:"[{\"type\",\"a\"},{\"to\",\"room01023123\"},{\"body\",\"hey what's up mister\"},{\"by\",\"someone\"}].",那么您可以像this question中所示使用 erl_scan:string/1erl_parse:parse_term/1 - Steve Vinoski
@PatrickOscity 抱歉,我删除了Elixir标签,因为它是用于Erlang的。 - user1000622
1个回答

5
如果需要从文件中读取内容,只需使用file:consult函数。
-spec consult(Filename) -> {ok, Terms} | {error, Reason}

否则,您可以使用erl_parse模块与erl_scan进行此操作。在像这样的最简单情况下:
{ok, Tokens, _Line} = erl_scan:string("{hello, world}."),
erl_parse:parse_term(Tokens).

不要忘记术语应该以句点结尾。


1
在这种情况下,file:consult/1不起作用,因为该术语无效。而答案中的erl_scanerl_parse部分是this answer的重复。 - Steve Vinoski
@SteveVinoski 如果术语无效,第一步当然是使术语有效 :) - Lol4t0
当然,如果是这种情况,那么这个问题就是这个问题的重复。 - Steve Vinoski
@SteveVinoski,差不多。但是这个答案并不完全重复,因为从文件中读取配置是常见的任务。 - Lol4t0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接