Programozás II. Fájlkezelés



Hasonló dokumentumok
Országzászlók (2015. május 27., Sz14)

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Programozás 6. Dr. Iványi Péter

Programozás 5. Dr. Iványi Péter

Adatbázisrendszerek I. Fájlszintű adattárolás C-ben

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

7. gyakorlat Sorozatok, Fájlkezelés

Programozas 1. Strukturak, mutatok

1. Áttekintés 1.1 Figyelmeztetések (1) Az új akkumulátorok optimális teljesítményüket 2-3 feltöltési és lemerítési ciklus után érik el.

malloc free malloc free int sum(int a[4]) { return a[0] + a[1] + a[2] + a[3]; }

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás I gyakorlat. 10. Stringek, mutatók

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

Novell GroupWise levelező rendszer alapok Kiadványunk célja, hogy a Nemzeti Közszolgálati Egyetemen használt Novell GroupWise (a továbbiakban GW)

Bevezetés a C++ programozási nyelvbe

Programozás alapjai C nyelv 11. gyakorlat. Preprocesszor. Makrók (#define)

Dinamikus memóriakezelés Fájlkezelés

Adatbázisrendszerek I. File-szintű adattárolás C-ben. 1. gyakorlat

Láncolt lista. az itt adott nevet csak a struct deklaráción belül használjuk

C programozási nyelv Pointerek, tömbök, pointer aritmetika

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Preprocesszor. Programozás alapjai C nyelv 11. gyakorlat. Makrók (2) Makrók (#define) Makrók (3) #include

Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

Év zárása és nyitása 2015-ről 2016-ra

Informatikai tevékenység 2234 Maglód, Széchenyi u Mérnöki, tanácsadói tevékenység Iroda: Mobil: Telefon:

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Alcor Myth. E-könyv olvasó. Kezelési Útmutató

Bevezetés a C++ programozásba

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

TÁJÉKOZTATÓ AZ ELEKTRONIKUS ÜGYINTÉZÉSRŐL

MS-NMK nagyszámkijelző ismertető

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Információs Technológia

NAV nyomtatványok xml szerkezete. (v6.7)

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Programozás alapjai GEIAL316G, GEIAL312B-BP

Információs Technológia

Programozás alapjai 1. (BMEVIEEA100)

Analóg és digitális jelek. Az adattárolás mértékegységei. Bit. Bájt. Nagy mennyiségû adatok mérése

Felsô menü: Jogszabály- és dokumentumtár menüpont. Almenüpontok:

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

A rádió* I. Elektromos rezgések és hullámok.

AXEL Számlázó és készletnyilvántartó program

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Gyermektartásdíj megelőlegezése GYT

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Fájl rendszer. Fájl koncepció Elérési módok Könyvtár szerkezet Védelem Konzisztencia szemantika

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Körkörös listák. fej. utolsó. utolsó. fej

Programozás II. segédlet

INFO DIAG DIAGNOSZTIKAI MUSZER


Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Programozás I. C nyelv

INFORMATIKAI ALAPISMERETEK

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Felhasználói kézikönyv HostLogic SAP EKAER 1.0 megoldáshoz

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Példák tematikus csoportosításban

TANTÁL KFT. NLPC Gold nyelvoktató berendezés. kezelési utasítás

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Mérlegelés Kártyaolvasóval

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Programozás 3. Dr. Iványi Péter

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Programozási módszertan. Dinamikus programozás: Nyomtatási feladat A leghosszabb közös részsorozat

2.3. A C nyelv utasításai

Az egér, a botkormány (joystick) és a nyomtató programozása DOS-ban

Szövegszerkesztés Verzió: 0.051

C programnyelv 1. Kedves Kollegina, Kolléga!

Koobe Junior használati utasítás

A DBM függvények használata

Elektronikus ügyfélszolgálat Regisztrált ügyfelek felhasználói kézikönyv

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Optikai szövegfelismerő program. ABBYY FineReader. 9.0 változat Felhasználói kézikönyv ABBYY. Minden jog fenntartva.

Rovás segéd 1.8. Segédalkalmazás szövegek (át)rovásához


INFO DIAG DIAGNOSZTIKAI MUSZER

Java programozási nyelv 10. rész Input/output kezelés

BMX-W ver. 1.0 Kezelői útmutató

Programozás C++ -ban 2007/4

TÁJÉKOZTATÓ. 1. Az alkalmazható e-nyomtatványokról és kitöltésükről

Programozás I gyakorlat

Programozás II gyakorlat. 6. Polimorfizmus

Mesterséges Intelligencia I. (I602, IB602)

Programozás alapjai óra. Morvai Flórián, 2010 Dr. Dévényi Károly előadásvázlata alapján

OPTIJUS ONLINE KÉZIKÖNYV

Átírás:

Programozás II. Fájlkezelés Kocsis Zoltán Tamás 2013. 03. 28

Fájlkezelés Az stdio.h-ban megadott FILE* típusú pointerrel és függvényekkel lehet elérni a fájlunkat. FILE *fp; /* fájl mutató (file pointer/handle) */ fp= fopen("szoveg.txt", "wt"); /* megnyitás */ if (fp==null) { printf("nem sikerült megnyitni!"); } else { fprintf(fp, "Hello, vilag!\n"); for (i=0; i<20; ++i) fprintf(fp, "%d\n", i); fclose(fp); /* bezárás */ }

Megnyitás módja: írás (w) v. olvasás (r), szöveges (t) v. bináris (b). Az fopen() visszatérési értéke: hivatkozás a nyitott fájlra. Sikertelen megnyitásnál értéke: NULL pointer ezt ellenőrizni kell.

Windowson az elérési útban \ az elválasztó: C:\Windows\hatter.bmp, Unixon / van: /usr/bin/firefox. Az fopen() mindig elfogadja a /-t. Ha a \-hez ragaszkodunk, azt viszont \\-nek kell írni a sztring belsejében, mivel a \ önmagában a speciális karaktereket jelöli (pl. \n). Létezik még két további megnyitás mód is: hozzáfűzés (a). Ilyenkor a fájlt írásra nyitjuk meg, de a meglévő tartalmát meghagyva. Az írás mutató a fájl végére mutat, vagyis a meglévő tartalomhoz hozzáadva lehet folytatni az írást. írás-olvasás (+). Ilyenkor írni és olvasni is lehet. Más betűkkel együtt használjuk: pl. r+ azt jelenti, hogy a fájl tartalma megmarad, de írni is lehet bele

A szövegfájlokat a printf() és a scanf() párjával, az fprintf()-fel és az fscanf()-fel lehet kezelni. Ezeknek első paramétere a megnyitott fájl, a folytatás pedig ugyanúgy van, mint a képernyő / billentyűzet párjuknál. A szövegfájlokat lineárisan kezeljük, nem ugrunk benne ide-oda.

Szövegfájlok szerkezete Egyes rendszerek máshogy jelzik a szövegfájlokban a sorok végét (\n). Windowson két bájt, CR LF (0x0D 0x0A), Unixokon csak LF (0x0A).

Szövegfájlok szerkezete Szöveges módban nyitott fájlnál ezt megoldja helyettünk a C. Kezelés: fp=fopen(név, " t"), fprintf(fp, ), fscanf(fp, ).

Szövegfájlok szerkezete A "t"-vel, szöveges módban megnyitott fájl olvasásakor és írásakor a konverziót a C fájlkezelő függvényei automatikusan elvégzik. Vagyis Unixon pl. a \n sortörést változatlanul kiírják a fájlba, Windowson viszont a printf("\n") hatására nem egy, hanem két bájt kerül a fájlba. Viszont az automatikus konverzió miatt ezzel nekünk nem kell foglalkozni, csak annyiban, hogy "t" módban kell megnyitni a fájlt, ha szöveges formátumot szeretnénk. A fenti apróságtól eltekintve a szövegfájlok sokkal inkább hordozhatóak, hiszen a bennük tárolt adatok nem függenek a számábrázolás módjától, amit az adott géptípus hardvere határoz meg. Ez az oka annak, hogy az utóbbi években egyre inkább terjednek a szöveg alapú formátumok: szöveges dokumentumok: HTML, RTF, XML (DOCX) adatok, adatbázisok: XML

Bináris fájlok szerkezete struct adat { char nev[13]; short eletkor; } tomb[2]; strcpy(tomb[0].nev, "Ernoke"); tomb[0].eletkor=4; strcpy(tomb[1].nev, "Szultan"); tomb[1].eletkor=5; FILE *fp; fp=fopen("adat.dat", "wb"); /* write, binary */ fwrite(tomb, sizeof(struct adat), 2, fp); fclose(fp);

Bináris fájlok szerkezete fread(ptr, méret, db, fp), fwrite(ptr, méret, db, fp). A ptr által mutatott memóriaterület olvasása/írása az fp fájlból/fájlba. Az adat méret bájt méretű, db darabszámú elemekből áll. Visszatérési érték a sikeresen olvasott/írt elemek száma. Itt akad egy pár újdonság. Első a void* típusú mutató (az fwrite() és az fread() első paramétere ilyen típusú). Ez a pointertípus azt jelenti, hogy nincsen meghatározva, milyen típusú elemre mutat az a pointer, hanem csak annyi, hogy valahova a memóriába mutat. Az fread() és fwrite() függvények azért várnak ilyen típusú mutatót, mivel nem foglalkoznak az általunk megadott adatok értelmével egyszerűen csak elvégzik a fájlműveletet.

Bináris fájlok szerkezete Egy valamit azért mégis tudniuk kell az adatunkról, mégpedig azt, hogy hány bájtból áll. Ezt a fordító meg tudja mondani: a sizeof(típus) kifejezés megadja azt, hogy hány bájtból áll a megadott típus. Ez kényelmes, egyrészt mivel nekünk nem kell fejben tartani, másrészt a fordító úgyis jobban tudja. Ha átvisszük egy másik géptípusra a programunkat, ott a sizeof(típus) értéke más lehet. Az fread() és fwrite() második paramétere a típus méretét adja meg, a harmadik paraméter pedig a darabszámot. Ez a megoldás tömbök kezelésére kiválóan alkalmas: előbb egy tömbelem mérete, utána a tömb elemszáma.

Bináris fájlok szerkezete Az fwrite() visszatérési értéke azt mutatja, hány elemet sikerült kiírnia, az fread()-é pedig azt, hányat olvasott be. Ezek is méret, vagyis size_t típusúak. (A size_t típus egy egész szám, azonban a mérete (bitszáma) eltérhet az integerétől.) A fájl tartalma: 45 72 6E 6F 6B 65 00 21 80 07 40 00 7B 26 04 00 Ernoke.!..@.{&.. 53 7A 75 6C 74 61 6E 00 F0 05 59 2A 6A 22 05 00 Szultan...Y*j".. Bináris fájlok kezelése: fp=fopen(név, " b"), fread( ), fwrite( ).

Bináris fájlok szerkezete Érdekesség. A fenti sztringet 13 karakteren tároljuk, de a beírt sztring rövidebb. A fennmaradó helyen memóriaszemét van ezt a színezett rész mutatja. Erről volt szó a sztringek kapcsán. Külön érdekesség még, hogy van egy extra bájt is a struktúrában, a sztring mintha 14 karaktert foglalna. Ez már nem tartozik a sztringhez, hanem egy ún. kitöltő (padding) bájt. Ezt a fordító a sztring és a short közé tette, valószínűleg azért, mert a processzor igényelte azt, hogy a short párosadik bájton kezdődjön. Ha binárisan írjuk ki fájlba az adatokat, ez is látszik. Az is megfigyelhető, hogy ezen a gépen a kétbájtos short típus helyiértékei fordított sorrendben vannak. Előbb az alsó helyiérték: 4, utána a felső: 0. Ernőke életkora 4+0*256 év. Ez is az adott számítógéptípus tulajdonságaitól függ, és egy olyan dolog, amely miatt nem hordozhatóak egyik gépről másikra az ilyen gondolkodás nélkül, memóriatartalmat egy az egyben kiírt bináris fájlok.

Feladat Készítsen programot, mely eldönti az indító parancssorban megadott azonosítójú fájlról, hogy ASCII kódú szövegfájl-e, vagy bináris fájl-e! Ha parancssori paraméter nélkül futtatják a programot, akkor ismertesse a képernyőn a használatát!

Feladat Készítsen programot, mely az indító parancssorban megadott szövegfájlokat egyesíti a megadás sorrendjében a parancssorban utolsóként előírt azonosítójú szövegfájlba! Ha parancssori paraméter nélkül indítják a programot, akkor ismertesse a képernyőn, hogyan kell használni! Ha csak egy fájlazonosító van a parancssorban, akkor a szabvány bemenet másolandó bele. A fájlok egyesítése során a folyamat előrehaladásáról tájékoztatni kell a képernyőn! A szabvány bemenet másolása esetén végül közlendő az eredményfájl mérete!