Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件

Posted

技术标签:

【中文标题】Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件【英文标题】:Erlang - search for a specific string within an external file and append file if not present 【发布时间】:2020-05-15 18:10:12 【问题描述】:

我想通过使用 erlang 逐行读取文件来检查外部文件中是否存在特定字符串。如果特定字符串不存在,我希望将文件附加到字符串中。 到目前为止,我已经设法打开文件并逐行读取文件内容。但我不知道如何进行其余的。 我是 erlang 新手,因此我们将非常感谢您对这个问题的任何帮助。

到目前为止我所做的尝试:

-module(helloworld). 
-export([readlines/1,get_all_lines/1,start/0]). 

readlines(FileName) ->
    ok, Device = file:open(FileName, [read]),
    try get_all_lines(Device)
      after file:close(Device)
    end.

get_all_lines(Device) ->
    case io:get_line(Device, "") of
        eof  -> [];
        Line -> Line ++ get_all_lines(Device)
    end.



start() ->
    

readlines("D:\\documents\\file.txt"),
Txt=file:read_file("D:\\documents\\file.txt"),
io:fwrite("~p~n", [Txt]).



我得到的结果:

你好世界:开始()。 好吧,> 好的

我正在使用的示例文件: 文件名:“file.txt”

文件内容: 你好 嗨

【问题讨论】:

【参考方案1】:

如果您需要尝试在文件中查找特定文本,您可以尝试使用re:run/2 函数。 以下是如何尝试在文件中查找 specific string 的示例,如果找不到此字符串 - 该字符串将记录在 log.txt 文件中:

-module(helloworld).
-export([start/0]).

-define(LOG_FILE, "log.txt").

start() ->
  read_data("file.txt").

read_data(FileName) ->
  case file:read_file(FileName) of
    error, enoent ->
      io:format("File ~p not found~n", [FileName]);
    ok, Data ->
      find_text(Data)
  end.

find_text(Data) ->
  Text = <<"specific string">>,
  case re:run(Data, Text) of
    nomatch ->
      write_log(Text);
    _ ->
      ok
  end.

write_log(Text) ->
  case file:read_file(?LOG_FILE) of
    ok, Data when Data =/= <<>> ->
      file:write_file(?LOG_FILE, <<Data/binary, "\n", Text/binary>>);
    _ ->
      file:write_file(?LOG_FILE, Text)
  end.

【讨论】:

非常感谢您的帮助!!代码 sn-p 真的很有用。 我们可以设法在函数中定义宏吗?类似于下面给出的代码? 模块(helloworld)。 -export([createVariables/2,start/0])。 createVariables(ProjectName,UserName)-> -define(PROJECT_NAME,ProjectName), -define(USER_NAME,UserName)。 start() -> createVariables("dev_test_007", "abcd"), ``` 你可以在模块的任何地方定义宏,但是好的代码风格是在头文件或模块头中创建宏。

以上是关于Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件的主要内容,如果未能解决你的问题,请参考以下文章

在具有索引Python数的Excel工作表中搜索特定字符串

在字符串数组中搜索特定字符串。 [关闭]

C++ 在文本文件中搜索特定字符串并返回该字符串所在的行号

如何在当前文件夹和所有子文件夹中的所有文件中搜索特定文件内容[重复]

是否可以在整个设备中搜索特定扩展名的文件?

在单元格中搜索特定字符串并在excel vba中返回的函数