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

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

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

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

Biblioteka standardowa - operacje wejścia/wyjścia

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

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

Funkcje zawarte w bibliotece < io.h >

Podstawy programowania w języku C++

Programowanie w językach wysokiego poziomu

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

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

Funkcje zawarte w bibliotece < io.h >

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

Argumenty wywołania programu, operacje na plikach

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

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

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

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

7 Przygotował: mgr inż. Maciej Lasota

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

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

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

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

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

Programowanie Procedurale. Pliki w języku C++

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Programowanie Proceduralne

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

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

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.

Strumienie i pliki. Programowanie Proceduralne 1

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

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

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

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

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

2 Przygotował: mgr inż. Maciej Lasota

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

Ghost in the machine

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

Stałe i zmienne znakowe. Stała znakowa: znak

Tablice, funkcje - wprowadzenie

Wstęp do Programowania, laboratorium 02

Podstawy programowania w języku C++

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

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

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania w języku C++

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

1. Wprowadzanie danych z klawiatury funkcja scanf

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

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

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Struktury. Przykład W8_1

Programowanie w językach

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

lekcja 8a Gry komputerowe MasterMind

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. 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

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

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

Lab 9 Podstawy Programowania

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

Pliki. Operacje na plikach w Pascalu

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

Wskaźniki. Programowanie Proceduralne 1

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

1 Podstawy c++ w pigułce.

Wskaźniki w C. Anna Gogolińska

Zmienne, stałe i operatory

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

Podstawy programowania w C++

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

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

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

Podstawy programowania w języku C++

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

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.

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

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Struktury, unie, formatowanie, wskaźniki

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

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

Podstawy programowania skrót z wykładów:

Języki i metodyka programowania. Wskaźniki i tablice.

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

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

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

Wykład 4. Tablice. Pliki

Transkrypt:

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

Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli czytać lub pisać coś z/do pliku, plik musi być otwarty przy pomocą funkcji fopen. Wywołanie funkcji fopen w programie ma postać: fp = fopen(name, mode); Pierwszym argumentem fopen jest nazwa pliku w postaci tekstowej. Argument drugi (mode) informuje o trybie dostępu do pliku. Dopuszcza się następujące tryby: czytanie "r", pisanie "w", i dopisywanie "a". Dodatkowo można dołączyć literkę "b" (np. tak "rb"), która zapewni, że plik zostanie otwarty w trybie binarnym. Tryb ten używany jest do otwierania plików zawierających dane binarne tj np. obrazy (*.bmp, *.jpg), dźwięki (*.wav, *.mp3), pliki wykonywalne (*.exe). Funkcja fopen zwraca wskaźnik do pliku (ściśle do struktury opisującej otwarty plik), który przypisujemy do zmiennej fp. Oczywiście zmienna fp powinna być wcześniej zadeklarowana: Deklaracja ta mówi, że zmienna fp jest wskaźnikiem do obiektu typu FILE. Wywołanie funkcji fopen może się zakończyć błędem, wtedy funkcja zwraca wartość NULL. Gdy plik jest już otwarty można z niego czytać lub pisać. Najprostszymi funkcjami przeznaczonymi do tego są fgetc i fputc. Funkcja fgetc zwraca kolejny znak wczytany z pliku np. c = fgetc(fp); Gdy nie ma już więcej znaków funkcja kończy działanie i zwraca wartość EOF. Wartość EOF jest stałą zdefiniowaną w pliku nagłówkowym. Jej wartością zazwyczaj jest -1, stąd typem wartości zwracanym przez funkcję fgetc musi być int. Z tego powodu zmienna c również powinna być typu int. Funkcja fputc działa przeciwnie, tzn. wstawia znak c do pliku fp: fputc(c, fp); Oprócz funkcji fputc i fgetc przydatne są funkcje fprintf oraz fscanf będące odpowiednikami funkcji printf i scanf. Przykładowo, instrukcja fprintf(f1, "masa obiektu wynosi: %f [Kg]\n", masa); powoduje zapisanie do pliku identyfikowanego przez zmienną f1 tekstu "masa obiektu wynosi: ", następnie wypisywana jest wartość wyrażenia zmiennoprzecinkowego (w naszym wypadku wartość zmiennej masa), potem jeszcze "[Kg]" i na końcu, kursor przesuwany jest do nowej linii. Podobnie, instrukcja fscanf(f2, "%s%d", txt, &x); gdzie char txt[100]; int x; powoduje wczytanie z pliku, identyfikowanego przez zmienną f1, ciągu znaków (zakończonego znakiem białym) i liczby dziesiętnej. Na poniższych dwóch przykładach zanalizujemy działanie powyższej instrukcji. Przypadek 1. W pliku znajduje się ciąg znaków "abc10" potem jedna spacja potem kolejny ciąg znaków tj. "11". Zawartość pliku pokazana jest poniżej: abc10 11 Wykonanie instrukcji fscanf z parametrami jak powyżej spowoduje umieszczenie w zmiennej txt ciągu znaków "abc10", zaś w zmiennej x liczby 11.

