6.Erlang 處理文本

一,常用函數

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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;euri=933df83c375f4401a23623ce0db520a9",
 "/s?wd=Scratch&usm=2&ie=utf-8&rsv_cq=&rsv_dl=0_right_recommends_merge_21102&amp;euri=933df83c375f4401a23623ce0db520a9"]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章