このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/568
#  質問です。 
#  テキストの中の<location></location>で囲まれた行のみ処理対象にして、 
#  1.<location></location>を残す。 
#  2../(ピリオドとスラッシュ)を追加。 
#  3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。 
#  という正規表現を教えてください。 
#   
#  例 
#  <location>file:///(ドライブ名):/(フォルダ名)/(フォルダ名)/(フォルダ名)/(フォルダ名)/(ファイル名)</location> 
#  という行がテキストファイル内に存在したら 
#  <location>./(ファイル名)</location> 
#  という内容に変更したい。フォルダ名とファイル名に規則性無し。 
#  特に、8個目の/(スラッシュ)以降の文字列を残す方法が全くワカリマヘン。 
#   
#  現状レベル 
#  昨日から丸1日正規表現に取り組んで、近づいてる様な近づいてない様な抽出実験してるレベルです。 
#   
#  因みに今回のテキストファイルは、VLCのプレイリストのxspfファイルです。 
#  ファイルを移動した時、プレイリストが絶対アドレスで定義されてるので、リンクが切れてしまいます。 
#  今回の変更で、相対アドレスになりある程度のファイル移動が可能になる。まあ仕事じゃない趣味のレベルです。 
#   
#  宜しくお願いします。 
# 

'テキストの中ので囲まれた行のみ処理対象にして、1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_テキストファイル) :-
forall('テキストの中ので囲まれた行のみ処理対象にして、'(_テキストファイル,_行),
1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_行)).


テキストの中の(_テキストファイル,_行) :-
get_lines(_テキストファイル,Lines),
member(_行,Lines).


'で囲まれた行のみ処理対象として、'(_行,_要素ならび,_囲まれた部分) :-
'SPLIT'(_行,['','/',''],L),
append([''],_囲まれた部分,[''],L),!.
'で囲まれた行のみ処理対象として、'(_行,_,_) :-
'処理対象外の行はそのまま出力'(_行).

'SPLIT'(_行,['','/',''],L),
append([''],_囲まれた部分,[''],L).


'1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_囲まれた部分) :-
append(_,['/',_ファイル名],_囲まれた部分),
atomic_list_concat(['','./',_ファイル名,''],Atom),
writef('%t\n',[Atom]),!.

'処理対象外の行はそのまま出力'(_行) :-
writef('%t\n',[_行]),
fail.

append([],L2,L3,L4) :-
append(L2,L3,L4).
append([U|L1],L2,L3,[U|L4]) :-
append(L1,L2,L3,L4).