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