PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Podobne dokumenty
Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

EXAMPLES of file operations using the library <stdio.h>

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Biblioteka standardowa - operacje wejścia/wyjścia

Pliki. Informacje ogólne. Obsługa plików w języku C

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Pliki. Informacje ogólne. Obsługa plików w języku C

W języku C każdy plik fizyczny jest ciągiem bajtów, z których każdy może być niezależnie odczytany. Borland 01234

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Programowanie w językach wysokiego poziomu

Programowanie Procedurale. Pliki w języku C++

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Operacje na plikach (niskiego poziomu) < IO.H >

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania w języku C++

7 Przygotował: mgr inż. Maciej Lasota

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Programowanie w językach

C Operacje na plikach

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Podstawy programowania w języku C++

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

tablica: dane_liczbowe

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Argumenty wywołania programu, operacje na plikach

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

Podstawy programowania w języku C++

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Strumienie i pliki. Programowanie Proceduralne 1

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Wykład PASCAL - Pliki tekstowe

2 Przygotował: mgr inż. Maciej Lasota

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Ćwiczenie nr 8. Temat: Operacje na plikach - zapis i odczyt danych.

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

Pliki. Operacje na plikach w Pascalu

Kier. MTR Programowanie w MATLABie Laboratorium

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Język C i C++. Podstawy. Zagadnienia do opanowania. Przykład 1. (modyfikuj kod, aby zrealizować punkty 5., 7.)

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Podstawy Programowania.

Programowanie Proceduralne

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

do instrukcja while (wyrażenie);

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

x szereg(x)

5 Przygotował: mgr inż. Maciej Lasota

Języki i metody programowania I

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Polecenia wewnętrzne:

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat: Operacje na plikach. Pliki tekstowe i binarne. Faza otwarcia, zapisu/odczytu i zamknicia pliku.

Podstawy Programowania

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C zajęcia nr 5

Stałe, tablice dynamiczne i wielowymiarowe

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Ghost in the machine

Programowanie strukturalne i obiektowe

Wykład 4. Tablice. Pliki

Podstawy programowania w języku C++

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

#include <iostream.h> #include <conio.h>

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

I. Podstawy języka C powtórka

Programowanie i struktury danych

Pytania sprawdzające wiedzę z programowania C++

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Operacje wejścia/wyjścia (odsłona druga) - pliki

Pliki wykład 2. Dorota Pylak

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Transkrypt:

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h> Pliki TEKSTOWE zawierające ciągi liczb: TXT- 1: Kalkulator 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

Przykład TXT-1: Kalkulator (wersja bez kontroli błedów) Plik wejściowy: dane.txt 20.5 2.5 Plik wyjściowy: wynik.txt 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 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); // 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); 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

Przykład TXT-2: Kalkulator (wersja z kontrolowaniem błędów plikowych) double a,b,suma; FILE* plik = fopen("dane.txt", "rt"); if( plik==null ) printf("blad otwarcia pliku danych!"); return; int ilosc_odczytanych; ilosc_odczytanych = fscanf(plik,"%lf %lf",&a,&b); if( ilosc_odczytanych!= 2 ) printf("blad wczytywania danych!"); return; suma = a + b; printf("wynik sumowania: %.2f + %.2f = %.2f\n\n",a,b,suma); plik = fopen("wynik.txt","wt"); if( plik==null ) printf("blad otwarcia pliku wyników!"); return; int rezultat_zapisu; rezultat_zapisu = fprintf(plik,"%.2f",suma); if( rezultat_zapisu==eof ) printf("blad zapisywania wyniku!"); return; printf("wynik zostal zapisany w pliku \"wynik.txt\""); 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 1 1 2 5 5-4 -500-50 Plik wyjściowy: sumy.txt 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 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!"); // 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); 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 7-2 1.5 5 Rezultat: wydruk na ekranie 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 FILE* plik; // otwarcie tekstowego pliku danych do odczytu plik=fopen("dane.txt", "rt"); if( plik==null) printf("blad otwarcia pliku danych!"); 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); // wyświetlenie wyniku przetwarzania (ilości, sumy, średniej) na ekranie if(licznik==0) printf("nie wczytano zadnej liczby. Nie mozna policzyc sredniej"); 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); M. Piasecki: METODY PROGRAMOWANIA (2) 5 (W3) Przykłady operacji plikowych

