Bináris fájlok kezelése

Slides:



Advertisements
Hasonló előadás
SZKENNER BÓNUSZOK. Szkenner operátor bónusz Kezdő szkennelési bónusz: €7,5 7,5 eurós kezdő szkennelési bónuszt fizetünk a Szkenner bérlőnek, amikor egy.
Advertisements

ECM/DMS A GYAKORLATBAN E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS
TÖMÖRÍTÉS. Fogalma A tömörítés egy olyan eljárás, amelynek segítségével egy fájlból egy kisebb fájl állítható elő. A tömörítési arány függ a fájl típusától,
Irattári és levéltári funkciók a tanúsított szoftverekben Vágujhelyi Ferenc.
CÉLCÉLCSOPORT  Egészségügyi szakmai tájékoztatás és betegtájékoztatás, az egészséges életvitelhez szükséges információk szolgáltatása, publikálása, áttekint-
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Hogyan partícionáljuk meghajtónkat?
Internet tudományos használata
A szakiskolák aktuális problémái
Script nyelvek előadás
Fájlkezelés.
Számítógépes szimuláció
Nagyméretű állományok küldése
Valószínűségi kísérletek
Adatbázis normalizálás
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Programstruktúrák.
Becslés gyakorlat november 3.
Mezőgazdasági kisüzemek fejlesztése
Scilab programozás alapjai
Én így oktatnám a programozást
Adatok importálása, rendezése és szűrése
A C++ programozási nyelv
Háttértárak karbantartása
Sz&p prof.
CSOPORT - A minőségellenőrök egy megfelelő csoportja
Lexikális elemző: lex (flex)
PHP-SQL adatbáziskezelő parancsai
Nyelvek típusossága.
Bevezetés Az ivóvizek minősége törvényileg szabályozott
Adatbázis-kezelés (PL/SQL)
INFOÉRA 2006 Véletlenszámok
2. Bevezetés A programozásba
VB ADATTÍPUSOK.
Adatbevitel, értékadás, típuskonverzió
Adatszerkezetek.
Business Mathematics
Regressziós modellek Regressziószámítás.
Számítógépes Hálózatok
Kovács Gergely Péter Bevezetés
Teljes visszalépéses elemzés
3. A robot képernyőmenüje
C++ Standard Template Library
SZKENNER BÓNUSZOK.
Vonalkódok Kajdocsi László Informatika tanszék A602 iroda
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
A minőségellenőrzést támogató program bemutatása, Kérdőívek értékelése
A Microsoft SharePoint testreszabása Online webhely
2. A KVANTUMMECHANIKA AXIÓMÁI
Az azonosító tárolási osztálya Az azonosító élettartama
Karakter- és sztringkezelő függvények, matematikai függvények
További rendező és kereső algoritmusok
A szállítási probléma.
Dr. Varga Beatrix egyetemi docens
Válassza ki a Blaha Lujza tér végállomásra vonatkozó helyes állítást!
Matematika II. 5. előadás Geodézia szakmérnöki szak 2015/2016. tanév
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
SQL jogosultság-kezelés
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Tájékoztató az EPER pályázati folyamatáról
Szöveges adatok tárolása
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Bevezetés Tematika Számonkérés Irodalom
A részekre bontás tilalma és annak gyakorlati alkalmazása
Algoritmusok.
Hagyományos megjelenítés
Előadás másolata:

Bináris fájlok kezelése Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./0. Fájlkezelés A fájlkezelés alapjai Bináris fájlok kezelése Logikai fájlnév definiálása Bináris fájl megnyitása Bináris fájl írása, olvasása Pozicionálás a fájlban A fájl lezárása Szöveges fájl használata Szövegfájl írása, olvasása Mintaprogram szöveges fájl kezelésére

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./1. A fájlkezelés alapjai A C nyelvben megkülönböztetik az alacsonyszintű és a magasszintű fájlkezelést. Mi a továbbiakban csak a kevésbé gépközeli és kevésbé gyors, de jobban hordozható magasszintű fájlkezelést vizsgáljuk. A C fájl egyetlen karaktervektor alakjában képzelhető el (stream = adatfolyam), amelynek bejárásához a fájlmutatót használhatjuk. A fájlmutató aktuális pozíciójától kiírhatunk a fájlba, vagy beolvashatunk a fájlból egy adott méretű adatot, és ezzel a méretnek megfelelő karakterszámmal (byte-számmal) előre mozgatjuk a fájlmutatót, vagy adatmozgás nélkül önmagában is pozicionálhatjuk azt. Írásra megnyitott fájl esetén a pozicionálás és írás a fájl korábbi végén túl is történhet, definiálatlanul hagyva a közbenső meg nem írt területek tartalmát.

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./2. A létrehozható fájlok eltérhetnek a numerikus értékek tárolási módjában: a text típusú fájlokban a számértékek a számjegykarakterek sorozataként, bármely szövegszerkesztővel olvasható és módosítható módon tárolódnak, szemben a bináris fájlokkal, amelyekben a memóriabeli, kettes számrendszeren alapuló, kettő hatványait jelentő bitekből összeálló byte-ok adják a tárolandó karaktereket. "AC" 01000001 01000011

