ZPRO cvičení 7 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague November 16, 2017
Outline I 1 Outline 2 Práce se soubory 3 Zápis cvičení 4 Čtení cvičení 5 Domácí úkol 6 Zdroje
Práce se soubory
Práce se soubory Umožňuje: Uložit data z běžícího programu do souboru a naopak
Práce se soubory Umožňuje: Uložit data z běžícího programu do souboru a naopak Je dobré si předem rozmyslet jestli již máme existující soubor, nebo ho chceme teprve vytvořit. Jestli z něj budeme číst, přepisovat ho, nebo do něj přidávat.
Otevření souboru pro zápis 1 # include < fstream > 2... 3 // open a file in write mode. 4 ofstream vystup ; 5 vystup. open (" soubor. txt "); 6 7 // write inputted data into the file. 8 vystup << nejaka_data << endl ; 9 // close the opened file. 10 vystup. close ();
Otevření souboru pro čtení 1 # include < fstream > 2... 3 // open a file in read mode. 4 ifstream vstup ; 5 vstup. open (" soubor. txt "); 6 7 vstup >> data ; 8 9 // close the opened file. 10 vstup. close ();
Příklad přečtení celého souboru 1 string slovo ; 2 ifstream in; 3 in. open (" temp. txt "); 4 if (in. is_open ()) { 5 while ( in >> slovo ) 6 cout << slovo << " "; 7 cout << endl ; 8 }
Zápis cvičení 1 Warm up: Vytvorte prazdny soubor pomoci funkce pro otevreni souboru. Nezapomeneme na uzavreni souboru. Soubor najdete v adresari 2 Vepiste do souboru vase (muzete lhat) jmeno, prijmeni a datum narozeni 3 Napiste do souboru suda cisla od 10 do 100 4 Vytvorte cvicne pole (nize) a vypiste ho do souboru. 5 (Bonus) Vypiste do souboru data vsech dnu v roce. Predpokladejme, ze kazdy mesic ma 30 dni. 1 int cv_pole1 [] = {0, 1, 1, 2, 3, 5, 8, 7}
cv1 1 ofstream vystup ; 2 vystup. open (" soubor1. txt "); 3 4 // close the opened file. 5 vystup. close ();
cv2 1 ofstream vystup ; 2 vystup. open (" soubor2. txt "); 3 4 vystup << " Martin " << ; 5 vystup << " Flusser " << endl ; 6 vystup << 1<< << 10<< << 2000; 7 vystup. close ();
cv3 1 ofstream vystup ; 2 vystup. open (" soubor3. txt "); 3 4 for ( int i = 10; i <=100; i +=2) 5 vystup <<i<< endl ; 6 7 vystup. close ();
cv4 1 int cv_pole1 [] = {0, 1, 1, 2, 3, 5, 8, 7} 2 int velikost = 8; 3 4 ofstream vystup ; 5 vystup. open (" soubor4. txt "); 6 7 for ( int i = 0; i< velikost ;i ++) 8 vystup << cv_pole1 [i]<< endl ; 9 10 vystup. close ();
Čtení cvičení 1 Nactete data ze souboru se jmenem a datem narozeni. Vypiste. 2 Napiste kod, ktery postupne nacte a vypise vsehny textove retezce ze souboru. 3 Nactete pole ze souboru. Uvazujme, ze jeho velikost zname. Aplikujte na jiz vytvoreny soubor s polem. Pro kontrolu pouzijte funkci pro vypis pole z predchoziho cviceni.
cv1 1 ifstream vstup ; 2 vstup. open (" soubor2. txt "); 3 char jmeno [20], prijmeni [ 30]; 4 int d, m, r; 5 vstup >> jmeno >> prijmeni >>d>>m>>r; 6 cout << jmeno <<" " << prijmeni << endl << d < <". 7 vstup. close ();
cv2 1 ifstream vstup ; 2 vstup. open (" soubor3. txt "); 3 4 char text [40]; 5 if ( vstup. is_open ()) { 6 while ( vstup >> text ) 7 cout << text << " "; 8 cout << endl ; 9 } 10 vstup. close ();
cv3 1 int velikost = 8; 2 int cv_pole1 [ velikost ]; 3 4 ifstream vstup ; 5 vstup. open (" soubor4. txt "); 6 7 for ( int i = 0; i< velikost ;i ++) 8 vstup >> cv_pole1 [i]; 9 vstup. close (); 10 11 vypis_ pole ( cv_ pole1, velikost );
Domácí úkol Napište program, který vypíše do souboru datum všech dní v roce s ohledem na různý počet dní v každém měsíci. Rok si můžete zvolit. Počty dní v měsíci, můžete vkládat například souborem, ze kterého je budete postupně načítat. Také můžete využít pole a jeho indexaci, nebo můžete postupovat uplně jinak.
Zdorje 1 http :// www.cs.vsb.cz/ ochodkova / courses / ALGI / 2 proudy_cpp. pdf 3 https :// www. tutorialspoint. com / cplusplus / 4 cpp_files_strea ms. htm 5 http :// kmlinux. fjfi. cvut.cz /~ fabiadav / cecko / 6 poznamky -k-jazyku -c/ soubory 7 http :// www. builder.cz/ rubriky /c/c - -/ ucime -se 8 -c -19 - dil - prace -se - soubory -i - -155698 cz 9 http :// www. cplusplus. com / reference / cstdio / 10 printf /