Przykład TXT-5: Plikowe operacje dla tablicy liczb <long> // Program tworzy tablicę liczb long, losuje i wyświetla jej zawartość, // a następnie zapisuje wszystkie liczby z tej tablicy do nowego pliku tablica_liczb.txt #include <stdlib.h> const ROZM_TAB_A = 10; long tab_a[rozm_tab_a]; // losowanie wartości kolejnych elementów tablicy tab_a za pomocą funkcji random for( int i=0; i<rozm_tab_a; i++) tab_a[i] = random(201) -100; // kontrolne wyświetlenie wartości wszystkich liczb z tablicy tab_a na ekranie for(int i=0; i<rozm_tab_a; i++) printf("tab[%2d]=%4ld\n", i, tab_a[i] ); // zapis wartości elementów tablicy do pliku tekstowego FILE* plik = fopen("tablica_liczb.txt", "wt"); for( int i=0; i<rozm_tab_a; i++) fprintf(plik,"%4ld\n", tab_a[i] ); // Program wczytuje liczby z pliku tekstowego do tablicy tab_b // a następnie wyświetla zawartość tablicy na ekranie const ROZM_TAB_B = 15; long tab_b[rozm_tab_b]=0; // otwarcie obu plików: odczytywanego dane.txt i zapisywanego wyniki.txt printf("\nodczyt z pliku i wyswietlenie zawartosci tablicy"); FILE* plik = fopen("tablica_liczb.txt", "rt"); // iteracyjny odczyt kolejnych liczb z kontrolowaniem zakresu tablicy (co krótsze?) int ilosc_wczytanych=0; while( ilosc_wczytanych<rozm_tab_b && fscanf(plik,"%ld",&tab_b[ilosc_wczytanych]) ==1 ) ilosc_wczytanych++; // kontrolne wyświetlenie zawartości tablicy tab_b po zakończeniu odczytu printf("\nilosc odczytanych liczb = %d\n",ilosc_wczytanych); for(int i=0; i<ilosc_wczytanych; i++) printf("tab[%2d]=%4ld\n", i, tab_b[i] ); M. Piasecki: METODY PROGRAMOWANIA (2) 6 (W3) Przykłady operacji plikowych

Przykład TXT- 6: Filtrowanie kopiowanie liczb w/g zadanego kryterium Plik wejściowy: liczby.txt 71 4-12 58 Plik wyjściowy: dodatnie.txt 71 4 58 Plik wyjściowy: ujemne.txt -12 // Program rozdziela (kopiuje) liczby odczytywane z pliku liczby.txt // do dwóch nowo utworzonych plików dodatnie.txt oraz ujemne.txt FILE* plik, *plik_dodatnich, *plik_ujemnych; // jednoczesne otwarcie trzech plików: odczytywanego i dwóch wynikowych plik=fopen("liczby.txt", "rt"); plik_dodatnich=fopen("dodatnie.txt", "wt"); plik_ujemnych=fopen("ujemne.txt", "wt"); // sprawdzenie poprawności otwarcia plików if( plik && plik_dodatnich && plik_ujemnych ) float liczba; // wczytywanie kolejnych liczb z pliku wejściowego liczby.txt while( fscanf(plik,"%f ",&liczba)==1 ) if(liczba>0) fprintf(plik_dodatnich,"%.8f ",liczba); fprintf(plik_ujemnych,"%.8f ",liczba); // zakończenie operacji kopiowania zamknięcie plików fclose(plik_dodatnich); fclose(plik_ujemnych); M. Piasecki: METODY PROGRAMOWANIA (2) 7 (W3) Przykłady operacji plikowych

