String 在列表中查找字符串-Erlang
我想知道列表中是否真的有字符串。这是我的代码:String 在列表中查找字符串-Erlang,string,list,erlang,String,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("ms
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.
比较()->
FileName=“msg-0001”,
{ok,[NumLine],{}=io_lib:fread(“msg-~d”,文件名),
io:格式(“Numline:~p~n”,[Numline]),
{ok,Pars}=file:read_file(“parsing.txt”),
{ok,Dump}=file:read_file(“msg-0001”),
StringNumline=列表:展平(io_lib:format(“~p”,[NumLine]),
io:格式(“StringNumline:~p~n”,[StringNumline]),
StringDump=list:flant(io_lib:format(“~p”,[Dump]),
io:格式(“StringDump:~p~n”,[StringDump]),
SubStringDump=string:substr(StringDump,4),
io:格式(“子字符串转储:~p~n”,[SubStringDump]),
Ndump=concat(StringNumline,SubStringDump),
io:格式(“Ndump:~p~n,[Ndump]),
FineDump=Ndump--“\”>>”,
io:格式(“FineDump:~p~n”,[FineDump]),
L1=二进制:拆分(PAR,[全局]),
io:格式(“L1=~p~n,[L1]),
检查=列表:成员(FineDump,L1),
io:format(“Check=~p~n,[Check]),
如果
检查->
文件:写入文件(“check.txt”、“true\n”、“append”);
正确->
文件:写入文件(“check.txt”、“false\n”、[append])
结束。
下面是代码的输出:
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
10>c(比较)。
{好的,比较一下}
11> 比较:比较()。
数字线:1
StringNumline:“1”
StringDump:“
子字符串转储:“你好\“>>”
Ndump:“1hello\”>>”
FineDump:“你好”
L1=[,,,,,
,,,,]
检查=错误
好啊
我在第
行检查=列表:成员(FineDump,L1)中遇到问题
。尽管1hello是列表的成员,但它始终为false。我不知道错误在哪里。它是函数列表:此操作的成员良好?还是存在其他方法来确定字符串是否是列表的成员?我是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>>
1>NumLine=1。
1.
2> 转储=。
3> .
请查看我的编辑。您不需要执行所有这些string:substr
和io:format
内容(如果二进制文件包含双引号或尖括号,这也是不正确的)只是将整数和二进制连接起来。很好的解决方案,我尝试了很多方法来编写代码,所以我采用了这种复杂的方法。这种方法很有效,所以我很满意。但是你的方法要好得多。非常感谢:)
lists:member(X, L1)
1> NumLine = 1.
1
2> Dump = <<"hello">>.
<<"hello">>
3> <<(integer_to_binary(NumLine))/binary, Dump/binary>>.
<<"1hello">>