Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
PRZYKŁADY OPERACJI PLIKOWYCH
z wykorzystaniem biblioteki <stdio.h> Pliki TEKSTOWE zawieraj ą ce ci ą gi liczb: sumowanie dwóch liczb zapisanych w pliku tekstowym ( fopen , fscanf , fprintf , fclose ) - TXT- 2: Program TXT-1 rozbudowany o kontrolę błędów operacji plikowych ( bł ę dy : otwarcia pliku, odczytu i zapisu danych liczbowych ) TXT- 3: Sumator kolejnych par liczb pobieranych z pliku tekstowego ( iteracyjne przetwarzanie ciągu liczb pętlą while( fscanf(...)==2 ){...} ) TXT- 4: Iteracyjne przetwarzanie ciągu liczb wczytywanego z pliku ( fscanf ) ( zliczanie ilości liczb, sumy liczb, wartości średniej ) TXT- 5: Plikowe operacje dla tablicy liczb ( fprintf , fscanf , zapisywanie i odczytywanie elementów tablicy) TXT- 6: Filtrowanie – kopiowanie liczb wybranych w/g zadanego kryterium ( fscanf , fprintf ) TXT- 7: Usunięcie wybranych liczb ze środka pliku tekstowego ( poprzez kopiowanie pliku z pominięciem usuwanych wartości ) Pliki BINARNE zawieraj ą ce ci ą gi liczb: BIN-1: Zapis ciągu liczb z klawiatury do pliku binarnego ( fwrite ) BIN-2: Odczyt i wyświetlenie całej zawartości pliku binarnego ( fread ) BIN-3: Odczyt wskazanej liczby ze środka pliku binarnego ( fseek , fread ) BIN-4: Dopisanie trzech liczb (2,4,6) na końcu pliku binarnego ( a - append ) BIN-5: Zamiana-nadpisanie wartości liczby w pliku binarnym ( fseek , ftell , fwrite ) BIN-6: Filtrowanie – kopiowanie liczb w/g zadanego kryterium za pomocą pętli: while( fread(...)==1 ) if( ... ) fwrite(...); M. Piasecki: METODY PROGRAMOWANIA (2) - 1 - (W3) Przykłady operacji plikowych TXT- 1: Kalkulator Przykład TXT-1: Kalkulator (wersja bez kontroli błedów) Plik wej ś ciowy: dane.txt Plik wyj ś ciowy: wynik.txt 20.5 2.5 23.00 // Program oblicza sum ę dwóch liczb rzeczywistych typu double. // Sumowane liczby s ą pobierane z istniej ą cego pliku dyskowego ”dane.txt” // Wynik sumowania jest zapisywany nowo tworzonego pliku ”wynik.txt” #include <stdio.h> void main() double a,b,suma; // odczyt dwóch liczb <double> z pliku tekstowego do zmiennych <a> i <b> FILE * plik; plik= fopen ("dane.txt", "rt" ); fscanf (plik,"%lf %lf",& a ,& b ); fclose (plik); // wy ś wietlenie wyniku sumowania na ekranie konsoli (zapis do pliku stdout) suma = a + b; printf("Wynik sumowania: %.2f + %.2f = %.2f\n\n",a,b,suma); // zapis wyniku sumowania, tzn. zmiennej <suma>, do pliku tekstowego plik= fopen ("wynik.txt", "wt" ); fprintf (plik,"%.2f", suma ); fclose (plik); printf("Wynik zostal zapisany w pliku \"wynik.txt\""); } Wykorzystywane funkcje: fopen - otwarcie pliku, parametry "rt" oznaczają „read” „text” parametry "wt" oznaczają „write” „text” fscanf - odczyt danych z pliku tekstowego, parametr "%lf" oznacza odczyt liczby do zmiennej double fprintf - zapis danych do pliku tekstowego, parametr "%f" oznacza zapis liczby float lub double parametr ".2" oznacza dokładność 2 miejsc po przecinku fclose - zamknięcie pliku M. Piasecki: METODY PROGRAMOWANIA (2) - 2 - (W3) Przykłady operacji plikowych { getchar(); Przykład TXT-2: Kalkulator (wersja z kontrolowaniem bł ę dów plikowych) #include <stdio.h> void main() { double a , b , suma ; FILE* plik = fopen ("dane.txt", "rt"); 7 if( plik==NULL ) 7 { printf("Blad otwarcia pliku danych!"); getchar(); return; } else { int ilosc_odczytanych; ilosc_odczytanych = fscanf (plik,"%lf %lf",& a ,& b ); 7 fclose(plik); if( ilosc_odczytanych != 2 ) 7 { printf("Blad wczytywania danych!"); getchar(); return; } else { suma = a + b; printf("Wynik sumowania: %.2f + %.2f = %.2f\n\n",a,b,suma); plik = fopen ("wynik.txt","wt"); 7 if( plik==NULL ) 7 { printf("Blad otwarcia pliku wyników!"); getchar(); return; } else { int rezultat_zapisu; rezultat_zapisu = fprintf (plik,"%.2f", suma ); 7 fclose(plik); if( rezultat_zapisu==EOF ) 7 { printf("Blad zapisywania wyniku!"); getchar(); return; } else { printf("Wynik zostal zapisany w pliku \"wynik.txt\""); getchar(); return; } } } } } M. Piasecki: METODY PROGRAMOWANIA (2) - 3 - (W3) Przykłady operacji plikowych Przykład TXT-3: Sumator par liczb pobieranych z pliku tekstowego Plik wej ś ciowy: dane.txt Plik wyj ś ciowy: sumy.txt 1 1 2 5 5 -4 -500 -50 2 7 1 -550 // Program oblicza sumy kolejnych par liczb całkowitych typu int . // Sumowane liczby s ą pobierane z istniej ą cego pliku dyskowego ”dane.txt” // Wyniki sumowania s ą zapisywane w kolejnych wierszach nowego pliku ”sumy.txt” #include <stdio.h> void main() { int a,b,suma; FILE* plik_danych, *plik_sum ; // otwarcie obu plików: odczytywanego ”dane.txt” i zapisywanego”sumy.txt” plik_danych = fopen ("dane.txt", "rt"); plik_sum = fopen ("sumy.txt", "wt"); // sprawdzenie poprawno ś ci otwarcia plików if( plik_danych==NULL || plik_sum==NULL ) { printf("Blad otwarcia plikow!"); getchar(); else { // iteracyjne przetwarzanie kolejnych par poprawnie odczytanych liczb while ( fscanf (plik_danych,"%d%d",& a ,& b ) ==2 ) { suma = a + b; fprintf ( plik_sum ,"%d\n", suma ); fprintf(stdout,"%d\n",suma); fprintf(stdout,"Koniec programu",suma); getchar(); } fclose (plik_danych); fclose (plik_sum); } M. Piasecki: METODY PROGRAMOWANIA (2) - 4 - (W3) Przykłady operacji plikowych } } Przykład TXT-4: Iteracyjne przetwarzanie ci ą gu liczb z pliku tekstowego Plik wej ś ciowy: dane.txt Rezultat: wydruk na ekranie 7 -2 1.5 5 Ilosc wczytanych liczb = 4 Suma wczytanych liczb = 11.500 Wartosc srednia wynosi = 2.875 // Program oblicza: ilo ść , sum ę oraz warto ść ś redni ą kolejnych liczb typu float . // odczytywanych p ę tl ą while( fscanf(...)==1 ) {...} // z pliku tekstowego ”dane.txt” #include <stdio.h> void main() { FILE* plik; // otwarcie tekstowego pliku danych do odczytu plik = fopen ("dane.txt", "rt" ); if( plik==NULL) { printf("Blad otwarcia pliku danych!"); getchar(); } else { float liczba, suma=0 ; int licznik=0 ; // p ę tla iteracyjnego odczytywania i przetwarzania kolejnych liczb float while ( fscanf (plik,"%f",& liczba ) ==1 ) { licznik++ ; suma += liczba ; printf("%d odczytana liczba = %7.2f\n",licznik,liczba); fclose (plik); // wy ś wietlenie wyniku przetwarzania (ilo ś ci, sumy, ś redniej) na ekranie if( licznik==0 ) printf("Nie wczytano zadnej liczby. Nie mozna policzyc sredniej"); else { float srednia=suma/licznik ; printf("\nIlosc wczytanych liczb = %d \n", licznik); printf("Suma wczytanych liczb = %.3f\n", suma); printf("Wartosc srednia wynosi = %.3f\n", srednia); } getchar(); } M. Piasecki: METODY PROGRAMOWANIA (2) - 5 - (W3) Przykłady operacji plikowych } } |
Menu
|