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

Podobne dokumenty
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

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

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

Biblioteka standardowa - operacje wejścia/wyjścia

Podstawy programowania w języku C++

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

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. Informatyka. Standardowe strumienie wejścia i wyjścia

Funkcje zawarte w bibliotece < io.h >

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

Programowanie w językach wysokiego poziomu

Funkcje zawarte w bibliotece < io.h >

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

Argumenty wywołania programu, operacje na plikach

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]

7 Przygotował: mgr inż. Maciej Lasota

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

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

Programowanie Proceduralne

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

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

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

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

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 Procedurale. Pliki w języku C++

Programowanie proceduralne INP001210WL rok akademicki 2018/19 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

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

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

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

Strumienie i pliki. Programowanie Proceduralne 1

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

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

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

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

Podstawy programowania w języku C++

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

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

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

Struktury. Przykład W8_1

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

Ghost in the machine

Wstęp do Programowania, laboratorium 02

lekcja 8a Gry komputerowe MasterMind

2 Przygotował: mgr inż. Maciej Lasota

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

Tablice, funkcje - wprowadzenie

Lab 9 Podstawy Programowania

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

Podstawy programowania w języku C++

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

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

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

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

Programowanie w językach

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

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

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

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

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Pliki. Operacje na plikach w Pascalu

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

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Wstęp do wskaźników w języku ANSI C

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

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

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

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

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

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki. Programowanie Proceduralne 1

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

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

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

Podstawy programowania w C++

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

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

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

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

Wskaźniki. Informatyka

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 2. Funkcje, operatory i wyrażenia.

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

1. Wprowadzanie danych z klawiatury funkcja scanf

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

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

1 Podstawy c++ w pigułce.

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

Transkrypt:

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

Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli czytać lub pisać z/do pliku, musi być on 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. Drugi argument, również tekstowy, 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", 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 fp powinien być wcześniej zadeklarowany jako: Deklaracja ta mówi, że 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); 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.

Laboratorium Podstaw Informatyki Strona 3 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: 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;

Laboratorium Podstaw Informatyki Strona 4 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 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(a): Napisz funkcję hist(char *tekst, int *htab_sl, int *htab_d), która wyznaczy histogramy (liczbę wystąpień) wszystkich małych literek i umieści te informacje w tablicy htab_sl i cyfr w htab_d w podanym tekście. Funkcja jako pierwszy parametr dostaje wskaźnik do tekstu, który ma być analizowany, a jako drugi i trzeci wskaźnik do tablicy, gdzie mają być umieszczone histogramy. Program, który będzie wywoływał funkcję hist ma następnie wypisać otrzymane histogramy w formie tabelki. Przykładowo: int hl[ z - a +1], hd[10]; /*deklaracja potrzebnych tablic*/ hist("aacdd", hl, hd); /*wywołanie funkcji*/ po zakończeniu funkcji tablica hl, będzie zawierać następujące pozycje niezerowe hl[0]=2, hl[2]=1, hl[3]=2; bo w podanym tekście wystąpiły dwie litery a, jedna c i dwie d. Zadanie 4(b): Zmodyfikować zadanie 4(a) tak, 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.

Laboratorium Podstaw Informatyki Strona 5 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.