Laboratorium Podstaw Informatyki Strona 3 Przypadek 2. W pliku znajduje się ciąg znaków "abc" potem jedna spacja potem kolejny ciąg znaków tj. "10", potem jedna spacja, a potem jeszcze "11". Zawartość pliku pokazana jest poniżej: abc 10 11 Wykonanie instrukcji fscanf z parametrami jak powyżej spowoduje umieszczenie w zmiennej txt ciągu znaków "abc", zaś w zmiennej x liczby 10. Przykład: Zadaniem programu jest wyświetlenie zawartości tekstowego pliku "plik.txt" na ekran. Uwaga: plik należy wcześniej utworzyć korzystając z edytora ASCII (np. notatnik). #include <stdio.h> main( ) { fp = fopen("c:\\plik.txt", "r"); if(fp == NULL) { printf("nie udalo się otworzyc pliku: c:\\plik.txt \n"); return -1; while((c=fgetc(fp))!=eof) putc(c, stdout); fclose(fp); return 0; stdout jest predefiniowanym strumieniem wyjściowym otwieranym automatycznie po uruchomieniu programu. Innym tym razem wejściowym (klawiatura) predefiniowanym strumieniem jest stdin. Zadanie 1: Napisz program kopiuj, który skopiuje zadany plik wejściowy na plik wyjściowy używając omówionych powyżej funkcji. Zadanie 2: Napisz program, który dla podanego pliku tekstowego (np. poprzedniego "plik.txt") policzy histogram, czyli częstość wystąpienie poszczególnych literek w nim. Uwaga warto skorzystać z wyników zadania z poprzednich zajęć. Często czytanie po jednym znaku jest nie wygodne. Dlatego do czytania i pisania większych porcji danych z/do pliku służą odpowiednio funkcje fread i fwrite. Deklaracja funkcji fread zamieszczona w zbiorze nagłówkowym stdio.h ma postać: size_t fread(void *ptr, size_t size, size_t n, FILE *stream); Oznacza ona, że funkcja fread czyta, z pliku określonego przez stream (to samo co fp poprzednio, ale inna nazwa - popatrz na typ), podaną ilość elementów (n) o jednakowej wielkości (size). Funkcja zwraca ilość faktycznie przeczytanych elementów - nie bajtów. Znaczenie argumentów jest następujące:

Laboratorium Podstaw Informatyki Strona 4 void *ptr wskaźnik na blok pamięci do którego zostaną zapisane przeczytane dane size_t size rozmiar pojedynczego elementu size_t n ilość elementów do przeczytania FILE *stream wskaźnik do pliku z którego będziemy czytać Deklaracja funkcji fwrite zamieszczona w zbiorze nagłówkowym stdio.h ma postać size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream); Funkcja fwrite zapisuje, do pliku określonego przez stream, podaną ilość elementów (n) o jednakowej wielkości (size). Funkcja zwraca ilość zapisanych elementów. Znaczenie argumentów jest następujące: const void *ptr wskaźnik na blok pamięci zawierający dane, które mają być zapisane do pliku przez funkcję fwrite. Słówko const oznacza, że funkcja nie zmienia podczas swojego działania zawartości przekazanego jej bufora. size_t size rozmiar pojedynczego elementu, które będą zapisywane size_t n ilość elementów do zapisania FILE *stream wskaźnik do pliku, do którego będziemy zapisywać Przykład: Zadaniem programu jest przeczytanie z podanego pliku dziesięciu bajtów i wyświetlenie ich na ekran w kodzie hex i w postaci znaków. #include <stdio.h> main( ) { int i, j; char buf[10]; fp = fopen("c:\\plik.txt", "r"); if(fp == NULL) { printf("nie udalo się otworzyc pliku: c:\\plik.txt \n"); return -1; i = fread(buf, 1, 10, fp); j=0; while(i--) { printf("znak %c ma kod %X (hex)\n", buf[j], buf[j]); j++; fclose(fp); return 0; Zadanie 3: Napisać program kopiuj, który skopiuje plik wejściowy na plik wyjściowy. Do rozwiązania zadania użyć funkcji fwrite i fread, które będą pisać/czytać większymi, ustalonymi wcześniej porcjami (np. po

Laboratorium Podstaw Informatyki Strona 5 10 bajtów). Zauważ, że długość kopiowanego pliku nie musi być (i na ogół nie jest) całkowitą wielokrotnością przyjętej porcji czytania. Zastanów się jak rozwiązać ten problem. Popularna funkcja printf ma swój odpowiednik fprintf, który wyprowadza wynik działania nie na ekran lecz do pliku. Przykładowe użycie wyjaśnia zarazem sposób przekazywania parametrów: fprintf(fp, "znak %c ma kod %X (hex)\n", X, X ); oczywiście FILE *fp jest wskaźnikiem do otwartego wcześniej pliku. Zadanie 4: Zmodyfikować tak zadanie 2, aby histogram był wyprowadzany równocześnie do podanego pliku jak i na ekran. W tym celu należy napisać funkcję DrukujHist(int *hist, FILE *fp), w której ciele należy użyć funkcji fprintf. Funkcja DrukujHist będzie w programie wołana 2 raz: raz z parametrem fp wskazującym na plik dyskowy, a drugi raz równym stdout, aby wyświetlić wynik na ekranie. Zadanie 5: Rozszerzyć napisany program z zadania 3, tak aby mógł być użyty do konkatenacji (t.j. sklejania) kilku plików. Nazwy plików do sklejenia będą zadawane w tablicy tekstów, np. char *fn[] = { plik1, plik2, wynik, NULL;. Przy tak zadeklarowanej tablicy fn[0] jest tekstem (tj. numerem komórki pamięci w której umieszczony jest pierwszy znak tekstu) plik1, fn[2] wskazuje na wynik, a fn[3] jest NULL. Widać więc jaki powinien być warunek na zakończenie pętli przeglądającej taką tablicę. Przy takiej zawartości tablicy do pliku wynik najpierw zostanie wpisana zawartość pliku plik1, a potem dopisana zawartość pliku plik2.