C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016 ...
Author: Nadzieja Markowska
0 downloads 0 Views

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016

2 Zajęcia [12.04.2016]  Debuggowanie (Dev-C++?)  Operacje na plikach  Zadanie domowe

3 Debuggowanie  Dwuklik -> breakpoint  Add watch -> zmienna  Kompilator –g (Tools > Compiler Options)  F5

4 Operacje na plikach 1. Dyrektywa file stream -> #include 2. Uchwyt (obiekt) do przechowania obsługi pliku -> std::ifstream plik; 3. Otwarcie pliku – ścieżka -> plik.open( "C:\\odczyt.txt" ); 4. Ścieżka względna -> („odczyt.txt”); 5. Ścieżka bezwzględna -> „C:\\odczyt.txt”); 6. Backslash w pełnej ścieżce! 7. Weryfikacja otwarcia 8. Przekazanie i modyfikacja zawartości 9. Zapis 10. Zamknięcie 11. Weryfikacja zamknięcia

5 #include bool wyswietl(std::string nazwapliku) { std::ifstream plik; plik.open(nazwapliku.c_str()); if(!plik.good()) return false; std::string wiersz; while(std::getline(plik, wiersz)) { std::cout

6 Operator „>>” – spróbuj zrobić taki program Dane można wczytywać operatorem >>, biały znak zawsze jest pomijany (wskazówka: isspace) Stwórz plik: 1 dodac 2 2 dodac 3 Podpowiedzi: int a, c; string b; Podpowiedź: plik >> a >> b >> c; funkcja(int l1, string z, intl2) {if z=„dodac” dodaj(l1, l2)}

7 Operator „>>” – spróbuj zrobić taki program Dane można wczytywać operatorem >>, biały znak zawsze jest pomijany (wskazówka: isspace) Stwórz plik: 1 dodac 2 2 dodac 3 Podpowiedzi: int a, c; string b; Podpowiedź: plik >> a >> b >> c; funkcja(int l1, string z, intl2) {if z=„dodac” dodaj(l1, l2)}

8 IOS – tryby odczytu void open(const char * nazwa_pliku, ios_base::openmode tryb_otwarcia_pliku); ios::app (append - dopisywanie danych do pliku) Ustawia wewnętrzny wskaźnik zapisu pliku na jego koniec. Plik otwarty w trybie tylko do zapisu. Dane mogą być zapisywane tylko i wyłącznie na końcu pliku. ios::ate (at end) Ustawia wewnętrzny wskaźnik pliku na jego koniec w chwili otwarcia pliku. ios::binary (binary) Informacja dla kompilatora, aby dane były traktowane jako strumień danych binarnych, a nie jako strumień danych tekstowych. ios::in (input - wejście/odczyt) Zezwolenie na odczytywanie danych z pliku. ios::out (output - wyjście/zapis) Zezwolenie na zapisywanie danych do pliku. ios::trunc (truncate) Zawartość pliku jest tracona, plik jest obcinany do 0 bajtów podczas otwierania.

9 IOS cd Otwarcie do zapisu i odczytu: std::fstream plik; plik.open( "nazwa_pliku.txt", std::ios::in | std::ios::out );

10 Zapis std::fstream plik("nazwa_pliku.txt", std::ios::out); std::string napis; getline(std::cin, napis); plik.write( & napis[0], napis.length() );

11 Zapis #include using namespace std; int main() { string const nazwaPliku("C:/pliczek.txt"); ofstream mojStrumien(nazwaPliku.c_str()); if(mojStrumien) { mojStrumien

12 Sposoby odczytu Linijka po linijce: string linia; getline(strumien, linia); Zmiennymi: double liczba; strumien >> liczba string slowo; strumien >> slowo; Char by char: char a; strumien.get(a);

13 Poruszanie się po pliku Seekg(); Seekp(); strumien.seekp(liczbaZnakow, pozycja); strumien.seekp(10, ios::beg); //przesun 10 znaków od początku pliku i ustaw tu kursor Tellg(); Tellp(); ofstream plik("C:/sciezka/pliczek.dat"); int pozycja = plik.tellp(); cout

14 Zadanie domowe  1. Napisz program sprawdzający długość w bajtach podanego z palca pliku [1 pkt]  Wprowadź nazwę pliku: plik1.txt  Długość plik1.txt wynosi: 133  Podpowiedź: seekg, tellg  2. Przerób zadanie domowe ze strukturami na operacje na plikach [4pkt]  Pierwsze uruchomienie: dodanie pracowników z parametrami do pliku  Drugie uruchomienie: jeżeli plik istnieje – wyświetl dane i w menu zaproponuj dopisanie kolejnego pracownika  Sortowanie przez wiek, stawkę, wynagrodzenie nadal obowiązuje  Wykorzystaj append, seek, tellp, może tablica…?