gpt4 book ai didi

Erlang - 解析大括号中的数据

转载 作者:行者123 更新时间:2023-12-02 09:36:58 25 4
gpt4 key购买 nike

Erlang专家,我从ejabberd服务器获取如下数据

I(<0.397.0>:mod_http_offline:38) : Data of Fromu {jid,"timok","localhost",
"25636221451404911062246700",
"timok","localhost",
"25636221451404911062246700"}

我对这种数据类型非常困惑。我所需要的只是从随附的花括号中取出蒂莫克。 {} 但不确定如何获取该值。任何获取该值的代码都会很有帮助。目前我正在使用以下代码打印值

?INFO_MSG("Data of Fromu ~p",[_From]),

再次感谢您的时间和努力。

最佳答案

这是一个 erlang 记录(它是一个元组,第一个元素是原子,其他元素是列表/字符串/二进制文件)。

推荐:

Ejabberd 有一个 jid record定义(第 411 行):

-record(jid, {user = <<"">> :: binary(),
server = <<"">> :: binary(),
resource = <<"">> :: binary(),
luser = <<"">> :: binary(),
lserver = <<"">> :: binary(),
lresource = <<"">> :: binary()}).

它位于 ejabberd/include/jlib.hrl 文件中,因此您应该能够通过以下方式包含它来让您的模块知道它:

 -include_lib("ejabberd/include/jlib.hrl").

现在,在您的模块中访问数据的(第一个)“timok”元素,您可以使用 erlang 记录语法(假设 JidData 包含上述数据):

Out = JidData#jid.user.

不推荐:

由于记录在其外观背后是元组,因此您还可以访问元组的第 n 个元素

Out = element(2,JidData).

或者简单地使用模式匹配:

{_, Out, _, _, _, _} = JidData.

使用记录定义

记录基本上是元组上的语法糖。它仍然是一个元组并且可以这样对待。它们很容易使用,但您应该尽力避免将记录视为元组,除非您真的知道自己在做什么。

因为在这种情况下,您甚至无法控制记录定义,所以您确实应该使用它,否则更新后定义的更改将使您的代码无效。

关于Erlang - 解析大括号中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com