File 将文本文件的内容递归地插入mysql数据库Erlang
我在递归地将.txt文件内容插入MySQL数据库时遇到问题 现在我有一个函数,它读取一个.txt文件并从该文件中获取一行特定内容。它成功地将一个特定的行插入到一个列表中,然后将其插入MySQL数据库中,但是当我尝试从第1行插入到第n行并逐个执行每一行时,我真的迷失了方向 我尝试使用erlang:length()来收集列表的最大长度,并使其每插入一行减少一个长度,但它不起作用。我试过这样的东西File 将文本文件的内容递归地插入mysql数据库Erlang,file,list,recursion,erlang,File,List,Recursion,Erlang,我在递归地将.txt文件内容插入MySQL数据库时遇到问题 现在我有一个函数,它读取一个.txt文件并从该文件中获取一行特定内容。它成功地将一个特定的行插入到一个列表中,然后将其插入MySQL数据库中,但是当我尝试从第1行插入到第n行并逐个执行每一行时,我真的迷失了方向 我尝试使用erlang:length()来收集列表的最大长度,并使其每插入一行减少一个长度,但它不起作用。我试过这样的东西 start() -> Lines = into_list("Filepath"),
start() ->
Lines = into_list("Filepath"),
LineNR = erlang:length(Lines),
getLine(LineNR, Lines).
getLine(NewLineNR, List) when NewLineNR >= 0 ->
NewNewLineNR = NewLineNR - 1,
task(NewNewLineNR, List).
task(NewLineNR, List) ->
Line = line_nr( NewLineNR , List),
[List] = string:tokens(Line, ","),
Insert = [List],
%%The insertion in the DB happens here
insert_to_db(Insert),
getLine(NewLineNR, List).
但它坠毁了,我不知道为什么。小费是感激的!谢谢 那么当NewLineNR=-1时会发生什么呢?Erlang会崩溃,因为它不能匹配任何getLine子句 不过,您可以做得简单一点(假设
line\u nr
只是将x行从列表中删除)。在Erlang中,您可以使用模式匹配来控制程序流,而不是依赖于跟踪列表中正在使用的项目:
start() ->
Lines = into_list("Filepath"),
task(Lines).
task([Head | Tail]) ->
TokensList = string:tokens(Head, ","),
%%The insertion in the DB happens here
insert_to_db(TokensList),
task(Tail);
task([]) -> done.
这个版本使用列表头/尾模式匹配来帮助递归列表。假设into_list
只是将文件读入字符串列表,则代码执行以下操作:
done
atom你收到了什么车祸报告?没有,只是停止了工作。如果有帮助的话,可以使用Eclipse。我错误地搜索了这个,并进行了一些错误处理,似乎我的列表在这些行的某个地方变为空了?什么是
line\nr
do/return?进入\u列表
返回的数据结构是什么?这仅仅是一个字符串列表吗?line_nr获取一个特定的行(即“NewLineNR”的值),into_list返回一个字符串列表,如下所示:1 4 15 43 2 4 12 33甚至不确定它是否达到-1。如果他使用的是lists:nth,那么当他达到0时,它就会崩溃。@Soupd'Campbells是真的。谢谢,这让我对它有了更多的理解。现在的情况是,当我试图从每个令牌列表中分离“”时,我得到“**异常错误:右侧值不匹配”。@BorisMeister您能在字符串:令牌
行之前添加io:fwrite(“~w~n”,[Head]),
,然后用输出返回吗?我想看看你在字符串中传递了什么:tokens.注释了insert_to_db()并添加了你的行,它给了我很多这样的行:[50,48,49,50,49,50,49,55,44,53,49,56,56,51,48,48,48,44,53,50,48,48,48,48,48,48,48,48,49,50,51,48,48,48,44,48,48,48,48,53,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,