Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 将文本文件的内容递归地插入mysql数据库Erlang_File_List_Recursion_Erlang - Fatal编程技术网

File 将文本文件的内容递归地插入mysql数据库Erlang

File 将文本文件的内容递归地插入mysql数据库Erlang,file,list,recursion,erlang,File,List,Recursion,Erlang,我在递归地将.txt文件内容插入MySQL数据库时遇到问题 现在我有一个函数,它读取一个.txt文件并从该文件中获取一行特定内容。它成功地将一个特定的行插入到一个列表中,然后将其插入MySQL数据库中,但是当我尝试从第1行插入到第n行并逐个执行每一行时,我真的迷失了方向 我尝试使用erlang:length()来收集列表的最大长度,并使其每插入一行减少一个长度,但它不起作用。我试过这样的东西 start() -> Lines = into_list("Filepath"),

我在递归地将.txt文件内容插入MySQL数据库时遇到问题

现在我有一个函数,它读取一个.txt文件并从该文件中获取一行特定内容。它成功地将一个特定的行插入到一个列表中,然后将其插入MySQL数据库中,但是当我尝试从第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).

但它坠毁了,我不知道为什么。小费是感激的!谢谢

那么当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
只是将文件读入字符串列表,则代码执行以下操作:

  • 将文件读入列表
  • 标记化列表中的第一个条目
  • 插入数据库
  • 对列表的其余部分重复2-3,直到列表为空
  • 当列表为空时返回
    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,