Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在列表中查找字符串-Erlang_String_List_Erlang - Fatal编程技术网

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">>