#5 sparky29
Popis z nápovědy včetně příkladu (viz níže) nepomohl? Tak na konci příspěvku máš jiný příklad i s komentáři, kdybys pořád ještě neěčemu nerozumněl, ptej se...
BlockRead (procedura)
Načte jednu nebo více vět ze souboru do proměnné.
Deklarace
procedure BlockRead(var F: File; var Buf; Count: Word [; var Result:
Word]);
kde:
F je proměnná - soubor bez typu
Buf je libovolná proměnná
Count je výraz typu Word
Result je proměnná typu Word
Režim
Windows, Reálný, Chráněný
Poznámky
F je proměnná - soubor bez typu, Buf je libovolná proměnná, Count je výraz typu Word a Result
je proměnná typu Word .
BlockRead načte Count nebo méně vět ze souboru F do paměti, počínaje na prvním bajtu, který
zabírá Buf. Skutečný počet úplných přečtených vět (který je menší nebo roven Count), se vrací
v nepovinném parametru Result. Pokud Result není určen, při nepřečtení zadaného počtu vět
dojde k chybě I/O .
Celý přenesený blok zabírá maximálně Count symbolů * RecSize bajtů, přičemž RecSize je
délka věty, stanovená při otevírání souboru. Není-li stanovena, je rovna 128 bajtů. Pokud Count
symbolů * RecSize je větší než 65.535 bajtů (64K), generuje se chyba.
Result je nepovinný parametr. Pokud byl přenesen celý blok, je Result při návratu roven Count
. Jinak, jestliže Result je menší než Count, před dokončením přenosu bylo dosaženo konce
souboru. V tom případě, pokud je délka věty větší než jedna, Result vrací počet načtených
úplných vět.
Aktuální pozice v souboru se posune v důsledku volání BlockRead o Result vět.
V režimu {$I-} vrací funkce IOResult hodnotu 0 pro úspěšnou operaci, jinak nenulový chybový
kód.
Omezení
Soubor musí být otevřený.
{Blockrd.PAS}
{Vzorový příklad pro procedury BlockRead a BlockWrite.}
program CopyFile;
{ Prostý kopírovací program bez kontroly chyb }
{ Pro Windows: }
{ uses WinCrt; }
var
FromF, ToF: file;
NumRead, NumWritten: Word;
Buf: array[1..2048] of Char;
begin
Assign(FromF, ParamStr(1)); { Otevři vstupní soubor }
Reset(FromF, 1); { Velikost záznamu = 1 }
Assign(ToF, ParamStr(2)); { Otevři výstupní soubor }
Rewrite(ToF, 1); { Velikost záznamu = 1 }
Writeln('Kopíruje se ', FileSize(FromF), ' bajtů...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
Close(FromF);
Close(ToF);
end.
Jiný příklad:
program ReadFile;
var
f: file;
NumRead, i : Word;
const
SizeBuf=1024;
var
Buf: array[1..SizeBuf] of integer;
begin
Assign(f,'cisla.dta'); {Jméno vstupního souboru}
Reset(f, sizeof(integer)); {Velikost záznamu = velikost typu Integer v bajtech}
repeat {Načtení dat ze souboru, jestli je v něm
více položek než SizeBuf, budeme opakovat}
BlockRead(f, Buf, SizeBuf, NumRead);
{Požadujeme SizeBuf položek,
skutečný počet položek bude v NumRead}
for i:=1 to NumRead do {Výpis všech právě načtených čísel}
writeln(Buf[i]:10);
until (NumRead <SizeBuf); {Načetlo se méně než se požadovalo = konec čtení}
Close(f);
end.