Gdzie jest błąd?

0
procedure TMainForm.wczytaj;
var
  plik : TextFile;
  znak : string;
  pozycja : string;
begin
  try
    try
    AssignFile(plik, ExtractFilePath(Application.ExeName) + 'slownik.txt');
    Reset(plik);
      repeat
      read(plik, znak);
      pozycja := pozycja + znak;
      if eoln(plik) then
        begin
        lista.Items.Add(pozycja);
        pozycja := '';
        end;
      until eof(plik);
      Application.MessageBox('Zaladowano baze', 'Koniec', MB_OK);
    except
    Application.MessageBox('Blad', 'Koniec', MB_OK);
    end;
  finally
  CloseFile(plik);
  plik.Free;
  end;
end;

Objawem jest wielkie (ponad 90%) zużycie procesora. Objaw pojawia się tylko gdy w pliku jest więcej niż jedna linijka tekstu.

0

Wsadź kod w znaczniki < delphi > </ delphi>

A co to pytania: Zamień tą zabawę z read na readln i nie będziesz musiał sprawdzać czy jest koniec linii.

0

nic dziwnego, jak czytasz plik bajt po bajcie... tak jak Eristoff poradził - linijka po linijce.

0

Wyjątkowo mało efektywna metoda odczytu.. poza tym:

read(plik, znak); <-- po co zmienna typu String?

0

Hm... A nie prościej do do StringsList wsadzić i będzie po strawie ?

0

Najprościej to chyba ..LoadFromFile('...'); i dziesiątki linii kodu nam się ładnie skracają do jednej :)

0

Czy mi się wydaje, czy Ty chcesz czytać znak po znaku? Jeśli tak, to zmienna ZNAK powinna być typu CHAR. Poza tym, jeśli chcesz ten plik załadować do stringList albo podobnego ustrojstwa, to to ma taką fajną metodę, jak już ktoś wspomniał: "LoadFromFile"

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