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