Przykład TXT-7: Usunięcie wybranych liczb ze środka pliku tekstowego Plik wejściowy: liczby.txt -2 4 7 9 15 pomocniczy.txt Plik wyjściowy: liczby.txt -2 4 15 // Program usuwa z wnętrza pliku tekstowego liczby nie spełniające zadanego kryterium // ( w tym przypadku: 5 usuwana_liczba 10 ) // poprzez kopiowanie wartości liczb do nowego pliku, z pominięciem usuwanych FILE* plik = fopen("liczby.txt", "rt"); FILE* plik_pomocniczy = fopen("pomocniczy.txt", "wt"); if( plik && plik_pomocniczy ) float liczba; while( fscanf(plik,"%f ",&liczba)==1 ) if( liczba<5 liczba>10 ) fprintf(plik_pomocniczy,"%.3f\n",liczba); // liczby z przedziału [5,10] nie są kopiowane, // moŝna nic z nimi nie robic (pominąć) // lub kontrolnie wydrukować na ekranie konsoli printf("%.3f\n",liczba); fclose(plik_pomocniczy); // fizyczne usunięcie z dysku początkowego pliku liczby.txt remove("liczby.txt"); // zmiana nazwy pomocniczego pliku (zawierającego wybrane liczby) na liczby.txt rename("pomocniczy.txt","liczby.txt"); Usunięcie-skasowanie pliku z dysku: remove( nazwa_usuwanego_pliku ); Zmiana nazwy pliku na dysku: rename( stara_nazwa, nowa_nazwa ); M. Piasecki: METODY PROGRAMOWANIA (2) 8 (W3) Przykłady operacji plikowych

Przykład BIN-1: Zapis ciągu liczb z klawiatury do pliku binarnego Plik wejściowy: stdin Plik wyjściowy: liczby.dat ( 4 8 bajtów ) 1 2500-18 1000000 0x00 0x00 0x00 0x00 0x00 0x00 0xF0 0x3F 0x00 0x00 0x00 0x00 0x00 0x88 0xA3 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x32 0xC0 0x00 0x00 0x00 0x00 0x80 0x84 0x2E 0x41 Zawartość pliku liczby.dat oglądanego za pomocą edytora tekstowego (na przykład za pomocą systemowego Notatnika ) wygląda następująco: Plik wyjściowy: liczby.dat ( 4 8 znaków ) ñ?ł@2ŕ.a // Program iteracyjnie wczytuje kolejne liczby z klawiatury do zmiennej bufor // i natychmiast kopiuje zawartość zmiennej bufor (8 bajtów) do pliku binarnego FILE* plik = fopen( "liczby.dat", "wb" ); if(plik) // pobranie ilości wczytywanych liczb (w powyŝszym przykładzie ilość=4 ) int ilosc_liczb; printf("podaj ile liczb double chcesz zapisac w pliku binarnym: "); scanf("%d", &ilosc_liczb); double bufor; for(int i=0; i<ilosc_liczb; i++) printf("\npodaj kolejna liczbe: "); scanf("%lf",&bufor); fwrite(&bufor, sizeof(double), 1, plik); Zapis binarny: fwrite( adres_zmiennej, rozmiar_bloku, ilość_bloków, plik ) M. Piasecki: METODY PROGRAMOWANIA (2) 9 (W3) Przykłady operacji plikowych

Przykład BIN-2: Odczyt i wyświetlenie całej zawartości pliku binarnego // Program iteracyjnie pobiera (wczytuje) z pliku liczby.dat // kolejne 8-bajtowe porcje danych, do zmiennej pomocniczej bufor typu double // a następnie wyświetla je na ekranie (zapisuje je do pliku tekstowego stdout ) FILE* plik = fopen( "liczby.dat", "rb" ); if(!plik ) printf("blad otwarcia pliku"); double bufor; int licznik=0; // iteracyjna pętla pobierania kolejnych porcji o rozmiarze sizeof(double) while( fread(&bufor, sizeof(double), 1, plik)==1 ) // wyświetlenie odczytanej liczby na ekranie konsoli printf("%f\n", bufor ); // Tu moŝe nastąpić dalsze przetwarzanie odczytanej liczby // np sumowanie: suma=suma+bufor; // lub poszukiwanie wartości minimalnej: // if( bufor<minimum) minimum=bufor; // W tym przykładzie jest tylko samo zliczanie ilości wczytanych liczb: licznik++; printf("\nkoniec odczytu. Ilosc odczytanych liczb = %d",licznik); Odczyt binarny: fread( adres_zmiennej, rozmiar_bloku, ilość_bloków, plik ) Funkcje fread i fwrite zwracają ilość poprawnie przetworzonych bloków, tę zwracaną wartość wykorzystuje się do kontrolowania błędów odczytu/zapisu oraz do sterowania zakończeniem pętli odczytującej dane z pliku. M. Piasecki: METODY PROGRAMOWANIA (2) 10 (W3) Przykłady operacji plikowych

