このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/222
#  154代目の472の者です 
#  【質問テンプレ】 
#  [1] 授業単元:プログラム 
#  [2] 問題文(含コード&リンク): 
#  テキストファイルの内容をbuffの二次元配列に格納した後 
#  1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと 
#  1次元配列Yに書き込んでいくプログラムを作れ。 
#  要するに 
#  textfileには 
#  XX abcd; 
#  YY efd; 
#  ZZ bcd; 
#  というようになっています。 
#  二次元配列Xに 
#  0 XX 
#  1 YY 
#  2 ZZ 
#  というように3文字目のブランクの前の文字列を1行ずつ格納し 
#  Yには 
#  0 a 
#  1 b 
#  2 c 
#  というように3文字目のブランクの次の文字を格納したいのです。ただし、;はいれてはいけません。 
#  お願いします。 
#  

'テキストファイルの内容をbuffの二次元配列に格納した後、1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと1次元配列Yに書き込んでいく。ただし、Xの要素は3文字目のブランクの前の文字列、Yの要素は3文字目のブランクの次の文字'(_テキストファイル,_X,_Y) :-
        'テキストファイルの内容をbuffの二次元配列に格納した後'(_テキストファイル,_buff),
        '1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと1次元配列Yに書き込んでいく。ただし、Xの要素は3文字目のブランクの前の文字列、Yの要素は3文字目のブランクの次の文字'(_buff,_X,_Y).

'テキストファイルの内容をbuffの二次元配列に格納した後'(_テキストファイル,_buff) :-
        open(_テキストファイル,read,Instream),
        get_Lines(Instream,_buff),
        close(Instream).

get_Lines(Instream,[]) :-
        at_end_of_stream(Instream),!.
get_Lines(Instream,[L|R]) :-
        get_char(Instream,Char),
        get_line(Instream,Char,L),
        get_Lines(Instream,R).

get_line(Instream,Char,[Char]) :-
        at_end_of_stream(Instream),!.
get_line(Instream,'\n',[]) :- !.
get_line(Instream,Char,[Char|R]) :-
        get_char(Instream,Char2),
        get_line(Instream,Char2,R).

'1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと1次元配列Yに書き込んでいく。ただし、Xの要素は3文字目のブランクの前の文字列、Yの要素は3文字目のブランクの次の文字'([],[],[]) :- !.
'1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと1次元配列Yに書き込んでいく。ただし、Xの要素は3文字目のブランクの前の文字列、Yの要素は3文字目のブランクの次の文字'([_A|R1],_X,_Y) :-
        'Xの要素は3文字目のブランクの前の文字列'(_A,_X,R2),
        'Yの要素は3文字目のブランクの次の文字'(_A,_Y,R3),
        '1次元配列のAにbuffの内容を1行ずつ格納していきながら、2次元配列Xと1次元配列Yに書き込んでいく。ただし、Xの要素は3文字目のブランクの前の文字列、Yの要素は3文字目のブランクの次の文字'(R1,R2,R3).

'Xの要素は3文字目のブランクの前の文字列'(_A,_X,R) :-
        length([_|L0],3),
        append(L0,[' '|_],_A),
        _X = [L0|R].

'Yの要素は3文字目のブランクの次の文字'(_A,_Y,R) :-
        length([_|L0],3),
        append(L0,[' '|[_文字|_]],_A),
        _Y = [_文字|R].