2017-12-20 5 views
-1

그래서 두 개의 텍스트 파일, 길이, 내용이 있습니다. 그러나 각 파일의 각 줄은 모든 줄마다 커지고 길어집니다. 두 파일의이 줄을 동일한 정렬 방법 (가장 짧은 줄로 시작하는 ...)으로 배치 할 세 번째 텍스트 파일을 만들어야합니다. 첫 번째 파일과 두 번째 파일의 두 줄이 같은 크기 인 경우 둘 다 인쇄해야합니다.파스칼, 두 개의 텍스트 파일을 병합하고 줄 단위로 정렬합니다.

지금까지 나는이 있습니다

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); 

내가 저를 수정하시기 바랍니다하지 않을 경우 내 정렬 알고리즘은, 좋은 생각합니다. 하지만이 일을 얼마나 오래해야하는지에 대한 조건이 도움이 필요합니다. 나는

+1

글쎄, 한 가지 경우, ine 파일에 다른 파일보다 더 많은 줄이 포함될 가능성을 허용해야합니다. 이와 함께 도달하는 각 파일의 끝을 확인하고'while' 루프가 한 번 올바르게 작동하도록 조정해야합니다. – MartynA

+0

어떤 파스칼을 사용하고 있는지 알려주지 않습니다. FreePascal 또는 Delphi 인 경우 TStringLists를 사용하여 좀 더 쉽게 작업 할 수 있습니다. 그러나 파일이 너무 커서 메모리에 들어 가지 않는 경우에만 수행하십시오. 그렇지 않으면 각 파일에 대해 Eof()를 개별적으로 점검하고 각각의 가능성에 대해 별도의 조건을 설정해야합니다. –

답변

0

당신은 당신이 파일의 끝에 도달 할 때 파일 읽기 중지해야합니다 ..

감사합니다 ..이 두 파일이 동일한 길이없는 경우 어떻게해야할지 모르겠어요. Eof() 기능으로이를 감지 할 수 있습니다. 각 입력 파일에 대해이 조건을 별도로 테스트해야합니다. 다른 조건보다 많은 행을 보유 할 수 있습니다.

알고리즘을 검토하십시오. 출력 파일을 짧은 줄에서 긴 줄로 이동해야한다면, 어떤 줄을 먼저 파일에 써야합니까? 길거나 짧습니까? ;) 한 파일이 다른 파일의 현재 줄보다 긴 줄보다 짧은 줄을 여러 개 가질 수도 있습니다. 메인 루프 내부에 추가 루프를 생성해야 할 수도 있습니다.

알고리즘을 테스트하기 위해 몇 가지 테스트 파일을 만드는 것이 좋습니다.

관련 문제