Język ANSI C Operacje we/wy

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Katarzyna Szafrańska kl. II ti
Wstęp do strumieni danych
Język C/C++ Funkcje.
Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe PO PO - LAB 6 Wojciech Pieprzyca.
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
PASCAL (3) dr Anna Kwiatkowska.
Filip Andrzejewski Remigiusz Chiluta
Systemy rozproszone W. Bartkiewicz
Języki programowania C++
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Przetwarzanie tekstów i AWK Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Tablice.
Ćwiczenie (1) Dostosuj poniższy program do wymogów programu zaliczeniowego #include typedef struct{ char imie[30]; char nazwisko[50]; int rokUrodzenia;
Programowanie w C Wykład 3
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Czytanie listy zmiennych według ich nazw: dyrektywa NAMELIST W części deklaracyjnej: NAMELIST /nazwa/ zmienna_1,zmienna_2,…,zmienna_n Czytanie: READ(wejście,nazwa_listy)
Algorytmy Marek Pudełko
Programowanie obiektowe W2
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
Podstawy programowania
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania w języku C i C++
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Podstawy programowania. Język C i C++– podstawy Temat: 1
Podstawy programowania w języku C i C++
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Pierwsze programy.
Warsztaty programowania w języku Python
GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Podstawy informatyki 2013/2014
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
PL/SQL – dalsza wędrówka
Systemy operacyjne (wiosna 2014)
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
1 argumenty wiersza poleceń: getopt #include /* getopt2.c getopt2.c */ #include int main(int argc, char *argv[]) { int n; int opt; printf("\n argc=%d\n",argc);
Pliki tekstowe – odczyt i zapis Zajęcia 11. Zapis do pliku tekstowego Prosty program pokazujący sposób zapisu do pliku tekstowego: // writing on a text.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
Programowanie I Rekurencja.
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Piotr Kawałek , Mateusz Śliwowski
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
PODSTAWY INFORMATYKI Wykład 3.
Wskaźniki Elżbieta Labocha.
Operacje na plikach w C++
Operacje na plikach w C++
Zapis prezentacji:

Język ANSI C Operacje we/wy Wykład: Programowanie komputerów Prowadzący: dr inż. Sławomir Nowak

Wprowadzenie Operacje wejścia wyjścia dotyczą zarówno typowych operacji na plikach (np. na dysku) jak też operacji elementarnych, jak np. wyświetlanie na ekranie i pobieranie danych z klawiatury. Opisane podejście dotyczy podejścia tzw. proceduralnego, za pomocą strumieni (zgodnie ze standardem Ansi C).

Wprowadzenie Aby korzystać z omawianych mechanizmów należy w nagłówku programu dołączyć plik stdio.h, zawiera on potrzebne funkcje do operacji wejścia-wyjścia. STRUMIENIE są to „zbiory”, z których pobierane są i do których wprowadzane są dane. Jeśli pobieramy dane z klawiatury za pomocą scanf lub wyprowadzamy za pomocą printf (lub innych funkcji), to nie musimy nic wiedzieć o strumieniach, bo w tych funkcjach strumieni są one standartowo „ustawione” na klawiaturę i ekran.

Strumienie standartowe Standartowo zdefiniowane strumienie to: stdin – wejściowy – klawiatura; stdout – wyjściowy – ekran; stderr – komunikatów o błędach – ekran stdprn – strumień drukarnki.

Strumienie standartowe Strumienie mają swoją reprezentację „programistyczną”. Są reprezentowane przez zmienne typu FILE (ściślej – przez wskaźnik na FILE). Czyli FILE jest nowym typem, co oznacza, że możemy deklarować odpowiednie zmienne tego typu (ściślej – wskaźniki).

Deklarowanie strumieni Jeśli chcemy w programie realizować operacje wejścia-wyjścia inne niż standardowe, na przykład na plikach na dysku, musimy zadeklarować wskaźnik do nowego, określonego przez nas strumienia, np.: FILE *strmj

Czynności przy operacjach wejścia-wyjścia Typowa sekwencja operacji wejścia-wyjścia, realizowana za pomocą strumienia polega na: 1. zadeklarowaniu wskaźnika do zmiennej strumieniowej; 2. otwarciu strumienia; 3. operacje na strumieniu (np. zapis i odczyt); 4. zamknięcie strumienia (należy o tym pamiętać, bo inaczej nasze dane mogą „zniknąć”).

