2017-12-20 8 views
-1

私は2つのテキストファイル、長さ、内容が異なります。しかし、各ファイルの各行は、すべての行で大きくなります。 私は、これらの行を両方のファイルから、同じソート方法(最短行...で始まる)に置く3番目のテキストファイルを作成する必要があります。 最初のファイルと2番目のファイルの両方の行が同じサイズの場合は、両方を出力する必要があります。パスカル、2つのテキストファイルをマージし、行の長さで並べ替えます

は、これまでのところ私はこれを持っている:

assign(file1, 'file1.txt'); 
assign(file2, 'file2.txt'); 
assign(file3, 'file3.txt'); 
reset(file1); 
reset(file2); 
rewrite(file3); 

readln(file1,s1); 
readln(file2,s2); 

while MISSING CONDITION do 
    begin 
    if length(s1) > length(s2) then 
    begin 
     writeln(file3, s1); 
     readln(file1, s1); 
    end 
    else if length(s1) < length(s2) then 
    begin 
     writeln(file3, s2); 
     readln(file2, s2); 
    end 
    else 
    begin 
     writeln(file3, s1); 
     writeln(file3, s2); 
     readln(file1, s1); 
     readln(file2, s2); 
    end; 
    end; 

close(file1); 
close(file2); 
close(file3); 

私は私を修正してくださいいない場合は、私のソートアルゴリズムは、罰金だと思います。しかし、私はこれをするのにどれくらいの時間がかかるかという条件について助けが必要です。これら2つのファイルが同じ長さでない場合、私はあなたがファイルの終わりに達したときに、ファイルからの読み込みを停止する必要が

+1

まあ、一方では、ineファイルには、他のものより多くの行がある可能性を考慮する必要があります。それに伴い、到達している各ファイルの終わりをチェックし、whileループがいったん正しく動作するように調整する必要があります。 – MartynA

+0

どのパスカルを使用しているかはわかりません。 FreePascalまたはDelphiの場合は、TStringListsの使用を検討して、少し簡単にしてください。しかし、ファイルが大きすぎてメモリに収まらない場合にのみ実行してください。それ以外の場合は、各ファイルごとにEof()を個別にチェックし、可能性ごとに条件を設定する必要があります。 –

答えて

0

..

ありがとう...何をするか分かりません。これはEof()機能で検出できます。入力ファイルごとにこの条件を別々にテストする必要があります。

アルゴリズムを確認してください。出力ファイルを短い行から長い行に移動する必要がある場合、どの行を最初にファイルに書き込む必要がありますか?長いか短いか? ;)また、1つのファイルが他のファイルの現在の行よりも長い行の前にいくつかの短い行を持つことも考えてください。メインループ内に追加のループを作成する必要があるかもしれません。

アルゴリズムをテストするためにいくつかのテストファイルを作成することをお勧めします。

関連する問題