繁体   English   中英

在列表中查找字符串-Erlang

[英]Find string in list - Erlang

我正在尝试查找列表中是否确实有某些字符串。 有我的代码:

comparing() ->
    FileName = "msg-0001",
    {ok,[NumLine],_} = io_lib:fread("msg-~d",FileName),
    io:format("Numline:~p~n", [NumLine]),
    {ok, Pars} = file:read_file("parsing.txt"),
    {ok, Dump} = file:read_file("msg-0001"),
    StringNumline = lists:flatten(io_lib:format("~p", [NumLine])),
    io:format("StringNumline:~p~n", [StringNumline]),
    StringDump = lists:flatten(io_lib:format("~p", [Dump])),
    io:format("StringDump:~p~n", [StringDump]),
    SubStringDump = string:substr(StringDump, 4),
    io:format("SubStringDump:~p~n", [SubStringDump]),
    Ndump = concat(StringNumline, SubStringDump),
    io:format("Ndump:~p~n", [Ndump]),
    FineDump = Ndump--"\">>",
    io:format("FineDump:~p~n", [FineDump]),
    L1 = binary:split(Pars, <<"\r\n">>, [global]),
    io:format("L1=~p~n", [L1]),
    Check = lists:member(FineDump, L1),
    io:format("Check=~p~n", [Check]),

    if
        Check ->
            file:write_file("check.txt", "true\n", [append]);

        true ->
            file:write_file("check.txt", "false\n", [append])
    end.

这是代码的输出:

10> c(compare).         
{ok,compare}
11> compare:comparing().
Numline:1
StringNumline:"1"
StringDump:"<<\"hello\">>"
SubStringDump:"hello\">>"
Ndump:"1hello\">>"
FineDump:"1hello"
L1=[<<"0hello">>,<<"something">>,<<"anyword">>,<<"1hello">>,<<"2exercise">>,
    <<"2solution">>,<<"3test">>,<<"new">>,<<"4check">>,<<"4grade">>]
Check=false
ok

我在Check = lists:member(FineDump, L1)行中遇到问题。 尽管1hello是列表的成员,但它始终是错误的。 我不知道哪里出了错。 它是function list:member可以执行此操作吗? 还是存在其他方法来查找字符串是否为列表的成员? 我是Erlang的新手。

L1是二进制列表,而FineDump是字符串(Erlang中的整数列表)。 您需要将FineDump转换为二进制文件,以使lists:member/2调用起作用。

这应该工作:

Check = lists:member(list_to_binary(FineDump), L1),

您似乎也以不必要的复杂方式进行此操作。 如果我理解逻辑很好,则不需要所有代码。 您可以使用以下命令将NumLineDump连接成二进制文件:

X = <<(integer_to_binary(NumLine))/binary, Dump/binary>>

然后直接在lists:member使用它:

lists:member(X, L1)
1> NumLine = 1.
1
2> Dump = <<"hello">>.
<<"hello">>
3> <<(integer_to_binary(NumLine))/binary, Dump/binary>>.
<<"1hello">>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM