online kép - Fájl  tube fájl feltöltés file feltöltés - adja hozzá a fájlokat online fedezze fel a legújabb online dokumentumok Kapcsolat
   
 

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
   
kategória
 

Biológia állatok Fizikai Földrajz Kémia Matematika Növénytan Számítógépes
Filozófia
Gazdaság
Gyógyszer
Irodalom
Menedzsment
Receptek
Vegyes

 
 
 
 













































 
 

File-kezelés

számítógépes

Fájl küldése e-mail Esszé Projekt


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: 1320