online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

 

Online dokumentumok - kep
  

File-kezelés

számítógépes



Fájl küldése e-mail



egyéb tételek

 
A programok felépítése, az utasítasok típusai
VoIP technológia
Rendszerindítas
Funkcionalis függőségek, normalformak
Az operaciós rendszer
Prezentació készítése
PLC-K KIVÁLASZTÁSA, BEÜZEMELÉSE, ÜZEMELTETÉSE
Egy tabla létrehozasa - ACCESS
Halózatok csoportosítasa kiterjedés és topológia alapjan
A relaciós adatmodell, kulcsok
 
 

File-kezelés

A fájlok arra szolgálnak, hogy adatokat, szövegeket tároljunk bennük, hogy azokat később visszaolvashassuk. Kétféle fájl létezik. Van olyan, amiben csak szöveget tárolunk, ezeket szövegfájloknak nevezzük. Van olyan, amiben adatokat tárolunk, ezeket bináris fájloknak nevezzük. A különbség, hogy a szövegfájlokban minden szövegként van tárolva, a bináris fájlokban minden binárisan. Ennek egyik jelentősége, hogy a számokat például binárisan könnyebb tárolni, ugyanis kevesebb helyet foglalnak.

Szöveges fájlok

A szöveges fájlok tehát karakterekből épülnek fel. A sorokat egy ENTER-nek megfelelő CR/LF zárja. Ez a sorvége karakter. Két részből áll. Az első új sort kezd, a második a sor elejére viszi a kurzort. Karakterkódjuk a 13 és a 10. Megjegyzem így együtt kiíratáskor is használhatóak új sor kezdésére, mint a 7-es kódú sípszó.

A fájlt vagy olvasni, vagy írni nyitjuk meg. Ez egyértelmű, de a lényeg, hogy meg kell nyitni. Azért kell megnyitni, mert ilyenkor a fájl pontos helye a háttértárolón elraktározódik, és ezáltal tudjuk a tartalmát elérni. Minden megnyitott fájlt le kell zárni. A lezáráskor frissül a fájl, azaz véglegesítődik a tartalma.

Nézzük a gyakorlatot! Először is kell egy változó, amin keresztül elérjük a fájlt. Ennek 'text' típusúnak kell lennie szövegfájl esetén.

var
F: text;

Most hozzá kell rendelnünk a fájlt. Ezt úgy tesszük meg, hogy megadjuk a fájlváltozót és a megnyitandó fájlt az elérési úttal, mint DOS alatt.



assign(F, szoveg.txt);

A fájl kezelésére egy 128 byte-os puffer áll alapból rendelkezésünkre. Ha szeretnénk gyorsítani a fájlkezelést, akkor célszerű ezt a puffert nagyobbra állítani. A puffer méretének 2 hatványának kell lennie.

settextbuf(F, puffer, 4096);

A puffer általában egy tömb, a méretet pedig nem muszáj megadni. Ha nem adjuk meg a méretet, akkor az automatikusan számolódik. Ha megadjuk, akkor az maximum a 'puffer' mérete lehet, azaz sizeof(puffer), vagy annál kisebb. Ezt a műveletet mindig a fájl megnyitása előtt kell elvégezni.

Rendben tehát meg van a fájlunk. A következő lépés, hogy meg kell nyitnunk. Itt kínálkozik 3 lehetőségünk. Az egyik lehetőség a reset Ez megnyitja a fájlt csak olvasásra. Ilyenkor automatikusan a fájlpozíció a fájl elején van. Ha a fájl üres, akkor az eof függvény, ami a fájl végekor igaz értéket ad, jelzi a fájl végét. A fájl vége karakter ASCII kódja 26. A reset parancsot használhatjuk a már megnyitott fájlon is, ha vissza akarjuk állítani a fájlpozíciót a fájl elejére.

Egy másik lehetőség a rewrite. Ez új szövegfájlt hoz létre, ha még nem létezik, illetve a már meg lévő fájl újraírja. Előtte mindig ellenőrizzük, hogy létezik-e már a fájl, mert ha igen annak tartalma kérdés nélkül elvész! Ez a parancs csak írásra nyitja meg a fájlt. Megnyitáskor a fájlpozíció a fájl elején van.

