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



Podobne dokumenty
Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

Programowanie w językach wysokiego poziomu

Biblioteka standardowa - operacje wejścia/wyjścia

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

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

Argumenty wywołania programu, operacje na plikach

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

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

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

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

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

7 Przygotował: mgr inż. Maciej Lasota

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

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

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

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

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

Programowanie Procedurale. Pliki w języku C++

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

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

Programowanie w językach

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

Podstawy programowania w języku C++

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

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

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

Podstawy programowania w języku C++

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Pliki. Operacje na plikach w Pascalu

Strumienie i pliki. Programowanie Proceduralne 1

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

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

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

Wykład PASCAL - Pliki tekstowe

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

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

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

Podstawy programowania w języku C++

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

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

Podstawy programowania w języku C++

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

Struktury. Przykład W8_1

Ghost in the machine

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

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

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

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

Tablice, funkcje - wprowadzenie

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

Programowanie Proceduralne

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

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

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Języki i metody programowania I

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

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

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

dr inż. Jarosław Forenc

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

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

Pliki wykład 2. Dorota Pylak

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Podstawy programowania C. dr. Krystyna Łapin

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Programowanie strukturalne i obiektowe

Podstawy i języki programowania

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

Łącza nienazwane(potoki)

Ćwiczenie 1. Wprowadzenie do programu Octave

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Operacje wejścia/wyjścia odsłona pierwsza

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Co nie powinno być umieszczane w plikach nagłówkowych:

Klasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Zaliczenie przedmiotu:

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Transkrypt:

Ćwiczenie nr 8 Temat: Operacje na plikach - zapis i odczyt danych. Zagadnienia: Zasady pracy na plikach dyskowych. otwarcie pliku do odczytu i zapisu (tryb otwarcia), wykonanie operacji odczytu i zapisu, zamknięcie otwartego pliku. 1. Zasady pracy na plikach dyskowych Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę: a) otwarcie pliku w odpowiednim trybie (do zapisu, odczytu, zapisu i odczytu), b) wykonanie operacji zapisu lub odczytu, c) zamknięcie otwartego pliku. a) otwarcie pliku Operację otwarcia pliku wykonujemy za pomocą funkcji fopen. Funkcja ta posiada dwa parametry: pierwszy - nazwę pliku, drugi - tryb otwarcia. Jeżeli operacja otwarcia powiodła się funkcja zwraca uchwyt do pliku wykorzystywany później w operacjach zapisu, odczytu i zamknięcia pliku. Jeżeli wystąpił błąd otwarcia pliku funkcja zwraca wartość NULL. Tryb otwarcia pliku podajemy w postaci łańcucha tekstowego składającego się z odpowiednich składowych. Łańcuchy tekstowe identyfikujące tryb otwarcia przedstawione zostały w tabeli 1. Tabela 1. Tryby otwarcia pliku. Tekst Opis r tylko do odczytu w a tylko do zapisu. Jeżeli plik istniał wcześniej - zostanie nadpisany (poprzednie dane zostaną utracone). dopisywanie do końca pliku. Jeżeli plik nie istniał wcześniej zostanie utworzony. r+ do zapisu i odczytu dla istniejących wcześniej plików w+ do zapisu i odczytu dla nieistniejących wcześniej plików - plik zostanie utworzony. Jeżeli plik istniał wcześniej - zostanie nadpisany (poprzednie dane zostaną utracone). a+ dopisywanie do końca pliku. Jeżeli plik nie istniał wcześniej zostanie utworzony. Dodatkowo możemy zdefiniować rodzaj pliku: tekstowy (t) lub binarny (b).

