将从文件中读取的行拆分为Erlang中的键值对数组

58wvjzkj  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(171)

我有一个包含N个键值对的txt文件:

key_1=val_1
key_2=val_2
key_N=val_N

我需要读取此文件并将其设置为数组:

Attributes = [
    {key_1, val_1},
    {key_2, val_2},
    {key_N, val_N}],

我尝试了几种不同的方法,但都不成功,我得到的最接近的方法如下:

{ok, FileAttributes} = file:read_file("/data/file-attributes.txt"),
string:split(FileAttributes, "=", all)

但是当我打印这个的时候,我得到:

key_1val_1
key_2val_2
key_Nval_N

读取file-attributes.txt并将键和值拆分为Attributes数组的项的最佳方式是什么?

wydwbb8l

wydwbb8l1#

我有一个包含N个键值对的txt文件:

key_1=val_1
key_2=val_2
key_N=val_N

我需要读取此文件并将其设置为数组:
第一次
--输出:--

58> c(a).                               
a.erl:2:2: Warning: export_all flag enabled - all functions will be exported
%    2| -compile(export_all).
%     |  ^

{ok,a}

59> a:make_array("file-attributes.txt").
Line= -->key_1=val_1<--
Term={key_1, val_1}
Line= -->key_2=val_2<--
Term={key_2, val_2}
Line= -->key_N=val_N<--
Term={key_N, val_N}
Result=
[{<<"key_1">>,<<"val_1">>},
 {<<"key_2">>,<<"val_2">>},
 {<<"key_N">>,<<"val_N">>}]
ok
ou6hu8tu

ou6hu8tu2#

匹配示例:

-module(a).
-compile(export_all).

go([{1, Y, Z}=Tuple | Tuples]) ->
    io:format("~w -> 2nd + 3rd = ~w~n", [Tuple, Y+Z]),
    go(Tuples);
go([{X, 2, Z}=Tuple | Tuples]) ->
    io:format("~w -> 1st + 3rd = ~w~n", [Tuple, X+Z]),
    go(Tuples);
go([{X, Y, 3}=Tuple | Tuples]) ->
    io:format("~w -> 1st + 2nd = ~w~n", [Tuple, X+Y]),
    go(Tuples);
go([{X, Y, Z}=Tuple | Tuples]) ->
    io:format("~w -> Sum = ~w~n", [Tuple, X+Y+Z]),
    go(Tuples);
go([]) -> all_done.

test() ->
    go([
        {1, 2, 3},
        {3, 2, 1},
        {3, 4, 3},
        {10, 20, 30}
       ]).
  • -输出:--
14> c(a).    
a.erl:2:2: Warning: export_all flag enabled - all functions will be exported
%    2| -compile(export_all).
%     |  ^

{ok,a}

15> a:test().
{1,2,3} -> 2nd + 3rd = 5
{3,2,1} -> 1st + 3rd = 4
{3,4,3} -> 1st + 2nd = 7
{10,20,30} -> Sum = 60
all_done

具有一个元素的列表可以写为:

[ 4 | [] ]

因此,如果有以下函数子句:

go( [Head|Tail] ) -> 
    %% do stuff with Head
    go(Tail).

并呼叫:

g([4]).

Erlang会将4赋给Head,将空列表[]赋给Tail。但是,当Tail是空列表时,对go(Tail)的调用将不匹配该函数子句,从而导致程序崩溃。
另外,请注意,与Java不同,函数头可以混合使用常量和变量作为参数。

相关问题