Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programování v jazyce C++ Pokročilý vstup a výstup.

Similar presentations


Presentation on theme: "Programování v jazyce C++ Pokročilý vstup a výstup."— Presentation transcript:

1 Programování v jazyce C++ Pokročilý vstup a výstup

2 OpakováníOpakování abstraktní třídy, abstraktní třídy, třídní ukazatele, třídní ukazatele, statické metody a položky, statické metody a položky, principy přetěžování operátorů, principy přetěžování operátorů, přetížení post-/preinkrementu, přetížení post-/preinkrementu, přetěžování operátorů ->, [], (), přetěžování operátorů ->, [], (), přetěžování operátorů new a delete. přetěžování operátorů new a delete.

3 Práce se soubory v C nejprve je třeba vytvořit proměnnou typu pointer na objekt typu FILE, nejprve je třeba vytvořit proměnnou typu pointer na objekt typu FILE, této proměnné je nutné přiřadit pointer na konkrétní místo do konkrétního souboru, této proměnné je nutné přiřadit pointer na konkrétní místo do konkrétního souboru, nyní můžeme číst/zapisovat data z/do souboru: nyní můžeme číst/zapisovat data z/do souboru: – znakový vstup/výstup, – formátovaný vstup/výstup, nakonec OS oznámíme, že již soubor nebudeme používat. nakonec OS oznámíme, že již soubor nebudeme používat.

4 Otevření souboru soubor otevřeme pomocí funkce fopen, soubor otevřeme pomocí funkce fopen, funkce má dva parametry: funkce má dva parametry: – název souboru uloženého na disku (nikoliv název proměnné), – režim otevření souboru, funkce vrací ukazatel na začátek či konec (režim připisování) souboru, funkce vrací ukazatel na začátek či konec (režim připisování) souboru, otevřeme-li soubor pro zápis, jeho obsah se nejprve vymaže, otevřeme-li soubor pro zápis, jeho obsah se nejprve vymaže, nepodaří-li se soubor otevřít, vrací se NULL, nepodaří-li se soubor otevřít, vrací se NULL,

5 Režimy otevření souboru rozlišujeme tři základní režimy otevření souboru: rozlišujeme tři základní režimy otevření souboru: – r – čtení, – w – zápis nebo přepsání, – a – připsání, – r+ – čtení a zápis, – w+ – čtení, zápis nebo přepsání, – a+ – čtení nebo zápis na konec souboru, ty ještě můžeme rozšířit o b, čímž říkáme, že budeme pracovat s binárním souborem, ty ještě můžeme rozšířit o b, čímž říkáme, že budeme pracovat s binárním souborem,

6 Znakový vstup a výstup mějme proměnné: mějme proměnné: – FILE *f; – char c; vstup: vstup: – c = getc(f); výstup: výstup: – putc(c, f); vrácení znaku do bufferu: vrácení znaku do bufferu: – ungetc(c, f);

7 Testování konce řádky při znakovém čtení souboru si konec řádky musí hlídat programátor, při znakovém čtení souboru si konec řádky musí hlídat programátor, na různých systémech jsou řádky v souboru ukončeny různě, na různých systémech jsou řádky v souboru ukončeny různě, jazyk C poskytuje standardní symbol ’\n’, který je nezávislý na platformě, jazyk C poskytuje standardní symbol ’\n’, který je nezávislý na platformě, použití: použití: – while((c=getc(f)) != ’\n’)

8 Testování konce souboru k testování konce souboru lze využít dvou možností: k testování konce souboru lze využít dvou možností: – symbolická konstanta EOF, – makro feof() – vrací TRUE při čtení za koncem souboru, použítí: použítí: – while ((c=getc(f)) != EOF) … – while ((c=getc(f)), !feof(f)) …

9 Formátovaný vstup a výstup vstup: vstup: – fscanf(f, ”%d”, &c); výstup výstup – fprintf(f, ”%d”, c); funkce fscanf() opět vrací počet úspěšně načtených položek, funkce fscanf() opět vrací počet úspěšně načtených položek, fprintf() vrací počet vypsaných znaků, fprintf() vrací počet vypsaných znaků, takto lze testovat konec souboru v případě, že předem známe jeho formát. takto lze testovat konec souboru v případě, že předem známe jeho formát.

10 Další možnosti pro binární soubory s binárními soubory mohu pracovat stejně jako s textovými, pokud si zapisovaný obsah předem připravím po bytech, s binárními soubory mohu pracovat stejně jako s textovými, pokud si zapisovaný obsah předem připravím po bytech, můžu též použít následující funkce: můžu též použít následující funkce: – fread(kam, velikost, počet, soubor); – fwrite(odkud, velikost, počet, soubor); obě funkce vrací počet úspěšně načtených a zapsaných položek. obě funkce vrací počet úspěšně načtených a zapsaných položek.

