pliki wejścia i wyjścia

0

Mam oto taki kod:

var
plikzrod1,plikzrod2,plikwyn: textfile;
lancuchzrod1,lancuchzrod2 :string;
begin
ShowMessage('Wybierz 2 różne pliki wejscia i jeden plik wyjscia');
if opendialog1.Execute
        and opendialog2.Execute
        and Savedialog1.Execute
        and (MessageDlg('zapisz wynik w'+savedialog1.FileName,mtwarning,
        [mbyes,mbno],0)=mryes) then
        begin
        AssignFile(plikzrod1,opendialog1.Filename);
        assignFile(plikzrod2,opendialog2.Filename);
        Assignfile(plikwyn,savedialog1.Filename);
        RESET(plikzrod1);
        reset(plikzrod2);
        rewrite(plikwyn);
        readln(plikzrod1,lancuchzrod1);
        readln(plikzrod2,lancuchzrod2);
        while
        not Eof(Plikzrod1) or not Eof(Plikzrod2) do
        begin
        if (LancuchZrod1 < lancuchzrod2) then
        begin
        Writeln(Plikwyn,lancuchzrod1);
        if not eof(Plikzrod1) then
        Readln(plikzrod1,lancuchzrod1)
        else lancuchzrod1:='zzzzzz';
        end
        else
        begin
        Writeln(plikwyn,lancuchZrod2);
        if not eof(plikzrod2) then
        Readln(plikzrod2,lancuchzrod2)
        else lancuchzrod2:='zzzzzzz';
        end;
        end  ;
        if Eof(plikzrod1) then
        writeln(plikwyn,lancuchzrod2);
        if eof(plikzrod2) then
        Writeln(plikwyn,lancuchzrod1);
        closefile(plikzrod1);
        closefile(plikzrod2);
        closefile(plikwyn);
        memo1.Lines.LoadFromFile(Savedialog1.FileName);
        end
        else
        ShowMessage('Problem z plikiem');
end;

Program ten pobiera nazwy z dwóch plików, a w trzecim segreguje je alfabetycznie.
Niby wszystko jest w porządku, bo program uruchamia się normalnie, ale, jak wczytuję pliki to zawiesza się cały system. Sprawdzałem na Win98 i WinXp.

0

Zapewne gdyby to było lepiej sformatowane, to bym się zagłębił, ale skoro nie jest, to tylko ogólnie:

  1. Zamiast dawać warunku poprzez 'and' to daj kilka ifów. Nie zawsze wykonywane jest w kolejności.
  2. Ta pętelka z while mi się nie podoba. Zobacz, czy dobrze tam warunki w niej umieściłeś. Niestety nie bardzo mogę rozszyfrować co tam "namodziłeś". Możesz uruchomić to krok po kroku i sprawdzić, czy nie wchodzi w pętlę nieskończoną.
0

Trudno wyczytac cos z tego kodu. Sformatowalbys go!

if (LancuchZrod1 < lancuchzrod2) then

Czy nie powinno byc

if (Length(LancuchZrod1) < Length(lancuchzrod2)) then

1 użytkowników online, w tym zalogowanych: 0, gości: 1