このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 129代目 #660 # [1] C言語 # [2] 2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を #   標準出力に表示するプログラムを作成せよ。 #   ファイル名はコマンドライン入力により受け取ることとする。 # [3] 環境 #  [3.1] OS:Windows #  [3.2] コンパイラ:gcc 3.4 #  [3.3] 言語:C # [4] 期限:2009年7月31(金) # [5] その他の制限:ポインタ履修済みです '2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を標準出力に表示する。ファイル名はコマンドライン入力により受け取ることとする。' :- 'ファイル名はコマンドライン入力により受け取ることとする。'(_ファイル_1,_ファイル_2), '2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を標準出力に表示する'(_ファイル_1,_ファイル_2). 'ファイル名はコマンドライン入力により受け取ることとする。'(_ファイル_1,_ファイル_2) :- current_prolog_flag(argv,[_ファイル_1,_ファイル_2]). '2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を標準出力に表示する'(_ファイル_1,_ファイル_2) :- '2つのファイルの内容が異なっている最初の行の行番号と内容を'(_ファイル_1,_ファイル_2,_行番号,_1,_2), 標準出力に表示する(_行番号,_ファイル_1,_1,_ファイル_2,_2). '2つのファイルの内容が異なっている最初の行の行番号と内容を'(_ファイル_1,_ファイル_2,_行番号,_1,_2) :- '2つのファイルを読み取り、それぞれ行ならびに変換する'(_ファイル_1,_ファイル_2,_行ならび_1,_行ならび_2), 内容が異なっている最初の行の行番号と内容(_行ならび_1,_行ならび_2,_行番号,_1,_2). '2つのファイルを読み取り、それぞれ行ならびに変換する'(_ファイル_1,_ファイル_2,_行ならび_1,_行ならび_2) :- ファイルから行ならびを得る(_ファイル_1,_行ならび_1), ファイルから行ならびを得る(_ファイル_2,_行ならび_2). ファイルから行ならびを得る(_ファイル,_行ならび) :- ファイルから(_ファイル,_入力), 行ならびを得る(_入力,_行ならび). ファイルから(_ファイル,_入力) :- open(_ファイル,read,_入力). 行ならびを得る(_入力,[]) :- at_end_of_streamを検出したらファイルを閉じる(_入力),!. 行ならびを得る(_入力,L) :- 行入力を続ける(_入力,L). at_end_of_streamを検出したらファイルを閉じる(_入力) :- at_end_of_stream(_入力), ファイルを閉じる(_入力). 行入力を続ける(_入力,[_行|R]) :- 行入力(_入力,_行), 行ならびを得る(_入力,R). 行入力(_入力,_行) :- read_line_to_codes(_入力,_コードならび), atom_codes(_行,_コードならび). ファイルを閉じる(_入力) :- close(_入力). 内容が異なっている最初の行の行番号と内容(_行ならび_1,_行ならび_2,_行番号,_1,_2) :- 内容が異なっている最初の行の(_行ならび_1,_行ならび_2,L,_1,_2), 行番号(L,_行番号). 内容が異なっている最初の行の(_行ならび_1,_行ならび_2,L,_1,_2) :- append(L,[_1|_],_行ならび_1), append(L,[_2|_],_行ならび_2), 内容が異なっている(_1,_2). 内容が異なっている(_1,_2) :- \+(_1 = _2). 行番号(L,_行番号) :- length(L,Len), _行番号 is Len + 1. 標準出力に表示する(_行番号,_ファイル_1,_1,_ファイル_2,_2) :- writef('行番号=%w %w=%w %t=%w\n',[_行番号,_ファイル_1,_1,_ファイル_2,_2]).