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 - 在外部文件中搜索特定字符串,如果不存在则追加文件的主要内容,如果未能解决你的问题,请参考以下文章