[英]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),
您似乎也以不必要的复杂方式进行此操作。 如果我理解逻辑很好,则不需要所有代码。 您可以使用以下命令将NumLine
和Dump
连接成二进制文件:
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.