我在递归地将.txt文件内容插入MySQL数据库时遇到问题。
现在我有一个函数读取.txt文件并从文件中获取特定行。它成功地将一个特定的行插入到List中,然后我将其插入到MySQL DB中,但是当我尝试从第1行转到n并且每行完成时我真的迷路了。
我已经尝试使用erlang:length()来收集列表的最大长度,并为每个插入的行减少一个,但它不会工作。我尝试过这样的事情。
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).
但它崩溃了,我不知道为什么。提示很感激!谢谢!
答案 0 :(得分:1)
那么当NewLineNR = -1时会发生什么? Erlang会因为无法匹配任何getLine子句而烦恼。
虽然line_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
原子。