このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1267796762/84
#  【 課題 】http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/966.txt 
# 
# 【sports.csv】
# 10,サッカー,中村俊輔
# 18,野球,松坂大輔
# 
# 背番号,種目,名前がカンマで区切られたCSVファイルを読み込み、ファイルに出力する。
# なお出力の際には背番号に種目ごとに決められた番号を加算する。
# 今は2行だが今後は行数を追加し、「1,テニス,松岡修造」などを追加することもある。
# 
# サッカー → 10
# 野球   → 50
# 
# 【出力例】
# 20,サッカー,中村俊輔
# 68,野球,松坂大輔

背番号,種目,名前がカンマで区切られたCSVファイルを読み込み、ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する(_CSVファイル,_出力ファイル) :-
        背番号,種目,名前がカンマで区切られたCSVファイルを読み込み、(_CSVファイル,L),
        ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する(_出力ファイル,L).

背番号,種目,名前がカンマで区切られたCSVファイルを読み込み、(_CSVファイル,L) :-
        get_split_lines(_CSVファイル,[','],L).

ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する(_出力ファイル,L) :-
        tell(_出力ファイル),
        ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する(L),
        told.

ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する([]) :- !.
ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する([[_背番号,_種目,_名前]|R]) :-
        背番号に種目ごとに決められた番号を加算する(_背番号,_種目,_加算された背番号),
        write_formatted('%t,%t,%t\n',[_加算された背番号,_種目,_名前]),
        ファイルに出力する。なお出力の際には背番号に種目ごとに決められた番号を加算する(R).

背番号に種目ごとに決められた番号を加算する(_背番号,_種目,_加算された背番号) :-
        背番号に加算する種目ごとに決められた番号(_種目,_加算値),
        _加算された背番号 is _背番号 + _加算値.

背番号に加算する種目ごとに決められた番号(サッカー,10).
背番号に加算する種目ごとに決められた番号(野球,50).

背番号に加算する種目ごとに決められた加算値を追加する(_種目,_加算値) :- retract(背番号に加算する種目ごとに決められた番号(_種目,_)),fail.
背番号に加算する種目ごとに決められた加算値を追加する(_種目,_加算値) :- assertz(背番号に加算する種目ごとに決められた番号(_種目,_加算値)).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

一般にCSVファイルの加工(_入力CSVファイル,_出力CSVファイル) :-
        get_split_lines(_入力CSVファイル,[','],L1),
        加工する(L1,L2),
        put_csv_lines(_出力CSVファイル,L2,',').

加工する(L1,L2) :- 具体的な加工の例(L1,L2).

具体的な加工の例([],[]).
具体的な加工の例([[_背番号,_種目,_名前]|R1],[[_加算された背番号,_種目,_名前]|R2]) :-
        種目ごとの背番号加算値(_種目,_加算値),
        _加算された背番号 is _背番号 + _加算値,
        具体的な加工の例(R1,R2).

種目ごとの背番号加算値(サッカー,10).
種目ごとの背番号加算値(野球,50).

put_csv_lines(_出力CSVファイル,L,_区切り文字) :-
        open(_出力CSVファイル,write,Output),
        put_csv_lines_2(Output,L,_区切り文字),
        close(Output).

put_csv_lines_2(_,[],_) :- !.
put_csv_lines_2(Output,[L|R],_区切り文字) :-
        concat_atom(L,_区切り文字,_表示文字列),
        write_formatted(Output,'%t\n',[_表示文字列]),
        put_csv_lines_2(Output,R,_区切り文字).