A harmadik lehetőség az append. Ezzel egy már létező fájlt nyithatunk meg csak hozzáírásra. A fájlpozíció automatikusan a fájl végén van megnyitáskor.

reset(F);

vagy

rewrite(F);

vagy

append(F);

Ha nyitáskor valamilyen hiba lép fel, akkor azt a program 'Runtime error...' üzenettel honorálja. Ha ennél pontosabb hibaüzenetet szeretnénk, akkor a fordító direktívák közül az I-t ki kell kapcsolni a kritikus részen, majd az ioresult függvénnyel lekezelhetjük a hibát. Ez után ne felejtsük el visszakapcsolni az I-t. A fordító direktívákról majd még később lesz szó. Az ioresult függvény az utolsó I/O művelet hibakódját tartalmazza, de csak egyszer olvasható, mert minden leolvasáskor törlődik. Ha nincs hiba, akkor 0 hibakódot ad. Megjegyzem, hogy ez minden i/o műveletre alkalmazható.

Most már minden készen áll a fájl kezelésére. Ha olvasásra nyitottuk meg a fájlt, akkor olvashatunk belőle a read, és a readln paranccsal. Olvasással együtt a fájlpozíció is folyamatosan halad. Íly módon az egész sor olvasásakor a fájlpozíció a következő sorra helyeződik. A sor végét az eoln függvény mutatja. Ha igaz értéket mutat, akkor az aktuális sor végén van a fájlpozíció. A sorvége és a fájlvége érzékelésére az előzőekhez hasonlóan használható a seekeof és a seekeoln függvény. Ezekre akkor van szükség, ha az aktuális fájlpozíció és a fájlvége/sorvége között csak szóköz és tabulátor van, illetve fájlvége esetén sorvége karakter. Ugyanis ezek nem veszik figyelembe az előbb felsoroltakat.

Ha írásra, vagy hozzáfűzésre nyitottuk meg a fájlt, akkor a write és a writeln parancsokat alkalmazhatjuk. A kettő közötti különbség az, hogy az utóbbi tesz egy sorvége jelet is, ami új sort eredményez.

Mindkettőt ugyanúgy használjuk, mint képernyőre íráskor, csak itt először a fájlváltozót kell megadni.

read(F, szoveg);
readln(F, sor);
write(F, 'Ezt irja ki!');
writeln(F, 'Ezt a sort írja ki!');

Az utolsó dolgunk, hogy az írás/olvasás után zárjuk le a fájlt. Erre a célra a close szolgál. Csak a fájlváltozót kell megadnunk neki.

close(F);

Ez így működik is, de van még valami, ha általunk írt rutinokkal írtunk a fájlba, akkor szükség van a puffer kiíratására is. Ezt a bezárás előtt kell elvégezni.

flush(F);

Ha a programnak csak a fájlkezelés a célja, akkor a parancssorban a programunk neve után megadhatjuk azoknak a fájloknak a nevét, amikkel a program dolgozik. Ezt szabványos i/o esetén a kisebb/nagyobb jelekkel tehetjük meg.

masol.exe <egyik.txt >masik.txt

A masol.exe ebben az esetben úgy nyitódik meg, hogy olvasásra meg lesz nyitva az 'egyik.txt', és írásra a 'masik.txt'. A programon belül már csak előbb olvasnunk kell, és írnunk. Ezeknél automatikusan a megfelelő fájl lesz kiválasztva. Ha folyamatosan a fájl végéig olvasunk és írunk egymás után, akkor egyszerűen soronként másoljuk át az 'egyik.txt' tartalmát a 'masik.txt'-be. Ha netán nem adunk meg fájl, akkor automatikusan a képernyő lesz kiválasztva. Tehát, ha nem adunk meg olvasásra fájlt, akkor a billentyűzetről tudunk fájlba írni, mint a 'type' DOS paranccsal. ENTER-rel tudunk új sort kezdeni, a fájl végét pedig a CTRL-Z jelzi. Ezen kívül, ha írásra nem adunk meg fájlt, akkor az olvasásra megnyitott fájl tartalma íródik ki soronként a képernyőre. Netán ha egyiket sem adnánk meg, akkor amit a billentyűzetről beírunk, az újból kiíródik a képernyőre. Poénos mi?