Bináris fájlok kezelése Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./3. Bináris fájlok kezelése A kezelés lépései: Logikai fájlnév (fájlpointer) definiálása A fájl megnyitása A fájltartalom kezelése: írás a fájlba, olvasás a fájlból, pozícionálás a fájlban A fájl lezárása. A fájlok kezelése során számtalan hibalehetőség adódhat, amelyekből eredő programmegszakítást a hibakezelés beépítésével többnyire elkerülhetjük.

Logikai fájlnév definiálása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./4. Logikai fájlnév definiálása A logikai fájlnév szolgál a programírás során a fájl azonosítására. Egyidejűleg több fájlt is definiálhatunk. A definiálás formája: FILE * <log_fájlnév>; A <log_fájlnév> által mutatott FILE struktúra-típusú struktúra adattagjai szolgálnak majd a fájlhasználat adminisztrálására. Pl.: FILE * allomany; FILE * fajl;

Bináris fájl megnyitása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./5. Bináris fájl megnyitása A megnyitás szolgál a konkrét adatfájl esetleg csak futásidőben kiderülő fizikai nevének és a program megírása közben a fizikai név helyettesítésére szolgáló logikai fájlnévnek az összekapcsolására, valamint a megnyitás módjának a megadására. A módban jelezzük azt is, hogy bináris fájlt nyitunk meg. Formája: <log_fájlnév> = fopen( <fiznév>, <módstr>);

A módsztring lehetséges értékei: "rb" létező fájl megnyitása olvasásra Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./6. A módsztring lehetséges értékei: "rb"  létező fájl megnyitása olvasásra "wb"  új fájl létrehozása írásra, vagy létező fájl felülírása "ab"  létező fájl megnyitása hozzáírásra, vagy új fájl létrehozása, ha nem létezett "r+b"  létező fájl megnyitásra írásra és olvasásra "w+b" új fájl létrehozása írásra, vagy olvasásra. Már létező fájl tartalma előbb törlődik. "a+b" a fájl megnyitása írásra, vagy olvasásra, a fájl végére állított fájlmutatóval A b karakter utal a fájl bináris jellegére.

allomany = fopen( "C:\\adatok\\nyilvant.dat","rb" ); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./7. Példák fájlnyitásra: allomany = fopen( "C:\\adatok\\nyilvant.dat","rb" ); fajl = fopen( fiznev,"wb"); Megj.: a "wb" és "w+b" esetekben a már létező fájl tartalma jelzés nélkül elvész! A + jellel megnyitott fájloknál írás és olvasás váltása között a pufferelt adatokat célszerű kiíratni a fájlba az fflush(<log_név>) függvény, vagy pozicionáló függvény hívásával. Sikertelen megnyitás esetén az fopen() függvény NULL pointerértéket ad.

Bináris fájl írása, olvasása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./8. Bináris fájl írása, olvasása Változók tartalmának fájlbaírására és beolvasására szolgáló függvények: fwrite( &<változó>, <változó mérete>, <db>,<log_fájlnév>) fread( &<változó>, <változó mérete>, <db>,<log_fájlnév>) A függvények visszatérési értéke a hibátlanul kiírt, ill. beolvasott értékek darabszáma. Pl.: fwrite(&valt, sizeof valt, 1, allomany); fwrite(vektor, sizeof (vektor [0]), 10, allomany); fread( &adag, sizeof (adag) , 1 , fajl );

Pozicionálás a fájlban Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./9. Pozicionálás a fájlban A pozicionálás alapvetően byte-okban történik, és a fájlmutató értékének lekérdezése is byte-okban mért pozíciót ad vissza, long int értékkel. A 0. kezdőelemre való pozicionálás függvénye a                rewind(<log_fájlnév>) . Tetszőleges byte-pozícióra az fseek(<log_fájlnév>, <mennyit>, <honnan>) függvénnyel állhatunk. A <mennyit> érték byte-okban adja meg azt az értéket, amelyet a <honnan> által beazonosított kezdőpozícióhoz adva megkapjuk a célpozíciót.