Przykład BIN-3: Odczyt wskazanej liczby ze środka pliku binarnego // Program przesuwa wskaźnik pliku ( głowicę odczytującą ) // na wskazane miejsce (odległość w bajtach względem początku pliku) // a następnie pobiera 8-bajtów do zmiennej liczba typu double // i wyświetla jej zawartość na ekranie konsoli FILE* plik = fopen( "liczby.dat", "rb" ); if(!plik ) printf("blad otwarcia pliku"); long pozycja_liczby=30; // polecenie przesunięcia wskaźnika pliku fseek(plik, pozycja_liczby*sizeof(double), SEEK_SET); // odczytanie 8 bajtów ze wskazanego miejsca pliku do zmiennej liczba double liczba; if( fread(&liczba, sizeof(double), 1, plik)==1 ) printf("odczytana liczba = %f\n",liczba); printf("blad odczytu liczby z pliku"); printf("\nkoniec odczytu. Nacisnij ENTER"); fflush(stdin); Przykład BIN-4: Dopisanie trzech liczb (2,4,6) na końcu pliku binarnego FILE* plik = fopen( "liczby.dat", "ab" ); if(!plik ) printf("blad otwarcia pliku"); double liczba; for(int i=1; i<=3; i++) liczba = i*2; fwrite(&liczba, sizeof(double), 1, plik); "a" jak "append" M. Piasecki: METODY PROGRAMOWANIA (2) 11 (W3) Przykłady operacji plikowych

Przykład BIN-5: Zamiana-nadpisanie wartości liczby w pliku binarnym // Program przesuwa wskaźnik pliku na zadaną pozycję względem początku pliku // a następnie zapisuje tam 8-bajtów ze zmiennej nowa_wartosc typu double FILE* plik = fopen( "liczby.dat", "r+b" ); "+" bo będzie modyfikacja if(plik) // odczytanie wielkości pliku (i wyliczenie ilości liczb double) fseek(plik,0,seek_end); long dlugosc_pliku = ftell(plik); long ilosc_liczb = dlugosc_pliku / sizeof(double); printf("ten plik zawiera %ld liczb <double>\n\n", ilosc_liczb); // ustalenie (wczytanie) pozycji modyfikowanej liczby long pozycja_nadpisywanej; printf("podaj pozycję nadpisywanej liczby: "); scanf("%ld", &pozycja_nadpisywanej); // sprawdzenie czy zadana pozycja jest poprawna ( znajduje się wewnątrz pliku) if(pozycja_nadpisywanej>=0 && pozycja_nadpisywanej<ilosc_liczb) double nowa_wartosc; printf("\npodaj nowa wartosc liczby: "); scanf("%lf",&nowa_wartosc); // przesuniecie wskaźnika pliku i zapis nowej wartości do pliku fseek(plik, pozycja_nadpisywanej*sizeof(double), SEEK_SET); fwrite(&nowa_wartosc, sizeof(double), 1, plik); Przykład BIN-6: Filtrowanie kopiowanie liczb w/g zadanego kryterium //skopiowanie do drugiego pliku binarnego tylko liczb dodatnich double liczba; FILE* plik = fopen( "liczby.dat", "rb" ); FILE* plik_dodatnich = fopen("dodatnie.dat", "wb"); if( plik!=null && plik_dodatnich!=null ) while( fread(&liczba, sizeof(double), 1, plik)==1 ) if(liczba>0) fwrite(&liczba, sizeof(double), 1, plik_dodatnich); fclose(plik_dodatnich); M. Piasecki: METODY PROGRAMOWANIA (2) 12 (W3) Przykłady operacji plikowych