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 stdio.h
Przykład 1 - Czytanie sekwencji znaków z pliku
#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; }
Plik źródłowy: odczyt.c
Przykładowy tekst: 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: 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