Programovn v jazyce C Pokroil vstup a vstup

  • Slides: 22
Download presentation
Programování v jazyce C++ Pokročilý vstup a výstup

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

Opakování • • abstraktní třídy, třídní ukazatele, statické metody a položky, principy přetěžování operátorů,

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

Práce se soubory v C • nejprve je třeba vytvořit proměnnou typu pointer na

Práce se soubory v C • 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, • 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.

Otevření souboru • • soubor otevřeme pomocí funkce fopen, funkce má dva parametry: –

Otevření souboru • • soubor otevřeme pomocí funkce fopen, 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, • otevřeme-li soubor pro zápis, jeho obsah se nejprve vymaže, • nepodaří-li se soubor otevřít, vrací se NULL,

Režimy otevření souboru • rozlišujeme tři základní režimy otevření souboru: – r – čtení,

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,

Znakový vstup a výstup • mějme proměnné: – FILE *f; – char c; •

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

Testování konce řádky • při znakovém čtení souboru si konec řádky musí hlídat programátor,

Testování konce řádky • 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ě, • jazyk C poskytuje standardní symbol ’n’, který je nezávislý na platformě, • použití: – while((c=getc(f)) != ’n’)

Testování konce souboru • k testování konce souboru lze využít dvou možností: – symbolická

Testování konce souboru • 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í: – while ((c=getc(f)) != EOF) … – while ((c=getc(f)), !feof(f)) …

Formátovaný vstup a výstup • vstup: – fscanf(f, ”%d”, &c); • výstup – fprintf(f,

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

Další možnosti pro binární soubory • s binárními soubory mohu pracovat stejně jako s

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, • 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.

Posun v binárním souboru • k posunu ukazovátka slouží funkce fseek(): – fseek(soubor, posun,

Posun v binárním souboru • k posunu ukazovátka slouží funkce fseek(): – fseek(soubor, posun, odkud), • odkud je jedna ze tří hodnot: – SEEK_SET, – SEEK_CUR, – SEEK_END, • • 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.

Vstupy a výstupy v C++ • v C++ je možné používat nástroje jazyka C,

Vstupy a výstupy v 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ů: – jsou založeny na objektech, – jsou bezpečnější, – lze je snadno upravovat a rozšiřovat, – možno přetížit operátory << a >>, – lze vytvářet nové manipulátory.

Datové proudy • základní datový proud je ios_base, • o něho jsou odvozeny istream,

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

Další proudové třídy • v hlavičkovém souboru fstream: – ifstream, ofstream, • v hlavičkovém

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

Práce se soubory v C++ • nejprve je třeba vytvořit instanci třídy ofstream, ifstream

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

Práce se soubory v C++ • proud můžeme uzavřít pomocí metody close(), • lze

Práce se soubory v C++ • proud můžeme uzavřít pomocí metody close(), • 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 !: – vrací FALSE, pokud se vše povedlo, TRUE, došlo-li k chybě, • proud je možné předat funkci jako parametr: – protože obsah proudu měníme, předáváme jej odkazem.

Práce s binárními soubory • ke čtení z binárního souboru slouží metoda read() se

Práce s binárními soubory • 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: – adresa proměnné, z níž zapisujeme, přetypovaná na (char*), – velikost,

Pohyb po binárním souboru • k dispozici máme čtecí a zapisovací ukazovátko, • při

Pohyb po binárním souboru • 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, • k ručnímu posunu slouží metody: – seekp() a seekg(), • k zjištění pozice slouží metody: – tellp() a tellg().

Přetěžování operátorů << a >> • operátory definujeme jako (spřátelenou) funkci, • první parametr

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

Manipulátory • slouží pro řízení vstupní a výstupní konverze. • jsou definovány v souboru

Manipulátory • slouží pro řízení vstupní a výstupní konverze. • jsou definovány v souboru <iomanip>. • 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.

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

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

Použitá literatura Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k

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