Delphi szövegfájlkezelésnél hogyan lehet puffert használni? Ha valaki írna egy egyszerű de nagyszerű pár soros progit az jó lenne.
Hát ha mindenféleképpen a blockread illetve a blockwrite eljárásokkal akarod, akkor valami ilyesmit próbálgass:
kód:
program szovegfdolg;
{$mode DELPHI}
var
{fájlváltozó a két fájlnak}
fbe,fki : file;
{egy tömb ami a puffert képezi, ebbe olvassuk be a fájl tartalmát byte-ként}
buff : array[1..2048] of byte;
{Egyéb változók}
beolv,kiirt,i : word;
ossz : longint;
bonusz : string;
begin
{összerendeli a bemeneti fájlt a fájlváltozóval}
AssignFile(fbe,'szovegfdolg.pas');
{megnyitja olvasásra a bemeneti fájlt}
Reset(fbe,1);
{összerendeli a kimeneti fájlt a fájlváltozóval}
AssignFile(fki,'szfdolg.pas');
{megnyitja írásra a kimeneti fájlt}
Rewrite(fki,1);
ossz:=0;
repeat
{beolvasunk a fájlból a buff tömbbe}
blockread(fbe,buff,sizeof(buff),beolv);
for i:=1 to beolv do
begin
{kiírjuk a buff tömbünk tartalmát a képernyőre}
write(chr(buff[i]));
end;
{kiírjuk a buff tömb tartalmát a kimeneti fájlba}
blockwrite(fki,buff,beolv,kiirt);
inc(ossz,kiirt);
until (beolv=0) or (kiirt<>beolv);
writeln('Átmásolva ',ossz,' byte a szovegfdolg.pas fájlból az szfdolg.pas fájlba');
{Beszúrunk egy sort a kimeneti fájl végére a hecc kedvéért}
bonusz:='{Egy bónusz sor a fájl végére}'+#10#13;
for i:=1 to length(bonusz) do
buff[i]:=ord(bonusz[i]);
beolv:=length(bonusz);
blockwrite(fki,buff,beolv,kiirt);
{bezárjuk a fájlokat és a programunk futása az ENTER lenyomására véget ér}
CloseFile(fbe);
CloseFile(fki);
writeln('A kilépéshez nyomj >>ENTER-t<<');
readln;
end.
Ez Free Pascalban készült nem Delphiben, de ott is lefordítható, ha kiveszed a {$mode DELPHI} fordító direktívát az elejéről azt hiszem. A program egyébként egy szimpla fájlmásolást mutat be annyival kiegészítve, hogy kiirja a képernyőre a puffer tartalmát, tehát amit a blockread-el beolvasott a fájlból, illetve a program végén még egy plussz sort szúr be a másolatba.
Szerintem szövegfájlt egyszerűbb feldolgozni például egy stringlist segítségével, vagy a FileStream-el, de még a sima read/readln, és write/writeln is sokkal egyszerűbb, persze így nem annyira van puffered, ami nem tudom miért lényeges.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!