Strona g│≤wna

 

Obs│uga plik≤w w Delphi

Delphi umo┐liwia w │atwy spos≤b obs│ugΩ plik≤w. Jest to spos≤b podobny do tego z Turbo Pascala. 

Na pocz▒tku nale┐y zadeklarowaµ zmienn▒ typu "TextFile". Na samym pocz▒tku przedstawiΩ spos≤b zapisu ( utworzenia ) pliku tekstowego:

var
  TF : TextFile;
begin
   AssignFile(TF, 'C:\Plik.txt'); { przypisanie pliku do zmiennej }
   Rewrite(TF); // utworzenie pliku
   try
     Writeln(TF, 'Pierwsza linie pliku'); // wpisanie linii
   finally
     CloseFile(TF);
   end;
end;

W│a╢ciwie wiΩkszo╢µ opisana zosta│a w komentarzu. Przypisanie pliku do zmiennej typu "TextFile" odbywa siΩ za pomoc▒ funkcji "AssignFile". 

Utworzenie pliku odbywa siΩ za pomoc▒ funkcji "Rewrite". NastΩpnie obs│uga wyj▒tk≤w ( o wyj▒tkach przeczytaj w artykule "Wyj▒tki" ). W nich linia "Writeln", kt≤ra znana jest pewnie tym, kt≤rzy mieli styczno╢µ z Turbo Pascalem. W pierwszym parametrze zmienna, a w drugim sama tre╢µ linii. Na ko±cu nastΩpuje zamkniΩcie pliku ( "CloseFile" ). 

Teraz co╢ trudniejszego - otwarcie pliku, przesuniΩcie go na koniec i dopisanie kilku nowych linii na jego ko±cu. Oto kod:

var
  TF : TextFile;
  S : String;
  I : Integer;
begin
  AssignFile(TF, 'C:\Moje dokumenty\plik.txt');
  Append(TF); // przesuniecie na koniec pliku
  try
    for i:=0 to 3 do  // pΩtla
    begin
      S := 'Linia nr: '; // zmienna "S"
      Writeln(TF, S, I); // dopisanie linii
    end;
  finally
    CloseFile(TF); // zamkniecie pliku
  end;
end;

Jak ju┐ to zosta│o opisane w komentarzu przesuniΩcie na koniec pliku odbywa siΩ za pomoc▒ polecenia "Append". Zauwa┐, ┐e w poleceniu "Writeln" zosta│y ze sob▒ po│▒czone trzy zmienne. 

Odczyt

Odczyt z pliku tekstowego tak┐e nie powinien sprawiµ problemu. 

var
  TF : TextFile;
  S : String;
begin
  AssignFile(TF, 'C:\Moje dokumenty\plik.txt');
  Reset(TF); // otwarcie pliku
  try
    while not Eof(TF) do
    begin
      Readln(TF, S); // odczytanie pliku
      Memo1.Lines.Add(S); // dodanie zmiennej do komponentu
    end;
  finally
    CloseFile(TF); // zamkniecie pliku
  end;
end;

Pojawi│o siΩ tutaj nowe polecenie - Reset. Realizuje ono otwarcie pliku. 
NastΩpnie pΩtla "while" i polecenie "Eof", kt≤re wymaga parΩ s│≤w obja╢nienia. Polecenie to informuje, ┐e nast▒pi│o zako±czenie pliku tekstowego ( tj. nie ma wiΩcej linijek do odczytania ). Polecenie "Readln" odwrotnie do "Writeln" - odczytuje linie pliku tekstowego i linie te dodaje do zmiennej "S", kt≤ra nastΩpnie zostaje dodana do komponentu Memo. 

Odczyt z dw≤ch kolumn

Mamy zadanie: Jest sobie plik tekstowy z dwoma kolumnami mniej wiΩcej tak on wygl▒da:

Polska                   Warszawa
Francja                  Pary┐
USA                      Waszyngton
Holandia                Amsterdam 

Chcemy teraz, aby w dw≤ch osobnych komponentach "ComboBox" znalaz│ siΩ tekst z dw≤ch osobnych kolumn. Jak to zrobiµ? Rozwi▒zanie przedstawiam tutaj:

var
  F: TextFile;
  Kraj: String[20]; //zmienne o d│ugo╢ci 20 znak≤w
  Stolica: String[20];
begin
  AssignFile(F, 'PLIK.TXT'); // plik z danymi
  Reset(F);   // otwarcie
  try
    while not Eof(F) do
    begin
       Readln(F, Kraj, Stolica); // odczytaj dwie zmienne
       ComboBox1.Items.Add(Kraj);// dodaj do komponentu
       ComboBox2.Items.Add(Stolica);
    end;
  finally
    CloseFile(F);
  end;
end;

Najpierw zadeklarowa│em zmienne o max. d│ugo╢ci 20 znak≤w. Taka jest odleg│o╢µ pomiΩdzy dwoma kolumnami. Potem wczyta│em dwie zmienne pod postaci▒ jednego polecenia "Readln". 

Inne polecenie

Innym przydatnym poleceniem jest "Seek", kt≤ra ustawia pozycjΩ, kt≤rej dotyczy│a bΩdzie najbli┐sza operacja. NP:

Seek(plik, pozycje);

UWAGA!  Plik nie mo┐e byµ zmienn▒ "TextFile", a "File". Wrazie problem≤w zagl▒dnijcie do helpa, albo napiszcie. 

Istnieje jeszcze funkcja "FilePos", kt≤ra okre╢la aktualn▒ pozycje w pliku tekstowym. 

ShowMessage(IntToStr(FilePos(F)));

W tym wypadku F musi byµ zmienn▒ typu "File". 

Adam Boduch