Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Zajęcia 9 (21/01/2014) ====== ===== Operacje na plikach (strumieniach) ===== **Biblioteka** #include <stdio.h> **Strumień** - zmienna typu FILE* f; **Otwieranie i zamykanie strumienia** FILE *fopen(char *nazwapliku, char *tryb); int fclose (FILE *plik); Tryb: "r" - odczyt, "w" - zapis, "a" - dopisanie na końcu. **Odczyt i zapis formatowany (plik tekstowy)** int fscanf(FILE *plik, char *format, ...); int fprintf(FILE *plik, char *format, ...); **Odczyt całej linii/łańcucha znakowego tekstu z pliku** char * fgets ( char *str, int num, FILE *plik); **Odczyt i zapis pojedynczego znaku** int fgetc(FILE *p); int fputc(char znak, FILE* plik); **Wykrywanie błędów (koniec pliku)** int feof(FILE *plik); Więcej informacji o funkcjach biblioteki **[[http://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#stdio.h|stdio.h]]** **Przykład 1 - Czytanie sekwencji znaków z pliku** <code C> #include<stdio.h> int main() { FILE *plik = NULL; int znak; plik = fopen( "plik.txt", "r" ); if( plik == NULL ) { printf("Wystapil blad otczytu pliku\n"); return 1; } while( feof(plik) == 0 ) { znak = fgetc(plik); if (znak != EOF) printf("%c", znak); } fclose( plik ); return 0; } </code> Plik źródłowy: {{zajecia:pp_2013_2:lab_src:odczyt.c}}\\ Przykładowy tekst: {{zajecia:pp_2013_2:lab_src:plik.txt}}\\ ===== Wczytywanie tekstu ===== Zmodyfikuj powyższy przykład tak aby tekst z pliku ''plik.txt'' został sformatowany na ekranie w taki sposób, że każdy wiersz będzie zawierał ''N'' znaków. Wartość ''N'' podaje użytkownik. **Dane:** liczba całkowita ''N'' oraz plik z tekstem \\ **Wynik:** zawartość pliku wyświetlona na ekranie, gdzie wiersze mają długość ''N'' znaków. **Przykład** n=2 Th e or ig in o f C is ... ===== Wczytywanie tekstu 2 ===== Napisz program, który wyświetli ilość wystąpień każdej litery alfabetu (od ''a'' do ''z'') angielskiego w pewnym pliku tekstowym. Program powinien nie rozróżniać wielkości liter, tzn. znak ''a'' oraz znak ''A'' traktowany jest jako ta sama litera alfabetu. Dodatkowo, niech uzyskany wynik będzie zapisany do pliku o nazwie ''wynik.txt''. **Dane:** pewien plik z tekstem \\ **Wynik:** zastaw liter alfabetu wraz z liczbami wystąpień **Przykład** A 95 B 24 C 44 D 43 E 161 F 25 G 43 H 46 I 89 ... **Możliwe rozszerzenia - wyłącznie dla chętnych** * Niech program prosi o podanie nazwy pliku do analizy * Nie program, obok liczby wystąpień, wyświetla częstość (w procentach) wystąpienia danej litery alfabetu w stosunku do wszystkich liter alfabetu * Niech program wyświetla wynik w kolejności od najczęściej występującego znaku do najrzadziej występującego ===== Wczytywanie liczb ===== Napisz funkcję o nazwie ''czytaj_liczby'', która ze strumienia czyta sekwencję liczb całkowitych i umieszcza je w tablicy. **Argumenty funkcji:** strumień ''p'' (wskaźnik do pliku otworzonego do odczytu), tablica ''t'' oraz liczba całkowita ''n'' \\ **Działanie:** po wykonaniu funkcji tablica ''t'' zawiera liczby całkowite wczytane ze strumienia ''p''. Liczba ''n'' ogranicza ilość wczytywanych liczb, na wypadek, gdyby w strumieniu znajdowało się ich więcej niż ''n''. Jeżeli w strumieniu jest mniej liczb niż ''n'' wówczas w tablicy zostaną umieszczone wszystkie liczby ze strumienia.\\ **Wartość zwracana**: Wartością zwracaną funkcji jest liczba całkowita oznaczająca liczbę popranie wczytanych liczb ze strumienia. Napisz program, który wykorzysta funkcję ''czytaj_liczby'' do pobrania ''n'' pierwszych liczb z pliku tekstowego zawierającego ciąg liczb całkowitych. Liczbę ''n'' oraz nazwę pliku wejściowego podaje użytkownik. Następnie, program wyznacza sumę wczytanych do tablicy liczb i zapisuje do pliku o nazwie ''wynik.txt'' uzyskany wynik w następującej formie: Nazwa pliku: liczby.txt n=100 suma=321 Zakładamy, że liczby w pliku wejściowym umieszczone są w osobnych wierszach. Przykładowy plik: {{zajecia:pp_2013_2:lab_src:liczby.txt}} ===== Liczba wierszy ===== Napisz program, który korzystając z funkcji ''fgets'' czyta pewien plik tekstowy linia po linii (zakładamy, że długość linii nie przekracza 500 znaków). Następnie, dla każdej wczytanej linii, za pomocą funkcji ''wordcount'' z poprzednich zajęć, program wyznacza ilość wyrazów i zapisuje wynikową liczbę do pliku ''wynik.txt''. Dodatkowo na końcu pliku zapisywana jest liczba całkowita wszystkich wyrazów z tekstu. **Wejście programu:** plik z tekstem \\ **Wyjście programu:** plik zawierający ilości wyrazów w każdej linii pliku wejściowego oraz sumaryczną liczbę wyrazów **Przykładowy plik wejściowy:** The origin of C is closely tied to the development of the Unix operating system, originally implemented in assembly language on a PDP-7 by Ritchie and Thompson, incorporating several ideas from colleagues. **Wynik zapisany do pliku wyjściowego** 8 7 6 7 4 32