List 从Erlang中的列表构建元组列表
我试图从文件中读取内容,然后将其组织到元组列表中。我已经将文件读入了一个数字列表,但是它似乎会在换行后立即跳过数字,如何防止这种行为? 我保证文件的字符数为偶数List 从Erlang中的列表构建元组列表,list,erlang,pattern-matching,List,Erlang,Pattern Matching,我试图从文件中读取内容,然后将其组织到元组列表中。我已经将文件读入了一个数字列表,但是它似乎会在换行后立即跳过数字,如何防止这种行为? 我保证文件的字符数为偶数 -module(brcp). -export([parse_file/1]). parse_file(Filename) -> read_file(Filename). read_file(Filename) -> {ok, File} = file:read_file(Filename), Co
-module(brcp).
-export([parse_file/1]).
parse_file(Filename) ->
read_file(Filename).
read_file(Filename) ->
{ok, File} = file:read_file(Filename),
Content = unicode:characters_to_list(File),
build_tuples([begin {Int,_}=string:to_integer(Token), Int end|| Token<-string:tokens(Content," /n/r")]).
build_tuples(List) ->
case List of
[] -> [];
[E1,E2|Rest] -> [{E1,E2}] ++ build_tuples(Rest)
end.
当然,在使用将二进制文件添加到元组时,可以将二进制文件转换为整数。代码中使用的函数将所有空字符(制表符、空格、新行)解析为空二进制文件,然后trim_all
忽略它们。如果您的输入始终格式正确,则可以跳过它们。结果:
14> tuples:parse().
[<<"1">>,<<"7">>,<<"11">>,<<"0">>,<<"1">>,<<"3">>,<<"5">>,<<"0">>,<<"7">>,<<"0">>,<<"1">>,<<"8">>,<<"10">>,<<"0">>,<<"1">>,<<"11">>,<<"99">>,<<"0">>]
[{<<"1">>,<<"7">>},{<<"11">>,<<"0">>},{<<"1">>,<<"3">>},{<<"5">>,<<"0">>},{<<"7">>,<<"0">>},{<<"1">>,<<"8">>},{<<"10">>,<<"0">>},{<<"1">>,<<"11">>},{<<"99">>,<<"0">>}]
14>元组:parse()。
[,,,,,,,,,,,,,,,,,]
[{,},{,},{,},{,},{,},{,},{,},{,},{,}]
我认为“列表理解”在这里是一个很好的开始,尽管您只有一个列表,需要一个元组列表。同时,我坚信它是“tuple”而不是“touple”,谢谢:)我单独读取并加载了数字,但是如果我遇到换行符,它会跳过紧跟其后的数字D:你能添加输入数据的示例吗?我相信在这里使用会更有效,但在不知道您实际阅读的内容的情况下,我无法提出解决方案。哈哈哈,我使用的令牌delimeters使用的是正斜杠而不是反斜杠,它现在可以按照我的要求工作了!
-module(tuples).
-export([parse/0]).
parse() ->
{ok, File} = file:read_file("tuples.txt"),
List = binary:split(File, [<<" ">>, <<"\t">>, <<"\n">>], [global, trim_all]),
io:format("~p~n", [List]),
build_tuples(List, []).
build_tuples([X,Y|T], Acc) ->
build_tuples(T, [{X,Y}|Acc]);
build_tuples([X|T], Acc) ->
build_tuples(T, [{X, undefined}|Acc]);
build_tuples([], Acc) ->
lists:reverse(Acc).
1 7 11 0
1 3 5 0 7 0
1 8 10 0 1 11
99 0
14> tuples:parse().
[<<"1">>,<<"7">>,<<"11">>,<<"0">>,<<"1">>,<<"3">>,<<"5">>,<<"0">>,<<"7">>,<<"0">>,<<"1">>,<<"8">>,<<"10">>,<<"0">>,<<"1">>,<<"11">>,<<"99">>,<<"0">>]
[{<<"1">>,<<"7">>},{<<"11">>,<<"0">>},{<<"1">>,<<"3">>},{<<"5">>,<<"0">>},{<<"7">>,<<"0">>},{<<"1">>,<<"8">>},{<<"10">>,<<"0">>},{<<"1">>,<<"11">>},{<<"99">>,<<"0">>}]