このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/694
#  [1] 授業単元: プログラミング自由課題 
#  [2] 問題文(含コード&リンク): ファイルの出力のソート化 
#  
#  ファイルの入出力で、ファイルオープンした後に昇順のソートがしたいのですがよくわかりません。
#  スケジュール管理表のような感じのプログラムを作りたいので、配列を日程と内容の2つに分けました。
#  「日程」はint型の配列を使用し、1月20日ならば0120のように入力します。「内容」の配列はchar型を使用しました。
#  txtは「0120(日程) 2ch書き込み(内容)」のようにし、ここからファイルをオープン後txtに入力してある
#  データを日程の昇順でソートし、出力したいのですがよくわかりません・・・。
#  ファイルをオープンした後に日程の配列を読み込み、それをソート後、日程と内容の配列を関連づければいいのでしょうか?
#  

'ファイルオープンした後に昇順のソートがしたい'(_txtファイル,_整列されたtxtファイル) :-
        open(_txtファイル,read,Instream),
        日程部分と内容を別に切り出す(Instream,1,_日程ならび,_内容ならび),
        close(Instream),
        日程ならびを整列する(_日程ならび,_整列された日程ならび),
        open(_整列されたtxtファイル,write,Output),
        整列された日程の順序番号を鍵として内容を結合しながら昇順に書き出す(Outstream,_整列された日程部分ならび,_内容ならび),
        close(Output).

日程部分と内容を別に切り出す。日程には順序番号を付加する(Instram,_,[],[]) :-
        at_end_of_stream(Instream),!.
日程部分と内容を別に切り出す。日程には順序番号を付加する(Instream,N2,[[_日程,N]|R1],[_内容|R2]) :-
        get_line(Instream,Line),
        sub_atom(Line,0,4,RLen,_日程),
        sub_atom(Line,4,RLen,_,_内容),
        N2 is N + 1,        
        日程部分と内容を別に切り出す。日程には順序番号を付加する(Instream,N2,R1,R2).

日程を昇順に整列する([_分割点要素|_整列対象ならび],_整列されたならび) :-
        整列の為の分割(_整列対象ならび,_分割点要素,_等しいかより少ない要素ならぴ,_より大きい要素ならび),
        日程を昇順に整列する(_等しいかより少ない要素ならぴ,_整列されたならびの一),
        日程を昇順に整列する(_より大きい要素ならび,_整列されたならびの二),
        append(_整列されたならぴの一,[_分割点要素|_整列されたならびの二],_整列されたならび).
日程を昇順に整列する([],[]).

整列の為の分割([],_,[],[]) :- !.
整列の為の分割([_要素|R],_分割点要素,[_要素|R1],R2) :-
        _要素 @=< _分割点要素,
        整列の為の分割(R,_分割点要素,R1,R2),!.
整列の為の分割([_要素|R],_分割点要素,R1,[_要素|R2]) :-
        _要素 @> _分割点要素,
        整列の為の分割(R,_分割点要素,R1,R2),!.

整列された日程の順序番号を鍵として内容を結合しながら昇順に書き出す(Outstream,[],_内容ならび) :- !.
整列された日程の順序番号を鍵として内容を結合しながら昇順に書き出す(Outstream,[[_日程,N]|R],_内容ならび) :-
        list_nth(N,_内容ならび,_内容),
        concat_atom([_日程,_内容],Line),
        write_formatted(Outstream,'%t\n',[Line]),
        整列された日程の順序番号を鍵として内容を結合しながら昇順に書き出す(Outstream,R,_内容ならび).