program masol;
var
ch: char;
begin
repeat
read(ch);
write(ch);
until eof;
end

Ez persze a CRT unit használatakor nem működik, tehát egy kicsit át kell alakítani a programot.

program masol2;
uses crt;
var
ch: char;
inp, out: file;
begin
assign(inp, '');
assign(out, '');
reset(inp);
rewrite(out);
repeat
read(ch);
write(ch);
until eof;
end

Ennyi. Ha nem adunk meg fájlnevet, akkor a szabványos i/o által megadott fájlt nyitja meg. Szükségünk lehet a DOS parancssorból való paraméter-megadásra, az előzőeknél magasabb szinten. Ehhez tudnunk kell, hogy a paramcount word típusú függvény adja a megadott paraméterek számát. Ezt követően a paraméterekre a ParamStr függvénynek adott sorszámmal lehet hivatkozni. Írassuk ki az indításkor megadott paramétereket!

program kiir;
var
i: integer;
begin
for i := 0 to paramcount do
writeln(i, '. ', paramstr(i));
end

Nos, nézzünk egy példát fájlkezelésre. A feladat, hogy számoljuk meg, hogy hány sor van az általunk megadott fájlokban, majd írjuk ki ezeket egy újonnan létrehozott fájlba. Ehhez használjuk az előbb említett paraméterkezelést.

program sorok;
var
i, sor: integer;
temp: string;
F1, F2: text;
begin
assign(F2, paramstr(paramcount));

rewrite(F2);
if ioresult <> 0 then
begin
writeln('Hiba ', paramstr(paramcount),
' megnyitásakor!');
halt;
end;

for i := 1 to paramcount - 1 do
begin
assign(F1, paramstr(i));

reset(F1);
if ioresult <> 0 then
begin
writeln('Hiba ', paramstr(i),
' megnyitásakor!');
halt;
end;

sor := 0;
repeat

readln(temp);
if ioresult <> 0 then
begin
writeln('Hiba a ', paramstr(i),
' sorának olvasásakor!');
halt;
end;

inc(sor);
until eof(F1);
close(F1);

writeln(F2, i, '. ', paramstr(i),
' sorok: ', sor);
if ioresult <> 0 then
begin
writeln('Hiba a ', paramstr(paramcount),
' sorának olvasásakor!');
halt;
end;

end;
close(F2);
end

Ennek a programnak az a szépséghibája, hogy csak string típus hosszúságú sorokat tud kezelni. Ennek kiküszöbölésére karakterenként kell olvasnunk a fájlt, és eoln-t kell figyelnünk, hogy igaz-e. Ha igen, akkor elértük a sor végét. Ez azonban laaaaaassssssssaaaaaabb, viszont nincsenek korlátai! Ezt is nézzük meg!



program sorok2;
var
i, sor: integer;
temp: char;
F1, F2: text;
begin
assign(F2, paramstr(paramcount));

rewrite(F2);
if ioresult <> 0 then
begin
writeln('Hiba ', paramstr(paramcount),
' megnyitásakor!');
halt;
end;

for i := 1 to paramcount - 1 do
begin
assign(F1, paramstr(i));

reset(F1);
if ioresult <> 0 then
begin
writeln('Hiba ', paramstr(i),
' megnyitásakor!');
halt;
end;

sor := 0;
repeat

read(temp);
if ioresult <> 0 then
begin
writeln('Hiba a ', paramstr(i),
' sorának olvasásakor!');
halt;
end;

if eoln(F1) then
inc(sor);
until eof(F1);
close(F1);

writeln(F2, i, '. ', paramstr(i),
' sorok: ', sor);
if ioresult <> 0 then
begin
writeln('Hiba a ', paramstr(paramcount),
' sorának olvasásakor!');
halt;
end;

end;
close(F2);
end

Találat: 1447