11 Posun v binárním souboru k posunu ukazovátka slouží funkce fseek() : k posunu ukazovátka slouží funkce fseek() : – fseek(soubor, posun, odkud), odkud je jedna ze tří hodnot: odkud je jedna ze tří hodnot: – SEEK_SET, – SEEK_CUR, – SEEK_END, aktuální pozici lze získat funkcí ftell(), aktuální pozici lze získat funkcí ftell(), v případě úspěšného posunu vrací 0, v případě neúspěšného vrací nenulovou hodnotu. v případě úspěšného posunu vrací 0, v případě neúspěšného vrací nenulovou hodnotu.

12 Vstupy a výstupy v C++ v C++ je možné používat nástroje jazyka C, v C++ je možné používat nástroje jazyka C, vhodnější je však používat vstupních a výstupních proudů: vhodnější je však používat vstupních a výstupních proudů: – jsou založeny na objektech, – jsou bezpečnější, – lze je snadno upravovat a rozšiřovat, – možno přetížit operátory >, – lze vytvářet nové manipulátory.

13 Datové proudy základní datový proud je ios_base, základní datový proud je ios_base, o něho jsou odvozeny istream, ostream, iostream, o něho jsou odvozeny istream, ostream, iostream, ve standardní knihovně jsou definovány instance: ve standardní knihovně jsou definovány instance: – cin (typu istream), – cout, cerr, clog (typu ostream), jsou definovány v souboru iostream. jsou definovány v souboru iostream.

14 Další proudové třídy v hlavičkovém souboru fstream : v hlavičkovém souboru fstream : – ifstream, ofstream, fstream, v hlavičkovém souboru sstream : v hlavičkovém souboru sstream : – istringstream, ostringstream, – stringstream, v hlavičkovém souboru strstrea : v hlavičkovém souboru strstrea : – istrstream, ostrstream, strstream, – zastaralé.

15 Práce se soubory v C++ nejprve je třeba vytvořit instanci třídy ofstream, ifstream nebo fstream, nejprve je třeba vytvořit instanci třídy ofstream, ifstream nebo fstream, konstruktor má parametry: konstruktor má parametry: – jméno souboru, – režim otevření, možné režimy: možné režimy: – ios::in, ios::out, ios::app, ios::ate, – ios::binary, ios::trunc. – režimy lze kombinovat pomocí |.

16 Práce se soubory v C++ proud můžeme uzavřít pomocí metody close(), proud můžeme uzavřít pomocí metody close(), lze jej pak kdykoliv otevřít pomocí metody open() : lze jej pak kdykoliv otevřít pomocí metody open() : – ta má stejné parametry jako konstruktor, k ověření, zda se poslední akce povedla, můžeme použít přetížený operátor ! : k ověření, zda se poslední akce povedla, můžeme použít přetížený operátor ! : – vrací FALSE, pokud se vše povedlo, TRUE, došlo-li k chybě, proud je možné předat funkci jako parametr: proud je možné předat funkci jako parametr: – protože obsah proudu měníme, předáváme jej odkazem.

17 Práce s binárními soubory ke čtení z binárního souboru slouží metoda read() se dvěma parametry: ke čtení z binárního souboru slouží metoda read() se dvěma parametry: – adresa proměnné, do níž načteme hodnotu, přetypovaná na (char*), – velikost, k zápisu do binárního souboru slouží metoda write() se dvěma parametry: k zápisu do binárního souboru slouží metoda write() se dvěma parametry: – adresa proměnné, z níž zapisujeme, přetypovaná na (char*), – velikost,

18 Pohyb po binárním souboru k dispozici máme čtecí a zapisovací ukazovátko, k dispozici máme čtecí a zapisovací ukazovátko, při přečtení či zápisu se dané ukazovátko o daný počet bytů posune, při přečtení či zápisu se dané ukazovátko o daný počet bytů posune, k ručnímu posunu slouží metody: k ručnímu posunu slouží metody: – seekp() a seekg(), k zjištění pozice slouží metody: k zjištění pozice slouží metody: – tellp() a tellg().

19 Přetěžování operátorů > operátory definujeme jako (spřátelenou) funkci, operátory definujeme jako (spřátelenou) funkci, první parametr je proud předávaný odkazem, první parametr je proud předávaný odkazem, druhý parametr je instance typu, pro něhož chceme operátor přetížit (zpravidla const ), druhý parametr je instance typu, pro něhož chceme operátor přetížit (zpravidla const ), oba operátory vrací referenci na upravený proud, oba operátory vrací referenci na upravený proud, tyto operátory je možné přetížit i pro jiné než proudové typy. tyto operátory je možné přetížit i pro jiné než proudové typy.

20 Manipulátory slouží pro řízení vstupní a výstupní konverze. slouží pro řízení vstupní a výstupní konverze. jsou definovány v souboru. jsou definovány v souboru. některé manipulátory: některé manipulátory: – hex, dec, oct, – showpoint, noshowpoint, – fixed, scientific, – setw(int n), setfill(int c), setprecision(int n) je možné vytvářet i další manipulátory. je možné vytvářet i další manipulátory.

21 DĚKUJI ZA POZORNOST Dost bylo programování…

22 Použitá literatura Pavel Herout – Učebnice jazyka C, Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k C++, Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server www.builder.cz. Server www.builder.cz.


Download ppt "Programování v jazyce C++ Pokročilý vstup a výstup."

Similar presentations


Ads by Google