Aby z niej skorzystać należy: Otwarcie strumienia Do otwierania strumienia wykorzystuje się funkcję fopen, która zwraca wskaźnik na strumień. Aby z niej skorzystać należy: - mieć zadeklarowany odpowiedni wskaźnik na strumień, - zdecydować się na określony tryb otwarcia pliku (na przykład „tylko do odczytu” - podać nazwę pliku. Logiczne, prawda?

Otwarcie strumienia Przykładowe otwarcie pliku: if (!(strm = fopen(”c:\\teksty\\tekst.txt”,”wb”))) puts (”Blad otwarcia pliku”); Jako parametry podano dwa łańcuchy znakowe: Pierwszy to nazwa pliku Uwaga!: W łańcuchach tekstowych znak ‘\’ oznaczamy jako ‘\\” aby odróżnić go od tzw. znaku specjalnego. Dlatego jest ”c:\\...” a nie ”c:\...” - Drugi oznacza tryb otwarcia pliku. Opisują do dwa znaki. Wskazane jest wykonywanie operacji otwarcia pliku razem z instrukcją if, tak jak na podanym przykładzie. Jeśli otwarcie pliku nie powiodło się, funkcja fopen zwraca wartość NULL, na którą możemy odpowiednio zareagować, na przykład poprzez odpowiedni komunikat.

Otwarcie strumienia - tryby Pierwszy znak oznacza sposób i cel otwarcia: w -> tylko do zapisu; r -> tylko do odczytu; a -> do zapisu na końcu istniejącego już pliku (jak APPEND z Pascal’a) r+ -> otwórz istniejący zbiór do zapisu i odczytu jednocześnie; w+ -> utwórz nowy plik do zapisu i odczytu (stary, jeśli istnieje, zostanie zastąpiony) a+ -> do zapisu i odczytu wskazanego zbioru, lub otworzy nowy plik jeśli nie istnieje. Drugi znak oznacza: b -> tryb binarny t-> tryb tekstowy.

Operacje na strumieniach Do operacji na strumieniu służą różne funkcje. Są one na ogół odpowiednikiem funkcji znanych wcześniej, do wyświetlania na ekranie i odczytu z klawiatury, tylko z dodaną literą f. Ich działanie jest analogiczne z tym, że dane wysyłane są i pobierane z pliku, a nie na ekran i klawiaturę.

Operacje na strumieniach - funkcje int fputc (int c, strm); wysyła do strumienia strm znak c. W przypadku błędu zwraca EOF (o tym później); int fputs (char *s, strm); wysyła do strumienia strm łańcuch tekstowy s. Oznaczenie char *s oznacza łańcuch tekstowy wskazywany przez zmienną s. Błąd zwraca EOF.

Operacje na strumieniach - funkcje int fprintf (strm, ”........”, ....); działa tak jak funkcja printf, tylko łańcuch znakowy zostanie wyprowadzony do strumienia strm. Zwraca EOF jeśli błąd. char* fgets(char *s, strm); działa jak gets, tylko, że odczytuje łańcuch tekstowy ze strumienia strm; int fgetc(strm); działa jak getc, tylko, że odczytuje znak ze strumienia strm; int scanf(strm, ”.....”,...); działa jak scanf, tylko, że odczytuje dane z łańcucha strm;

Operacje na strumieniach - funkcje korzystając z tych funkcji i odwołując się do strumieni standartowych, np. można zrealizować wypisanie łańcucha tekstowego na ekran: #include <stdio.h> int main(void) { char msg[] = "Hello world"; int i = 0; while (msg[i]) fputc(msg[i], stdout); i++; } return 0;

Funkcje feof Do operacji na plikach bardzo przydatna jest funkcja feof(strm) która określa, czy osiągnięty został koniec pliku. Dobrze jest wykorzystać ją razem z instrukcją while podczas odczytu z pliku, kiedy po każdym odczycie sprawdzamy, czy osiągnięty jest koniec pliku. Jeśli podczas ostatniej operacji na strumieniu osiągnięto koniec zbioru (pliku), wtedy zwraca ona wartość 1.

int fclose (nazwa_strumienia); Zamykanie strumieni Zamykanie strumieni jest bardzo proste. Realizowane jest za pomocą funkcji int fclose (nazwa_strumienia); Zamykanie strumienia jest ważne w związku z buforowaniem danych. Można skorzystać z funkcji fcloseall() która automatycznie zamyka wszystkie otwarte strumienia.

Przykłady prostych operacji na plikach Wykorzystanie eof() Otwierany jest plik jako strumień stream (do odczytu), jeśli po odczytaniu z niego jednego znaku osiągnięto koniec pliku, wyświetlany jest komunikat. int main(void){ FILE *stream; stream = fopen("DUMMY.FIL", "r"); fgetc(stream); /*odczytujemy znak, nigdzie go nie zapisujemy */ if (feof(stream)) printf("Osiagnieto koniec pliku\n"); fclose(stream); return 0; }

Przykłady prostych operacji na plikach Program tworzy kopię AUTOEXEC.BAT. Otwiera dwa strumienie, do odczytu in oraz do zapisu out (oba w trybie tekstowym). Następnie w pętli while przepisuje plik znak po znaku. Na końcu zamyka strumienie. int main(void){ FILE *in, *out; if ((in = fopen("\\AUTOEXEC.BAT", "rt"))== NULL) { fprintf(stderr, "Nie można otworzyc pliku.\n"); return 1; } if ((out = fopen("\\AUTOEXEC.BAK", "wt")) == NULL) { fprintf(stderr, "Nie mozna otworzyc pliku.\n"); while (!feof(in)) fputc(fgetc(in), out); fclose(in);fclose(out);return 0;

Przykłady prostych operacji na plikach Prosty przykład wykorzystanie funkcji fscanf do odpowiedniego reagowania na błędy wprowadzania wartości. Wprowadzamy liczbę typu int. Strumień jest określony jako stdin, czyli klawiatura. Komunikat o ewentualnym błędzie wprowadzania jest kierowany do strumienia stderr. #include <stdio.h> int main(void){ int i; printf("Wprowadz liczbe int: "); if (fscanf(stdin, "%d", &i)) printf("The integer read was: %i\n", i); else { fprintf(stderr, "Blad przy wprowadzaniu.\n"); exit(1); } return 0;

Podsumowanie

FILE * strm = fopen(”c:\\teksty\\tekst.txt”,”wb”) NULL -> 0