18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Podobné dokumenty
Vstupní a vstupní proudy v C++

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Datové proudy objektový vstup a výstup v C++

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

PB161 Programování v jazyce C++ Přednáška 5

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. November 16, 2017

Vstupy a výstupy v jazyce C++

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Jazyk C++, některá rozšíření oproti C

PB161 Programování v jazyce C++ Přednáška 6

PB161 Programování v jazyce C++ Přednáška 6

Práce se soubory. Základy programování 2 Tomáš Kühr

VISUAL BASIC. Práce se soubory

PB přednáška (19. října 2015)

Základy C++ I. Jan Hnilica Počítačové modelování 18

Úvod do programování. Lekce 3

8. Načítání a zápis PDB souboru

Množina čísel int stl-set-int.cpp

přetížení operátorů (o)

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Úvod do programování. Lekce 1

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Šablony, kontejnery a iterátory

Datové typy pro reálná čísla

přetížení operátorů (o)

Programování v C++ První kroky

Zpracoval:

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Funkční objekty v C++.

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

PB161 Programování v jazyku C++

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

PROGRAMOVÁNÍ V C++ CVIČENÍ

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Šablony, kontejnery a iterátory

Mělká a hluboká kopie

Práce se soubory v Javě

Vector datový kontejner v C++.

Abstraktní třídy, polymorfní struktury

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Programovací jazyk C++ Cvičení 2

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Vstup a výstup datové proudy v C

Ošetřování chyb v programech

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

- jak udělat konstantu long int: L long velka = 78L;

10 Práce s řetězci - pokračování

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Více o konstruktorech a destruktorech

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Základy programování (IZP)

Množina v C++ (set, multiset).

Základy programování (IZP)

IUJCE 07/08 Přednáška č. 1

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Programování v C++ 3, 3. cvičení

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1

Zpracoval:

Programování v C++ 1, 6. cvičení

Zápis programu v jazyce C#

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Standardní vstup a výstup

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

C++ objektově orientovaná nadstavba programovacího jazyka C

Úvod do programovacích jazyků (Java)

Operační systémy. Cvičení 4: Programování v C pod Unixem

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Soubor jako posloupnost bytů

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

Ukazatele, dynamická alokace

Algoritmizace a programování. Terminálový vstup a výstup

Programování v C++ 1, 17. cvičení

Sít ová komunikace v C++

PB161 Programování v jazyce C++ Objektově Orientované Programování. Podzim 2014

map, multimap - Asociativní pole v C++.

Standardní algoritmy vyhledávací.

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Datové typy pro reálná čísla

Úvod do programování 8. hodina

Transkript:

18. února 2015, Brno Připravil: David Procházka Vstupní a výstupní proudy v C++ Programovací jazyk C++

Vstup dat do programu Strana 2 / 26 Obsah přednášky 1 Vstup dat do programu 2 Terminál 3 Textový soubor 4 Binární soubor 5 XML