Przykładowa operacja: FILE *out; out = fopen("raport.txt", "wt") otworzy plik tekstowy o nazwie raport.txt w trybie do zapisu. W innym przykładzie: FILE *out; out = fopen("c:\\terefere.bin", "r+b") otworzy plik binarny (ciąg bajtów) o nazwie terefere.bin na dysku C: do zapisu i odczytu istniejącego pliku - jeżeli plik nie istnieje funkcja zwróci NULL. W celu zabezpieczenia programu przed niewłaściwym działaniem (odwołaniem do zerowego uchwytu) należy sprawdzić poprawność otwarcia pliku, np.: if ((out = fopen("raport.txt", "wt"))== NULL) fprintf(stderr, "Nie mozna otworzyc pliku.\n"); W tym ćwiczeniu korzystamy z operacji działających na plikach z pakietu standardowych operacji wejścia/wyjścia (plik nagłówkowy stdio.h) - fopen, fprintf, fscanf, fread, fwrite, fclose itd. Operacje te korzystają z niskopoziomowych funkcji: open, read, write, close itd. z pliku nagłówkowego io.h - z tej grupy operacji także możemy skorzystać ale są one trudniejsze w użyciu i mniej praktyczne. b) operacje zapisu lub odczytu, W zależności od rodzaju danych (tekstowe, binarne) używamy funkcji: do zapisu danych tekstowych Funkcja fprintf, np.: fprintf(out,"\nprzyklad raportu z programu\n\n"); gdzie: out - uchwyt do pliku otwartego do zapisu. Działanie identyczne jak znanej funkcji printf. Dodatkowo dochodzi pierwszy parametr (właśnie out). Funkcja fputs, np.: fputs("\n To jest tekst zapisywany do pliku \n", out); gdzie: out - uchwyt do pliku otwartego do zapisu. do odczytu danych tekstowych Funkcja fscanf, np.:

fscanf(in, "%s", bufor); gdzie: in - uchwyt do pliku otwartego do odczytu; bufor - tablica znakowa; funkcja odczyta jedno słowo tekstu z pliku do bufora - tablicy. Takie wywołanie czyta tekst do momentu napotkania znaku spacji lub końca linii (eol). Działanie identyczne jak znanej funkcji scanf. Dodatkowo dochodzi pierwszy parametr (in). Funkcja fgets, np.: fgets(bufor, 512, in); gdzie: in - uchwyt do pliku otwartego do odczytu; bufor - tablica znakowa; funkcja odczyta jedną linię tekstu (do napotkania end-of-line) z pliku nie dłuższą niż 512 bajtów (wielkość bufora) do bufora - tablicy. do zapisu danych binarnych funkcja fwrite, np.: struct osoba ; osoba student; fwrite(&student, sizeof(osoba), 1, plik); gdzie: plik - uchwyt do pliku otwartego do zapisu; Funkcja zapisuje do pliku (uchwyt plik) jeden rekord o wielkości wyznaczonej przez sizeof(osoba) ze zmiennej student typu osoba. Pierwszy parametr to wskaźnik na bufor z którego dane zapisujemy do pliku. do odczytu danych binarnych funkcja fread, np.: // definicja struktury osoba typedef struct osoba; osoba student; fread(&student, sizeof(osoba), 1, plik); gdzie: plik - uchwyt do pliku otwartego do odczytu; Funkcja czyta z pliku (uchwyt plik) jeden rekord o wielkości wyznaczonej przez sizeof(osoba) do

zmiennej student typu osoba. Pierwszy parametr to wskaźnik na bufor do którego dane pobieramy z pliku. UWAGA!!! Funkcje wymienione powyżej to jedynie kilka najczęściej używanych operacji na pliku. Istnieje jeszcze kilkanaście innych. c) zamknięcie otwartego pliku. Zawsze po zakończeniu pracy na pliku należy zamknąć otwarty plik, np.: fclose(out); gdzie: out - uchwyt do pliku otwartego w dowolnym trybie; 2. Przykłady Przykład 1. Zapis do pliku tekstowego. #include <conio.h> FILE *out; float pi = 3.1415; int i = 100; char znak = 'A'; // otwarcie pliku tekstowego do zapisu if ((out = fopen("raport.txt", "wt"))== NULL) fprintf(stderr, "Nie mozna otworzyc pliku.\n"); // fprintf - zapis do pliku out fprintf(out,"\nprzyklad raportu z programu\n\n"); fprintf(out,"wydruk zmiennej typu float pi = %6.4f \n",pi); fprintf(out,"wydruk zmiennej typu int i = %3i \n",i); fprintf(out,"wydruk zmiennej typu char znak = %c \n",znak); fprintf(out,"\n---- Autor: Hans (C) 2011 ----\n\n"); // zamkniecie pliku fclose(out); printf("\ndane zostaly zapisane do pliku raport.txt"); getch();

