在Erlang中删除周围的引号

时间:2017-12-10 05:26:04

标签: erlang

我正在使用epgsql在Erlang中查询数据库。它返回字符串结果,包括它们周围的引号:" what_was_in_the_row"。如何在处理结果之前删除这些引号?

1 个答案:

答案 0 :(得分:4)

控件格式~p(漂亮打印)保存有关打印变量类型的信息。您正在打印一个字符串,即在erlang中,由可打印字符组成的标准整数列表,例如[101,102,103]在shell中显示为"efg"

如果您致电io_lib:format("~p",[[101,102,103]]).,您将获得需要一些解释的结果["\"efg\""]

  • 周围的括号表示一个列表,它是io_lib:format/2的返回值类型,
  • 然后第一个双引号表示另一个列表,可能是一个字符串,它是语法糖,但它不是结果的一部分(我说可能是因为任何看起来像字符串的列表将显示为带有漂亮打印的字符串),
  • 最后\"是一个表示单个字符“
  • 的转义序列

您可以评估每个字符串的长度以验证差异:

  • 3 =长度(“efg”)。
  • 5 =长度(“\”efg \“”)。

如果您想获取没有周围引号的字符串,则必须使用控件格式~s

1> [Res] = io_lib:format("~s",[[101,102,103]]).
["efg"]
2> length(Res).
3
3> [Res] = io_lib:format("~s",[Res]).          
["efg"]

当然,最后一行显示我的例子很愚蠢。使用io_lib:format("~s ~s!",["Hello","world"]).或更复杂的格式,结果类型为chars()char()chars()列表。