Podstawy Programowania - Instytut Informatyki Teoretycznej i

Transkrypt

Podstawy Programowania - Instytut Informatyki Teoretycznej i
Podstawy Programowania
dr Elżbieta Gawrońska
[email protected]
Instytut Informatyki Teoretycznej i Stosowanej
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
1 / 15
Plan wykładu
1
Strumienie plikowe
2
Biblioteka IO
Strumień bł˛edu i strumień logowań
Czyszczenie strumienia
Zabezpieczenie strumienia przed uszkodzeniem
3
Przekierowanie danych ze strumienia
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
2 / 15
Strumienie plikowe
Operacje na plikach I
typy odpowiedzialne za operacje na plikach zdefiniowane sa˛ w bibliotece
fstream (pochodna klasy iostream używana dla plików traktowanych
zarówno jako plik wejściowy, jak i wyjściowy)
do każdego programu, w którym korzysta si˛e z obsługi plików,
udost˛epnianej przez bibliotek˛e iostream, trzeba dołaczyć
˛
dyrektywa˛
preprocesora odpowiedni plik nagłówkowy
ofstream – dla plików wyjściowych,
ifstream – dla plików wejściowych,
zapis do pliku realizuje si˛e przy pomocy zmiennej typu ofstream
(pochodna klasy ostream):
std::ofstream plik;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
3 / 15
Strumienie plikowe
Operacje na plikach I
void open (const char* filename, ios_base::openmode mode
= ios_base::in | ios_base::out);
otwiera plik, którego nazwa˛ jest filename, mode oznacza tryb otwarcia
pliku, domyślnie plik jest otwierany tekstowo, a jego zawartość jest
kasowana przed zapisem, jeżeli plik nie istnieje, zostaje utworzony;
najważniejsze tryby otwarcia pliku:
ios::app
ios::trunc
ios::ate
std::ofstream plik;
plik.open("plik.txt", ios::app);
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
4 / 15
Strumienie plikowe
Operacje na plikach I
operacje zapisu do pliku można wykonywać operatorem << w
identyczny sposób jak na zmiennych cout, cerr, clog:
przykład:
std : : ofstream plik ;
plik . open ( " plik . txt " ) ;
double a = 1 1 . 1 ;
plik << " tekst , liczba = " << a << endl ;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
5 / 15
Strumienie plikowe
Operacje na plikach I
close()
zamyka plik, każdy otwarty plik powinien być zamkni˛ety przed
zakończeniem programu
przykład:
std : : ofstream plik ;
plik . open ( " plik . txt " ) ;
/ / . . . − o p e r a c j e na p l i k u
plik . close ( ) ;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
6 / 15
Strumienie plikowe
Operacje na plikach I
odczyt z pliku realizuje si˛e przy pomocy zmiennej typu ifstream:
std::ifstream plik;
dla zmiennych typu ifstream działaja˛ w podobny sposób funkcje open
oraz close
odczyt ze strumienia plikowego typu ifstream może być zrealizowany
przy pomocy operatora >> lub funkcji get czy getline w identyczny
sposób jak w przypadku strumienia cin:
przykład:
std : : ifstream plik ;
plik . open ( " plik . txt " ) ;
double a ;
plik >> a ;
plik . close ( ) ;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
7 / 15
Strumienie plikowe
Operacje na plikach I
dla wszystkich strumieni plikowych została zdefiniowana funkcja:
bool eof();
zwraca wartość true jeżeli przy operacji na pliku został osiagni˛
˛ ety
koniec pliku (EOF)
operator ! zastosowany wobec strumieni plikowych ma identyczne
zastosowanie jak dla pozostałych strumieni, a sygnalizuje także np.:
bł˛edy wejścia–wyjścia (np. brak miejsca na urzadzeniu
˛
na którym ma
zostać utworzony plik)
brak pliku, który ma zostać otwarty do czytania
przed podj˛eciem próby pisania lub czytania do/z pliku należy
sprawdzić czy plik został pomyślnie otwarty
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
8 / 15
Strumienie plikowe
Biblioteka wejścia–wyjścia
przykład:
ofstream file ;
file . open ( " ala . txt " ) ;
if ( ! file )
cerr << " blad otwarcia pliku !" << endl ;
file << " Ala i As " << endl ;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
9 / 15
Strumienie plikowe
Biblioteka wejścia–wyjścia
Inne funkcje składowe:
bool bad ( ) const;
bool fail ( ) const;
bool eof ( ) const;
bool good ( ) const;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
10 / 15
Biblioteka IO
Strumień bł˛edu i strumień logowań
Biblioteka wejścia–wyjścia I
w bibliotece iostream poza strumieniami cout i cin sa˛ zdefiniowane
także:
cerr – standardowy strumień diagnostyczny (nie buforowany), służy do
odsyłania komunikatów o bł˛edach
clog – standardowy strumień logowań (buforowany), służacy
˛ do obsługi
bł˛edów
operator ! zastosowany wobec strumienia zwraca wartość różna˛ od 0 w
przypadku wystapienia
˛
bł˛edu w pracy ze strumieniem, np.:
przykład:
double a ;
cin >> a ;
if ( ! cin )
std : : cerr << " Blad w pracy ze strumieniem wejsciowym !" ;
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
11 / 15
Biblioteka IO
Czyszczenie strumienia
Biblioteka wejścia–wyjścia I
clear()
czyści stan strumienia (czyści flagi bł˛edów dla strumienia wejściowego,
aby późniejsze operacje I/O wykonywały si˛e poprawnie)
ignore(int n = 1, int delim = EOF)
wyciaga
˛ ze strumienia i ignoruje co najwyżej n znaków do napotkania
znaku delim, n - maksymalna liczba znaków do wyodr˛ebnienia i
zignorowania w strumieniu.
dla strumieni poprzez operator . można wywołać specjalne funkcje
sterujace
˛ praca˛ strumienia, np.:
przykład:
double a ;
cin >> a ;
if ( ! cin ) {
cin . clear ( ) ;
cin . ignore ( 1 0 2 4 , ’\n ’ ) ;
}
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
12 / 15
Biblioteka IO
Czyszczenie strumienia
Biblioteka wejścia–wyjścia I
przykład:
int main ( )
{
double a ;
do {
cout << " Podaj a > 0: " << endl ;
cin >> a ;
if ( ! cin )
{
cin . clear ( ) ;
cin . ignore ( 1 0 0 0 , ’\n ’ ) ;
}
}while ( a <= 0 ) ;
cout << " Podales a = " << a << endl ;
return 0 ;
}
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
13 / 15
Biblioteka IO
Zabezpieczenie strumienia przed uszkodzeniem
Biblioteka wejścia–wyjścia I
uodpornienie programu na bł˛edy, jeśli zamiast liczby użytkownik poda
inny znak
przykład:
while ( ( cin >> liczba ) . fail ( ) ) {
cin . clear ( ) ;
cin . ignore ( INT_MAX , ’\n ’ ) ;
cerr <<" Nieprawidlowe dane ! Powtorz \n" ;
}
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
14 / 15
Przekierowanie danych ze strumienia
Przykład użycia
Przekierowanie ze standardowego strumienia wyjściowego (cout)
./a.out > wynik.txt
./a.out 1> wynik.txt nadpisanie
./a.out 1>> wynik.txt doklejenie do treści już istniejacej
˛
Przekierowanie ze standardowego strumienia bł˛edu i logowań (cerr, cout)
./a.out > wynik.txt
./a.out 2> wynik.txt nadpisanie
./a.out 2>> wynik.txt doklejenie do treści już istniejacej
˛
Przekierowanie ze standardowego strumienia wejścia (cin)
./a.out < dane.txt ostrożnie – brak kontroli
dr Elżbieta Gawrońska (ICIS)
Podstawy Programowania 06
15 / 15

Podobne dokumenty