Przykład 2. Odczyt z pliku tekstowego #include <conio.h> FILE *in; char bufor[512]; // otwarcie pliku tekstowego do odczytu: rt if ((in = fopen("raport.txt", "rt"))== NULL) fprintf(stderr, "\nblad otwarcia pliku dyskowego!\n"); printf("\n--------- zawartosc pliku raport.txt-------------\n"); // odczyt z pliku while (feof(in)==0) // feof - end of file (koniec pliku) fgets(bufor, 512, in); // odczyt jednej linii tekstu printf("%s",bufor); printf("\n-------------------------------------------------\n"); // zamkniecie pliku fclose(in); getch(); Przykład 3. Zapis do pliku binarnego. #include <stdlib.h> #include <string.h> // memset // definicja struktury osoba typedef struct osoba; FILE *plik; int n, i; osoba ludzie[100]; memset (ludzie, 0, sizeof(ludzie)); // wyczyszczenie tablicy ludzie printf("zapisywanie rekordow do pliku\n\r"); printf("ile rekordow chcesz zapisac? :\n"); scanf("%i",&n);

// otwarcie pliku do zapisu - handler: uchwyt pliku if ((plik = fopen("records.dat", "wb")) == NULL) printf("blad otwarcia pliku\n"); // ustawienie pozycji w pliku na poczatek fseek(plik, 0L, SEEK_SET); for (i = 1; i<=n; i++) printf("\n Imie:"); scanf("%s",ludzie[i].imie); printf(" Nazwisko:"); scanf("%s",ludzie[i].nazwisko); printf(" Wiek:"); scanf("%i",&ludzie[i].wiek); // zapis jednego rekordu do pliku fwrite(&ludzie[i], sizeof(osoba), 1, plik); fclose(plik); system("pause"); Przykład 4. Odczyt z pliku binarnego. #include <stdlib.h> #include <string.h> // definicja struktury osoba typedef struct osoba; FILE * plik; int n, licznik=-1; osoba ludzie[100]; printf("\n\rprogram odczytuje liste rekordow z pliku records.dat\n\r"); memset (ludzie, 0, sizeof(ludzie)); // wyczyszczenie tablicy ludzie // otwarcie pliku do odczytu - plik: uchwyt pliku if ((plik = fopen("records.dat", "rb")) == NULL) printf("blad otwarcia pliku\n");

// ustawienie pozycji w pliku na poczatek fseek(plik, 0L, SEEK_SET); // odczyt kolejnych rekordow while (1) licznik++; // odczyt jednego rekordu fread(&ludzie[licznik], sizeof(osoba), 1, plik); if (feof(plik)) break; // wyjscie z petli jezeli koniec pliku printf("\n\r Nr rekordu:%i\n\r",licznik); printf(" Imie: %s\n\r", ludzie[licznik].imie); printf(" Nazwisko: %s\n\r", ludzie[licznik].nazwisko); printf(" Wiek: %i\n\r", ludzie[licznik].wiek); ; printf("\n\rodczytano %i rekord(y)ow\n\r", licznik); fclose(plik); system("pause"); 3. Zadania do wykonania na zajęciach lub w domu: 1. Napisać program zliczający ilość wystąpień w pliku tekstowym wybranego słowa - podanego na początku z klawiatury, np.: zliczający wystąpienia słowa printf w kodzie programu zapisanego w pliku. 2. Napisać program wyznaczający sumę podzielników całkowitych danej z klawiatury liczby naturalnej (zadanie znane z wcześniejszych ćwiczeń). Rozbudować program o możliwość zapisu do pliku tekstowego raportu z wszystkich operacji wykonywanych przez program. 3. Napisać program obliczający pierwiastki rzeczywiste równania kwadratowego: ax 2 + bx + c = 0 (zadanie z ćwiczenia nr 1). Rozbudować program o możliwość zapisu do pliku tekstowego raportu z wszystkich operacji wykonywanych przez program.