一,常用函数
1.lists:nth/2 获取列表第N个数值
lists:nth(3, [1, 2, 3, 4, 5]).
nth(1, [H|_]) -> H;
nth(N, [_|T]) when N > 1 ->
nth(N - 1, T).
2.string:tokens/2 按照指定分隔符分割字符串
string:tokens("a-b-c-d-e", "-").
3.string:len/1 获取字符串长度
string:len("abcdefg")
en(S) -> length(S).
4.string:concat/2 合并字符串
concat(S1, S2) -> S1 ++ S2.
5.io:format/3 格式化输出到文件
{ok, IoDevice} = file:open("test.txt", write),
io:format(IoDevice, "~s~n", ["Just a test!"]).
6.io:get_line/2 一行一行读取文件
{ok, File} = file:open("test.txt", read),
io:get_line(File, "Read a line").
7.操作文件
%%打开文件
open(Filename, Modes) -> {ok, IoDevice} | {error, Reason}
{ok, File} = file:open("/app/rebar.config", [read, write]).
%%写入文件
write_file(Filename, Bytes) -> ok | {error, Reason}
Data = "{person, 'kalle', 25}.",
file:write_file("/app/test.txt", Data).
%%读取文件
{ok, File} = file:open("test.txt", read),
io:get_line(File, "Read a line").
read_file(Filename) -> {ok, Binary} | {error, Reason}
file:read_file("/app/rebar.config").
二,文本操作实例
将以下文本中的URL提取出来
<a target="_blank" href="/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9">
<a class="opr-recommends-merge-mask" target="_blank" href="/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9"></a>
<a data-is-main-url="true" title2="标题" target="_blank" href="http://bzclk.l=tpl_10341_158679">推广您的产品吗?</a></h2>
程序
-module(change_file).
-compile(export_all).
process()->
case file:open("./txt1.txt",read) of
{ok,Content}->
io:format("open file success!~n"),
readFile(Content);
{error,Reason}->
Reason
end.
readFile(Content)->
readFile(Content,[]).
readFile(Content,Result)->
Line=io:get_line(Content,""),
case Line of
eof->
io:format("read file eof!~n"),
file:close(Content),
Result;
Data->
Tokens=string:tokens(Data," \" "),
io:format("~p~n",[Tokens]),
Number=forlist(Tokens),
io:format("url number is ~w~n",[Number]),
Url=lists:nth(Number,Tokens),
io:format("url is ~s~n",[Url]),
io:format("----------~n"),
readFile(Content,[Url|Result]);
{errro,_Reason}->
io:format("read line error!~n")
end.
equal(S,S)->true;
equal(_,_)->false.
forlist(Tokens)->forlist(Tokens,1).
forlist([],_N)->false;
forlist([H|T],N)->
case equal(H,"href=") of
true->
N+1;
false->
forlist(T,N+1)
end.
输出结果
open file success!
["<a","target=","_blank","href=",
"/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9",
">\n"]
url number is 5
url is /s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9
----------
["<a","class=","opr-recommends-merge-mask","target=","_blank","href=",
"/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9",
"></a>\n"]
url number is 7
url is /s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9
----------
["<a","data-is-main-url=","true","title2=",
[230,160,135,233,162,152],
"target=","_blank","href=","http://bzclk.l=tpl_10341_158679",
[62,230,142,168,229,185,191,230,130,168,231,154,132,228,186,167,229,147,129,
229,144,151,63,60,47,97,62,60,47,104,50,62]]
url number is 9
url is http://bzclk.l=tpl_10341_158679
----------
read file eof!
["http://bzclk.l=tpl_10341_158679",
"/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9",
"/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&euri=933df83c375f4401a23623ce0db520a9"]