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

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

Programowanie w językach wysokiego poziomu

Biblioteka standardowa - operacje wejścia/wyjścia

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

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

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

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

7 Przygotował: mgr inż. Maciej Lasota

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

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

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

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

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

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

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++

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

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

Programowanie Proceduralne

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

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

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

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

Argumenty wywołania programu, operacje na plikach

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

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

Podstawy programowania w języku C++

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

Strumienie i pliki. Programowanie Proceduralne 1

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

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

Ghost in the machine

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

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

Programowanie Procedurale. Pliki w języku C++

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

Struktury. Przykład W8_1

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

Tablice, funkcje - wprowadzenie

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

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

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Pliki wykład 2. Dorota Pylak

Wskaźniki. Programowanie Proceduralne 1

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

#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 ); }

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

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

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

#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 ); }

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

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

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

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

2 Przygotował: mgr inż. Maciej Lasota

Pliki. Operacje na plikach w Pascalu

Kier. MTR Programowanie w MATLABie Laboratorium

Podstawy programowania w języku C++

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Poprzedni wykład [ ] :

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

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

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

Podstawy programowania w języku C++

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

dr inż. Jarosław Forenc

Wstęp do Programowania, laboratorium 02

Programowanie w językach

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

Wykład PASCAL - Pliki tekstowe

Pliki wykład 2. Dorota Pylak

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

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

Programowanie strukturalne i obiektowe

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

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

1. Wprowadzanie danych z klawiatury funkcja scanf

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

Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1

Lab 9 Podstawy Programowania

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

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Podstawy programowania. Wykład Funkcje raz jeszcze. Biblioteka standardowa. Krzysztof Banaś Podstawy programowania 1

Programowanie Proceduralne

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Funkcja (podprogram) void

tablica: dane_liczbowe

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

Podstawy Programowania Podstawowa składnia języka C++

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Języki i metody programowania I

Inne darmowe! kompilatory języka C działające m.in. po systemem WINDOWS:

