使用Erlang进行I / O,试图将输入文件放入列表

用户名
-module(test).
-export([run/1]).

open_file(FileName, Mode) ->
    {ok, Device} = file:open(FileName, [Mode, binary]),    Device.

close_file(Device) ->
    ok = file:close(Device).

read(File) ->
    case file:read_line(File) of
        {ok, Data} -> [Data | read(File)];
        eof        -> []
    end.
run(InputFileName) ->
    Device = open_file(InputFileName, read),
    Data = read(Device),
    [First |TheRest] = Data,
    io:format("First line is ~p ~n", [First]),
    close_file(Device).

原始文件

d1  and is  program program the
d2  a   apply   copyleft    free    free    freedom
d3  copyleft    copyleft    share   share   users
d4  released    software    works
d5  licenses    licenses    licenses    licenses    licenses    software
d8  apply

不知何故变成了

50> test:run("input.txt").
First line is <<"d1\tand\tis\tprogram\tprogram\tthe\n">> 
ok

这是表示列表的一种特殊方式吗?还是我需要使用某种模块将读取的内容转换为列表?

我的最终目标是用列表创建密钥对:

{d1 [and is program program the]}

谢谢!

史蒂夫·维诺斯基

从文件中读取的数据表示为二进制而不是字符串,因为binary在打开文件时要指定模式:

{ok, Device} = file:open(FileName, [Mode, binary]), Device.

如果将其更改为:

{ok, Device} = file:open(FileName, [Mode]), Device.

您的结果将变为:

第一行是“ d1,并且是程序程序的\ n”

要获得最终结果,请将read/1函数更改为此:

read(File) ->
    case file:read_line(File) of
        {ok, Data} ->
            [First|Rest] = string:tokens(Data, " \t\n"),
            [{First,string:join(Rest, "\t")} | read(File)];
        eof -> []
    end.

进行此更改后,您的程序将打印:

第一行是{“ d1”,“和\ tis \ tprogram \ tprogram \ tthe”}

其中第二个元素是一个字符串,其中的令牌与原始数据一样以制表符分隔。如果您希望第一个元素"d1"成为原子d1(我不能肯定从您的问题中确定这是否是您想要的),则可以使用进行转换list_to_atom/1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 jpalq 查询将 Java DTO 放入列表中

将多个输入放入列表

将数据从.data文件转换为.csv文件,然后使用熊猫将数据放入列中

如何使用python从文件中提取图像并将它们放入列表中

如何使用PythonNET和C#.NET将枚举放入列表中?

使用 Tkinter 创建复选框,然后将所选框的值放入列表中

使用groupby之后,如何将多行中的所有值放入列表中?

使用 IMAP 将所有电子邮件放入列表

将输入列表与存储库对象列表进行比较:循环执行需要更多时间

在将输入列表与作为对象属性的列表进行比较后返回 obj 结果的 Linq 查询

使用给定的输入列表对DataFrame列进行排序

Python:对输入列表进行验证

使用输入列表和部分文件路径查找和复制文件

将文件夹中的 xml 文件放入列表

使用closedXML和C#将一系列单元格值放入列表中

使用 Mediatr 在 Asp .Net Core 中输入列表文件时获取空值

使用 for 循环编写函数并输入列表

将模板驱动的表单与动态输入列表(ngFor)结合使用

使用BeautifulSoup创建循环并将结果放入列表中

将.txt文件的内容放入列表中

试图将日期列表放入date.year,date.month,date.day中以便进行比较?

试图将所有联系人放入列表视图中?

R 帮助将多个 xlsx 文件导入列表,然后使用文件名的一部分将日期拉入列

使用for循环将元素导入列表

如何先按值对映射条目进行排序,然后按键排序,然后将排序后的键放入列表中?

对输入列表进行迭代功能(Q / KDB)

在类中写出整个输入列表以进行模型预测

如何对用户输入列表元素进行排序?

将多个 R 文件导入列表并将每个元素存储为文件名以进行检索