A <honnan> előredefiniált értékei: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./10. A <honnan> előredefiniált értékei: SEEK_SET a fájl elejétől számítva SEEK_CUR az aktuális pozíciótól mérve SEEK_END a fájl végéhez adva. Az aktuális pozíciót az ftell(<log_fájlnév>) függvénnyel kérdezhetjük le. Pl.: rewind(allomany); fseek( fajl, 12*sizeof(adag), SEEK_CUR ); pozicio = ftell( fajl );

A fájl lezárása az fclose(<log_fájlnév>) függvénnyel történik. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./11. A fájl lezárása az fclose(<log_fájlnév>) függvénnyel történik. Pl.: fclose( allomany ); fclose( fajl );

l s ö o r e i k d á m Szöveges fájl használata \n LF \0 CR Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./12. Szöveges fájl használata Szövegek fájlbaírásakor, ill. visszaolvasásakor automatikus LFCR+LFLF konvertáláson megy át az újsor ( \n ) karakter: l s ö o r \n e i k LF \0 d á m CR memóriában fájlban EOF

Példa szövegfájl megnyitására: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./13. A szöveges fájlok kezelése a megnyitásban és a fájl írásában-olvasásában tér el a bináris fájlok kezelésétől. A megnyitásnál a módot megadó szövegben b helyett t írandó. Ezzel a mód lehetséges értékei: "rt", "wt", "at", "r+t", "w+t", "a+t". Példa szövegfájl megnyitására: textfajl = fopen( "C:\\texts\\level.txt", "wt" ); Ncrfajl = fopen( regifnev, "rt" );

Szövegfájl írása, olvasása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./14. Szövegfájl írása, olvasása Karakterenkénti írás és olvasás a putc(<karakter>,<log_fájlnév>) getc(<log_fájlnév>) makrókkal, szövegsorok (karaktervektorok) fájlbaírása és beolvasása az fputs(<karaktervektor>, <log_fájlnév>) fgets(<karaktervektor>, <pufferméret>,  <log_fájlnév>) függvényekkel, valamint elsősorban numerikus adatok szöveges alakúra és vissza konvertálásával a printf() és a scanf() mintájára használható fprintf(<log_fájlnév>, <formátumsztring>, <kifejezéslista>) fscanf(<log_fájlnév>, <formátumsztring>, <változócím-lista>) függvényekkel végezhető.

Mintaprogram szöveges fájl kezelésére Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./15. Mintaprogram szöveges fájl kezelésére Számjegyvezérlésű marógép tabulátorokkal formázott NC-programjából kell a tabulátorokat kiszedni és szóközzel helyettesíteni.

Szövegfájl írása, olvasása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./16. Szövegfájl írása, olvasása #include <stdio.h> #include <conio.h> main() { FILE * NCrfajl, * NCufajl; char regifnev[79], ujfnev[79]; char rsor[80],usor[80]; int i, j; clrscr(); printf("Tabulátorjelek helyettesítése szóközzel\n"); printf( "A forrás NC program neve:" ); gets( regifnev ); NCrfajl = fopen( regifnev, "rt" ); /* megnyitás olvasásra */ if ( NCrfajl == NULL ) { printf( "Sikertelen a régi fájl megnyitása" ); exit(1); }

printf( "Az uj NC program neve:" ); gets( ujfnev ); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./17. printf( "Az uj NC program neve:" ); gets( ujfnev ); NCufajl = fopen( ujfnev, "wt"); /* megnyitás írásra */ if (NCufajl == NULL) { printf( "Az új fájl nem hozható létre." ); exit(-1); }

while ( !feof( Ncrfajl ) ) /* fájlvég tesztelése */ { Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./18. while ( !feof( Ncrfajl ) ) /* fájlvég tesztelése */ { fgets(rsor,80,NCrfajl); /* sor beolvasása */ i = 0; j = 0; while ( rsor[ i ] != '\0' ) if ( rsor[ i ] != '\t' ) /* '\t' a tabulátorkarakter */ { usor[ j ] = rsor[ i ]; i++; j++; } else { usor[ j ] = ' '; j++; while (rsor[ i ] == '\t' ) i++; } usor[ j ] = '\0'; printf( "%s", usor ); fputs(usor,NCufajl); /* új sor kiírása a fájlba */ fclose(NCrfajl); fclose(NCufajl); } /* main vége */