Upload
unc3nzured
View
227
Download
0
Embed Size (px)
DESCRIPTION
VC++ file handling
Citation preview
Fájlkezelés
Fájlból beolvasás: ifstream
• Az ifstream osztály az std névtér része
• Az istream-ből származik
• Ennek következtében hasonlóan működik, mint a cin
Alap függvények ifstream(); Alapértelmezett konstruktor, létrehoz egy példányt.
explicit ifstream (const char* filename,
ios_base::openmode mode = ios_base::in);
Paraméteres konstruktor, a paraméterben név alapján megadott fájlt meg is nyitja.
void open (const char* filename,
ios_base::openmode mode = ios_base::in);
Megnyitja a megadott fájlt. Akkor van értelme, ha nem a paraméteres konstruktort használtuk.
bool is_open();
Viszzaadja, hogy van-e megnyitva fájl. Hamis lehet, ha: a) Az alapértelmezett konstruktort használtuk, de
még nem hívtuk meg az open() függvényt; b) A megnyitásra megadott fájlt nem lehet
megnyitni.
Alap függvények
void close(); Bezárja a megynitott fájlt.
istream& operator>> (…); Ahogy bármilyen istream osztályból, innen is ezzel az operátorral lehet beolvasni.
bool eof() const; Igazzal tér vissza, ha elértük a fájl végét.
bool good() const;
Igazzal tér vissza, ha a fájlból lehet olvasni. Hamis lesz akkor is, ha elértük a fájl végét, viszont más hibákra is reagál.
istream& getline (istream& is,
string& str);
Bekér egy egész sort a megadott string-be Nem tagfüggvény, simán az std névtérhez tartozik.
Fájlmegnyitás ifstream input;
input.open(“input.txt”);
if (input.is_open())
{
......
input.close();
}
// Vagy:
ifstream input(“input.txt”);
if (input.is_open())
{
......
input.close();
}
Beolvasás string str;
while (input.good()) // A ‘good’ jelzi, hogy még nem volt hiba
{
getline(input, str); // Sorokat olvas be
cout << str << endl;
}
// Vagy:
while (!input.eof()) // Figyelem, az ‘eof’ azt jelzi, ha a végén vagyunk
{
input>>str; // A szóközöknél is elválaszt
cout << str << endl;
}
Beolvasás
• Akár a getline-t használjuk, akár a >> operátort, oda kell figyelni a részletekre
• Ha a fájl végén van új sor, akkor az utolsó értelmes beolvasás nem ér el a fájl végére, hanem lesz még egy
• Ha a getline előtt használtunk más beolvasást, lehet hogy a bentmaradt ‘\n’ miatt az első getline értéke üres sztring lesz
Gyakorló feladat
Gyakorló feladat
• A Mercedeses feladat módosítása:
• Készíts a main.cpp-be egy readInput függvényt, amely beolvassa az adatokat az input.txt fájlból.
• A fájl BClass illetve CClass objektumokat tartalmaz, amit a sor elején lévő szöveg ad meg. A sor többi része az ár, fogyasztás, motor típusa, ajtók száma, és a motor mérete ilyen sorrendben.
• A beolvasás végét * karakter jelöli.
Gyakorló feladat
• BClass típus beolvasásakor a javítások listája következik leírás, évszám, költség sorrendben. Egy sor egy javítást tartalmaz. A javítások listáját * karakter zárja.
• CClass beolvasása esetén a felszerelések listája következik, soronként egy. A listát itt is a * karakter zárja.
Gyakorló feladat
• Készítsen a main.cpp-be egy sablon printList függvényt, ami a paraméterként megkapott List objektum elemeit jeleníti meg. A List tetszőleges típusú adatokat tartalmazhat, ez a típus a függvény sablon paramétere is.