Transkrypt:

Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną długość, a informacja w nim zapisana jest ciągiem zer i jedynek (bitów). Ze względu na sposób interpretowania zawartości pliku wyróżnić możemy: pliki tekstowe - poszczególne bajty w pliku można zinterpretować jako dane alfanumeryczne (znaki), zapisane przy pomocy określonego kodowania (np. ASCII). Takie pliki są "czytelne" dla człowieka po otwarciu w podstawowym edytorze tekstu (Notatnik, vim) lub bezpośrednim wypisaniu zawartości przy pomocy polecenia powłoki (type-windows, cat-linux). pliki binarne - poszczególne bajty w pliku mają dowolne wartości, niekoniecznie są interpretowalne jako znaki alfanumeryczne. Taki plik jest zazwyczaj nieczytelny dla człowieka po otwarciu w podstawowym edytorze tekstu. Struktura informacji w plikach binarnych jest ściśle określona przez oprogramowanie, które zapisuje tego typu pliki (np. określoną strukturę ma plik MS Word, MS Excel itp.). Programista chcący odczytać i właściwie zinterpretować w swoim programie dane z pliku binarnego, powinien znać jego strukturę. Obsługa plików w języku C Standardowa biblioteka wejścia/wyjścia języka C udostępnia funkcje do operowania na plikach, tj. odczytu i zapisu danych z plików tekstowych i binarnych. Sposób pracy z plikami w języku C jest następujący: 1. Otwarcie pliku o określonym nazwie w określonym trybie (odczyt, zapis, dopisywanie) Funkcja fopen, prototyp: FILE *fopen(const char *filename, const char *mode); Funkcja fopen otwiera plik, którego nazwa podana jest w pierwszym argumencie. Drugim jest łańcuch znaków zwierający litery oznaczające sposób otwarcia pliku: "r" - otwiera plik do czytania "r+" - otwiera plik do czytania i nadpisywania (aktualizacja) "w" - otwiera plik do nadpisywania (zamazuje starą treść) "w+" - otwiera plik do nadpisywania i czytania "a" - otwiera plik do dopisywania (jeśli plik nie istnieje, to jest tworzony) "a+" - otwiera plik do dopisywania i odczytu (jeśli plik nie istnieje, to jest tworzony) "t" - otwiera plik w trybie tekstowym "b" - otwiera plik w trybie binarnym Litery można ze sobą łączyć, np. "rwb" albo "wt". Funkcja zwraca wskaźnik do pliku (FILE *) lub NULL, gdy pliku nie udało się otworzyć (nie istnieje, jest już otwarty w innym programie itp..

Przykład wywołania: FILE *f = fopen("dane.txt", "rt"); 2. Wykonywanie operacji odczytu/zapisu Odczyt/zapis danych z pliku tekstowego Funkcje do formatowanego odczytu/zapisu. int fscanf(file *stream, const char *format,...); int fprintf(file *stream, const char *format,...); Funkcje działają tak jak scanf i printf, przy czym jako pierwszy argument przyjmują wskaźnik do pliku uzyskany w punkcie 1 (ogólnie - wskaźnik do strumienia danych). //odczyt liczby całkowitej z pliku int i; char lan[] = "Operacje plikowe" ; fscanf(f, "%d", &i); //zapis łańcucha znaków do pliku fprintf(f, "%s", lan); Odczyt/zapis łańcucha znaków char *fgets(char *str, int size, FILE *stream); int fputs (const char *s, FILE *stream); char lan_do_zapisu[] = "Operacje plikowe" ; char lan_do_odczytu[80]; //odczyt łańcucha fgets(lan_do_odczytu,f); //zapis łańcucha fputs(lan_do_zapisu,f); Odczyt/zapis pojedynczego znaku int fgetc ( FILE * stream ); int fputc ( int character, FILE * stream ); char znak2; //odczyt znaku

znak2=fgetc(f); //zapis znaku fputc('a',f); Odczyt/zapis danych z pliku binarnego //odczyt size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); //zapis size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); a) zapis łańcucha znaków do pliku binarnego char x[10]="abcdefghij"; FILE *fp; fp=fopen("test.bin", "wb"); fwrite(x, sizeof(x[0]), 10, fp); fclose(fp); b) odczyt liczby całkowitej z pliku binarnego int i; FILE *fp; fp=fopen("test.bin", "rb"); fread(&i, sizeof(i), 1, fp); fclose(fp); Pozostałe funkcje operujące na plikach //funkcja sprawdzająca, czy odczytano już cały plik int feof(file *stream); Przykład //wypisywanie zawartości pliku na konsolę char znak; while (!feof(f)) znak=fgetc(f); printf("%c",znak); //funkcja do zmiany odcztywanej/zapisywanej pozycji w pliku int fseek(file *file, long offset, int mode); //pobranie aktualnej pozycji w pliku long ftell(file *file);

3. Zamknięcie pliku int fclose (FILE *plik); Przykładowe programy wykonujące operacje na plikach a) wypisanie zawartości pliku tekstowego na ekran void main() char znak; FILE *plik= fopen("dane.txt", "rt"); if(!plik) printf("blad otwarcia pliku"); return; while (feof(plik) == 0) znak = fgetc(plik); printf("%c", znak); fclose(plik); // otworzenie pliku do odczytu b) zapis pobranych z klawiatury liczb do pliku tekstowego void main() int liczba; FILE *plik= fopen("liczby.txt", "wt"); if(!plik) printf("blad otwarcia pliku"); return; //wczytanie pierwszej liczby scanf("%d",&liczba); // otworzenie pliku do odczytu //wczytywane są liczby aż do wystąpienia 0 while (liczba!=0) fprintf(plik,"%d",liczba); scanf("%d",&liczba); fclose(plik);

Zadania 1. Napisz program zliczający i wypisujący na ekranie liczbę znaków w pliku tekstowym. 2. Zmodyfikuj program z punktu 1, aby zliczał tylko cyfry. 3. Napisz program wczytujący liczby całkowite (rozdzielone białymi znakami) z pliku tekstowego i obliczający ich sumę. 4. Napisz program wczytujący plik tekstowy i wypisujący na ekran każdy znak dwukrotnie. 5. Rozszerz program z punktu 4, aby znaki były dodatkowo zapisywane do pliku wyjściowego (innego niż wejściowy). 6. Napisz program zapisujący tablicę liczb zmiennoprzecinkowych do pliku tekstowego. 7. Napisz program zapisujący i odczytujący tablicę zmiennych typu strukturalnego z/do pliku.

Biblioteka standardowa 1. qsort (http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/) Sortuje elementy tablicy algorytmem quicksort. /* qsort example */ #include <stdlib.h> int values[] = 40, 10, 100, 90, 20, 25 ; int compare (const void * a, const void * b) return ( *(int*)a - *(int*)b ); int main () int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) printf ("%d ",values[n]); return 0; 2. bsearch (http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/) Wyszukuje element w tablicy. /* bsearch example */ #include <stdlib.h> int compareints (const void * a, const void * b) return ( *(int*)a - *(int*)b ); int values[] = 10, 20, 25, 40, 90, 100 ; int main () int * pitem; int key = 40; pitem = (int*) bsearch (&key, values, 6, sizeof (int), compareints); if (pitem!=null) printf ("%d is in the array.\n",*pitem); else printf ("%d is not in the array.\n",key); return 0;

Zadania 1. Zmodyfikuj programy przykładowe, aby sortowały i wyszukiwały dane w tablicach elementów typu double. 2. Zmodyfikuj programy przykładowe, aby sortowały i wyszukiwały dane w tablicach zdefiniowanych samodzielnie struktur.