Naučte se programovat v Delphi (11. díl) - Práce se soubory - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Naučte se programovat v Delphi (11. díl) - Práce se soubory

6. prosince 2001, 00.00 | Často potřebujeme v programu uložit nějaká data pro pozdější použití, konfiguraci, informace o uživateli apod. Vždy je ukládáme do souborů. V Object Pascalu existuje více druhů souborů, do kterých tato data můžeme ukládat a dnes si je představíme.

Často potřebujeme v programu uložit nějaká data pro pozdější použití, konfiguraci, informace o uživateli apod.. Vždy je ukládáme do souborů. V Object Pascalu existuje více druhů souborů, do kterých tato data můžeme ukládat a v dnešním článku si je představíme.

Jak jsem již zmínil, v Object Pascalu existuje více druhů souborů. Přesněji čtyři, textové, typové, netypové a ini. Ini soubory zde probírat nebudu, protože to zde už udělal Václav Krejčí v článku Práce s ini soubory. Nejdříve vám vysvětlím postupy, které jsou stejné u všech typů souborů, které dnes proberu a potom si povíme o odlišnostech a konkrétních postupech.

Začínáme vždy tím, že si deklarujeme souborovou proměnnou. Potom v příkazovém bloku (mezi begin a end;) si spojíme procedurou AssignFile() souborovou proměnnou se jménem souboru i s příponou.

Následují procedury, které určují, co se bude s určeným souborem dělat. První procedura je Reset. Tímto příkazem se soubor otevře a bude se z něho moci číst a zapisovat. Druhý příkaz je Rewrite. Tímto příkazem vytvoříte nový soubor, nebo přepíšete stávající se shodným jménem. Existuje ještě příkaz Append, který přidává data na konec souboru. Je ale použitelný jen pro textové soubory. Nakonec nesmíme zapomenout ukončit práci se souborem procedurou CloseFile.

Textové soubory

Textový soubor je nejjednodušší typ souboru, ale bohužel do něj můžeme zapisovat pouze text. Souborová proměnná je typu TextFile a čte se ze souboru procedurou ReadLn (read line) a zapisuje procedurou WriteLn (write line). Asi bude nejlepší vše si předvést v praxi.

...
var f:TExtFile;
begin
  AssignFile(f, 'pokus.txt');  // spojí souborovou proměnnou se jménem souboru
 
try
    Rewrite(f); // vytvoří nový soubor
    WriteLn(f, 'nějaký text'); // zapíše do souboru řádku textu
  finally
    CloseFile(f); // ukončí práci se souborem
end;
... 

Jak jsem již zmiňoval, procedurou Append můžeme na konec textového souboru přidávat další řádky. Demonstraci použití vidíte v následující tabulce.

...
var f:TExtFile;
begin
  AssignFile(f, 'pokus.txt');
 
try
    Append(f);
    WriteLn(f, 'nějaký text2'); // přidá další řádku textu
  finally
    CloseFile(f);
end;
... 

Při práci se soubory se používá ještě funkce eof(). Je to booleovská funkce, která vrací true, pokud je souborový ukazatel na konci souboru.

...
while not eof(f) do
begin
  ReadLn(f, s);
end;
...

Datové soubory

Datové soubory se od textových liší tím, že do datových můžete ukládat data libovolných typů. Tzn. že můžete mít jak soubory znakové (char), číselné (integer), tak i vlastních typů (TMujTyp). Na rozdíl od textových souborů se souborová proměnná deklaruje slovy file of ....

var f1:File of Integer;
      f2:File of Char

Častější použití mají soubory vlastních typů. Například pro uložení hesla, uživatelského jména a věku uživatele by mohl sloužit tento záznam.

Type TLoginRec = record
           UserName:String[30];
           Pass:String[30];
           Age:Integer;
        end;

Asi jste si všimli, že stringové proměnné jsou omezené na 30 znaků. Je to kvůli tomu, že stringové typy, dokáží adresovat až 2GB dat a proto je nutné omezit jejich velikost. U celočíselných nebo booleovských typů se délka neomezuje. K zápisu do typového souboru se používá procedura Write a ke čtení procedura Read.

...
var f:File of TLoginRec;
      LoginRec:TLoginRec;
begin
  with LoginRec do
  begin
     Age:=StrToInt(AgeEdit.Text); // naplní záznam LoginRec potřebnými hodnotami
     UserName:=UserNameEdit.Text;
     Pass:=PassEdit.Text;
end;
  AssignFile(f, 'login.dat');
  try
    ReWrite(f);
    Write(f, LoginRec);   // zápis do souboru
  finally
    CloseFile(f);
  end;
end
;

Netypové soubory

U netypových souborů neznáme jejich typ a proto nemůžeme používat procedury Read a Write , ale BlockRead a BlockWrite. Souborová proměnná se deklaruje slovem File. Procedury BlockRead a BlockWrite přebírají za parametry souborovou proměnnou, netypizovanou proměnnou, která má být dost velká na to, aby uložila počet bajtů určených třetím parametrem typu integer. Nejčastěji se tento způsob zapisování a čtení souborů používá při jejich kopírování, tak si rovnou ukážeme příklad procedury, která zkopíruje jeden soubor do druhého.

procedure FileCopy(const ZSoub, CSoub: string);
var
  ZdrojovySoub, CilovySoub: file;
  Precteno, Zapsano: Integer;
  Buffer: array[1..2048] of Byte;
begin
  AssignFile(ZdrojovySoub, ZSoub);
  AssignFile(CilovySoub, CSoub);
  try
    Reset(ZdrojovySoub, 1);
    Rewrite(CilovySoub, 1);
  repeat
    BlockRead(ZdrojovySoub, Buffer, SizeOf(Buffer), Precteno);
    BlockWrite(CilovySoub, Buffer, Precteno, Zapsano);
  until (Precteno = 0) or (Zapsano <> Precteno);
finally
    CloseFile(ZdrojovySoub);
    CloseFile(CilovySoub);
end;
end;

Tak to by bylo pro dnešek o souborech vše a příště si něco řekneme o dynamicky linkovaných knihovnách.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: