Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件
Erlang - search for a specific string within an external file and append file if not present
我想通过使用 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]).
我得到的结果是:
helloworld:开始()。
{好的,<<"hello\r\nhi">>}
好的
我正在使用的示例文件:
文件名:“file.txt”
文件内容:
你好
嗨
如果您需要尝试在文件中查找特定文本,您可以尝试使用 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.
我想通过使用 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]).
我得到的结果是:
helloworld:开始()。 {好的,<<"hello\r\nhi">>} 好的
我正在使用的示例文件: 文件名:“file.txt”
文件内容: 你好 嗨
如果您需要尝试在文件中查找特定文本,您可以尝试使用 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.