Vstup dat do programu Strana 3 / 26 Vstup parametrů z příkazové řádky Programu je občas potřeba předat parametry (format c:). V C++ musíme deklarovat parametry funkce main následujícím způsobem: 1 int main ( int argc, char * argv []) { 2 std :: cout << " pocet parametru : " << argc ; 3 for ( int i =0; i< argc ; i ++) cout << argv [i] << " "; 4 std :: cout << std :: endl ; 5... Promn argc vrací počet pametrů, které byly předány +1. Promn argv je pole, kde každá buňka obsahuje parametr. K parametrům přistupujeme klasicky argv[1], argv[2],... Parametry jsou číslovány od 1! argv[0] je jméno prog.

Terminál Strana 4 / 26 Obsah přednášky 1 Vstup dat do programu 2 Terminál 3 Textový soubor 4 Binární soubor 5 XML

Terminál Strana 5 / 26 Výstup na terminál a čtení z terminálu Používá se knihovna iostream. Pro zápis lze použít standardní bufferovaný výstup cout, na nebufferovaný chybový výstup cerr, nebo na bufferovaný chybový výstup clog. Pro načtení lze použít standardní vstup cin. 1 # include < iostream > 2 3 int main ( void ){ 4 int cislo ; 5 std :: cout << " Napis cislo " << std :: endl ; 6 std :: cin >> cislo ; 7 std :: cout << " Napsal jsi : " << cislo << std :: endl ; 8 std :: cerr << " Nastala neznama chyba " << std :: endl ; 9 return 0; 10 }

Terminál Strana 6 / 26 Přesměrování proudů na úrovni OS přesměruj výpis příkazu do souboru ls>jmenosouboru.txt přesměruj standardní výstup program 1>jmenoSouboru.txt přesměruj chybový výstup program 2>jmenoSouboru.txt zahod chybový výstup program 2>\dev\null přesměruj chybový výstup na standardní 2>&1

Terminál Strana 7 / 26 Manipulátory nástroje pro práci s proudem Pro manip. s parametrem je potřeba použít knihovnu iomanip. endl konec řádku a vyprázdni buffer. setw(x) počet znaků na které bude zarovnáno. setfill( x ) jakým znakem bude vyplňováno. dec, hex, oct výpis čísel v destkové, šestnáctkové, osmičkové soustavě. 1 # include < iostream > 2 # include < iomanip > 3 int main ( void ) { 4 int c = 1000, b = 9; 5 std :: cout << "b=" << setw (3) << b << std :: endl 6 << "c=" << c << std :: endl ; 7 std :: cout << setw (3) << setfill (. ) << hex << c; 8...

Terminál Strana 8 / 26 Metody načítání formátovaného vstupu Vstup je automaticky konvertován na čísla, slova, věty. getline čte celé řádky, ne jen do prvního bílého znaku. >> nechává na bufferu enter, což může být problém při kombinování s getline. 1 std :: cout << " Veta : "; 2 std :: string veta ; 3 getline ( std :: cin, veta ); 4 5 std :: cout << " Slovo : "; 6 std :: string slovo ; 7 std :: cin >> slovo ; 8 9 std :: cout << " Cislo : "; 10 int cislo ; 11 std :: cin >> cislo ;

Terminál Strana 9 / 26 Metody načítání do (pole) znaků Se vstupem pracujeme jako se znaky, resp. polem znaků. Znaky lze i vracet do streamu. get nechá ukočovací symbol v bufferu, getline jej vybere. 1 char line [ maxsize ]; 2 std :: cout << " Veta : " << std :: endl ; 3 // nacte radek, posledni parametr volitelny 4 std :: cin. getline (line, maxsize, \n ); 5 std :: cout << line ; 6 7 std :: cin. get ( somechar ); // precte znak 8 char line [ maxsize ]; 9 std :: cout << " Veta : "; 10 std :: cin. get ( line, maxsize ); // nacte pocet znaku 11 std :: cout << line ;

Terminál Strana 10 / 26 Vyčistění bufferu Občas je potřeba zrušit nezpracované znaky z bufferu. ignore zruší zvolený počet znaků až po ukončovací symbol. Příklad ukazuje použití max. velikosti streamu. 1 # include < limits > 2... 3 std :: cin. ignore ( 4 std :: numeric_limits < std :: streamsize >:: max (), 5 \n );

Textový soubor Strana 11 / 26 Obsah přednášky 1 Vstup dat do programu 2 Terminál 3 Textový soubor 4 Binární soubor 5 XML

Textový soubor Strana 12 / 26 Práce se souborem Pracujeme také s proudy, metody čtení/zápisu jsou stejné. Musíme načíst knihovnu (třídu) fstream. Výstupní proud pak deklarujeme jako ofstream, vstupní ifstream. 1 # include < iostream > 2 # include < fstream > 3 int main (){ 4 std :: ofstream out ; 5 out. open (" temp. txt "); 6 7 for ( int i =1;i <=10; i ++) { 8 out << i << endl ; 9 } 10 out. close (); // nezapominat, vse je v bufferu 11 }

Textový soubor Strana 13 / 26 Kontrola zápisu do souboru Vždy je vhodné kontrolovat, zda se povedlo soubor otevřít (vytvořit). 1 # include < iostream > 2 # include < fstream > 3 int main (){ 4 std :: ofstream out ; 5 out. open (" pokus. txt "); 6 if ( out. is_open ()) { 7 out << " radka textu "; 8 out. close (); 9 } else { 10 std :: cout << " Soubor se nepodarilo nacist... "; 11 } 12 }

Textový soubor Strana 14 / 26 Čtení ze souboru Opět musíme načíst knihovnu fstream. Vstupní proud pak deklarujeme jako ifstream. 1 # include < iostream > 2 # include < fstream > 3 int main (){ 4 std :: string slovo ; 5 std :: ifstream in; 6 in. open (" temp. txt "); 7 if (in. is_open ()) { 8 while ( in >> slovo ) std :: cout << slovo << " "; 9 std :: cout << std :: endl ; 10 in. close (); 11 } 12 }

Textový soubor Strana 15 / 26 Název souboru v proměnné Pokud je proměnná obsahující název souboru pole znaků, je vše v pořádku. Pokud se jedná o instanci třídy string, je nutné použít metodu c str(). Od C++11 funguje i klasický string. 1 # include < iostream > 2 # include < fstream > 3 int main (){ 4 std :: string jmenosouboru = " ahoj. txt "; 5 std :: ifstream in; 6 in. open ( jmenosouboru. c_str ()); 7 if (in. is_open ()) { 8... 9 } 10 }

Textový soubor Strana 16 / 26 Triviální kopie souboru po znacích 1 int main () { 2 std :: ifstream from (" soubor1. txt "); 3 std :: ofstream to(" soubor2. txt "); 4 5 char ch; 6 while ( from. get (ch )) 7 to.put (ch ); 8 9 from. close (); 10 to. close (); 11 }

Textový soubor Strana 17 / 26 Režimy práce se souborem Slouží k nastavení režimu čtení nebo zápisu. Příklad syntaxe: 1 std :: ofstream out ; 2 out. open (" pokus. txt ",ios_base :: app...); in otevře soubor pro čtení (výchozí pro čtení, není nutné psát). out otevře soubor pro zápis (výchozí pro zápis, není nutné psát). ate po otevření hledej konec souboru. app přidej text na konec souboru. trunc zkrat existující soubor na nulovou délku. binary binární režim.

Textový soubor Strana 18 / 26 Skoky v souboru seekg(position) skok na pozici ve výstupním proudu. seekp(position) skok na pozici ve vstupním proudu. seekg(skok, pozice) skok o zadaný počet bytů (výst.). seekp(skok, pozice) skok o zadaný počet bytů (vst.). Identifiktory pozice: beg začátek souboru. end konec souboru. cur aktuální pozice. 1 // prepis 2. bod v souboru s daty 2 in. seekg ( sizeof ( Point3D ), ios_base :: beg ); 3 // bude se cist 3. bod v poradi 4 in. seekp (2* sizeof ( Point3D ), ios_base :: beg );

Textový soubor Strana 19 / 26 Obosměrná práce se souborem 1 // priklad vymeni stare cislo za nove podle ID 2 // 164 585-555 -3490 3 while ( iodata. good ()) { 4 int id; 5 string number ; 6 // nacte nove id a provede kontrolu 7 iodata >> id; 8 if ( id == searchedid ) { 9 // skok na soucasnou pozici cteni 10 iodata. seekp ( iodata. tellg ()); // tellg vrati pozici 11 // zapsani nove hodnoty 12 iodata << " " << innewnumber ; 13 break ; // chtelo by udelat lepe 14 } 15 iodata >> number ;

Binární soubor Strana 20 / 26 Obsah přednášky 1 Vstup dat do programu 2 Terminál 3 Textový soubor 4 Binární soubor 5 XML

Binární soubor Strana 21 / 26 Binární soubory Nedají se normálně číst, zapisují data ve formátu jako jsou v paměti. Problém s přenosem těchto souborů mezi platformami. Přínosem je vyšší rychlost práce.

Binární soubor Strana 22 / 26 Zápis do binárního souboru Pro zápis do binárního souboru lze použít nap. funkci write. Kopíruje určitý počet bajtů (znaků) od pozice, na kterou ukazuje ukazatel. 1 int pole [4]={1,2,3,4}; 2 3 std :: ofstream out ; 4 out. open (" vystup. dat ", ios_base :: binary ); 5 6 if ( out. is_open ()) { 7 out. write (( char *) pole, sizeof ( pole )); // pretyp. 8 out. close (); 9 } else 10 std :: cout << " Nepodarilo se otevrit!" << std :: endl ;

Binární soubor Strana 23 / 26 čtení z binárního souboru Používá se funkce read: 1 read ( const char * buf, streamsize poet ); 1 char pole [4]; 2 3 std :: ifstream in; 4 in. open (" vstup. dat ",ios_base :: binary ); 5 6 if (in. is_open ()) { 7 in. read (( char *) pole, sizeof ( pole )); // pretypovani 8 in. close (); 9 } else 10 std :: cout << " Nepodarilo se otevrit!" << std :: endl ;

XML Strana 24 / 26 Obsah přednášky 1 Vstup dat do programu 2 Terminál 3 Textový soubor 4 Binární soubor 5 XML

XML Strana 25 / 26 XML soubory (nezkouší se) XML je jednoznačný trend v oblasti přenosu a ukládní dat. Proč je XML tak zajímavé/používané? 1 <? xml version =" 1.0 " encoding ="ISO -8859-1 "?> 2 <notes > 3 <note > 4 <to >Tove </to > 5 <from >Jani </ from > 6 < heading > Reminder </ heading > 7 <body >Don t forget me this weekend! </ body > 8 </note > 9 <note > 10... 11 </note > 12 </ notes >

XML Strana 26 / 26 XML soubory Existuje řada metod pro zpracování XML (SAX, SAX2, DOM, XMLWriter,...). Nejvznamnějšími z těchto metod jsou verze SAX a DOM parserů. Pro C/C++ existují knihovny, které umožňují automatické zpracování XML: Qt, libxml2, Xerxes, expat, Arabica, aj. (http://www.ibm.com/developerworks/xml/library/ x-ctlbx.html) Osobně považuji práci s XML v C++ za méně komfortní než ve skriptovacích jazycích (přísná typovost C++).