background image

1

Informatyka 1

Informatyka 1

zaj

zaj

ę

ę

cia nr 14

cia nr 14

Elektrotechnika, semestr II

Elektrotechnika, semestr II

rok akademicki 2008/2009

rok akademicki 2008/2009

mgr in

mgr in

ż

ż

. Pawe

. Pawe

ł

ł

Myszkowski

Myszkowski

Plan dzisiejszych zaj

Plan dzisiejszych zaj

ęć

ęć

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

2.

2.

Zapis i odczyt dla plik

Zapis i odczyt dla plik

ó

ó

w tekstowych

w tekstowych

3.

3.

Przyk

Przyk

ł

ł

ady odwo

ady odwo

ł

ł

a

a

ń

ń

do plik

do plik

ó

ó

w tekstowych

w tekstowych

4.

4.

Zadania do zrobienia

Zadania do zrobienia

background image

2

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Plik:

Plik:

-

-

z punktu widzenia u

z punktu widzenia u

ż

ż

ytkownika jest to zbi

ytkownika jest to zbi

ó

ó

danych na dysku,

danych na dysku,

-

-

z punktu widzenia kompilatora jest to logiczna 

z punktu widzenia kompilatora jest to logiczna 

interpretacja zbioru danych, 

interpretacja zbioru danych, 

-

-

w j

w j

ę

ę

zyku C plik niekoniecznie musi oznacza

zyku C plik niekoniecznie musi oznacza

ć

ć

zbi

zbi

ó

ó

na dysku (mo

na dysku (mo

ż

ż

e by

e by

ć

ć

skojarzony z klawiatur

skojarzony z klawiatur

ą

ą

).

).

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Krok 1 

Krok 1 

skojarzenie pliku ze zbiorem 

skojarzenie pliku ze zbiorem 

danych, czyli otwarcie pliku.

danych, czyli otwarcie pliku.

FILE *zmienna 

FILE *zmienna 

//wska

//wska

ź

ź

nik pliku

nik pliku

Wska

Wska

ź

ź

nik wskazuje na pewn

nik wskazuje na pewn

ą

ą

struktur

struktur

ę

ę

zadeklarowan

zadeklarowan

ą

ą

w pliku <

w pliku <

stdio.h

stdio.h

>. Zawiera ona informacje o pliku, 

>. Zawiera ona informacje o pliku, 

m.in. po

m.in. po

ł

ł

o

o

ż

ż

enie bufora, rodzaj dost

enie bufora, rodzaj dost

ę

ę

pu do pliku, 

pu do pliku, 

sygna

sygna

ł

ł

y o wyst

y o wyst

ą

ą

pieniu b

pieniu b

łę

łę

d

d

ó

ó

w.

w.

background image

3

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Do otwarcia pliku s

Do otwarcia pliku s

ł

ł

u

u

ż

ż

y funkcja 

y funkcja 

fopen

fopen

().

().

FILE *zmienna = 

FILE *zmienna = 

fopen("

fopen("

nazwa_pliku

nazwa_pliku

","

","

tryb

tryb

");

");

nazwa_pliku

nazwa_pliku

nazwa zbioru na dysku, mo

nazwa zbioru na dysku, mo

ż

ż

e by

e by

ć

ć

razem ze 

razem ze 

ś

ś

cie

cie

ż

ż

k

k

ą

ą

dost

dost

ę

ę

pu

pu

tryb

tryb

okre

okre

ś

ś

la spos

la spos

ó

ó

b dost

b dost

ę

ę

pu do pliku

pu do pliku

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Tryby dost

Tryby dost

ę

ę

pu do pliku:

pu do pliku:

"r" 

"r" 

czytanie

czytanie

"w" 

"w" 

zapisywanie

zapisywanie

je

je

ś

ś

li plik nie istnieje 

li plik nie istnieje 

-

-

zostanie utworzony

zostanie utworzony

je

je

ś

ś

li plik istnieje 

li plik istnieje 

zostanie nadpisany

zostanie nadpisany

"a" 

"a" 

dopisywanie

dopisywanie

na ko

na ko

ń

ń

cu istniej

cu istniej

ą

ą

cego lub na pocz

cego lub na pocz

ą

ą

tku nowego

tku nowego

"r+" 

"r+" 

czytanie z mo

czytanie z mo

ż

ż

liwo

liwo

ś

ś

ci

ci

ą

ą

zapisywania

zapisywania

"w+" 

"w+" 

zapisywanie z mo

zapisywanie z mo

ż

ż

liwo

liwo

ś

ś

ci

ci

ą

ą

czytania

czytania

"a+" 

"a+" 

dopisywanie z mo

dopisywanie z mo

ż

ż

liwo

liwo

ś

ś

ci

ci

ą

ą

czytania

czytania

background image

4

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Rodzaje plik

Rodzaje plik

ó

ó

w:

w:

Pliki tekstowe

Pliki tekstowe

podzielone na wiersze (linie), z 

podzielone na wiersze (linie), z 

kt

kt

ó

ó

rych ka

rych ka

ż

ż

dy ko

dy ko

ń

ń

czy si

czy si

ę

ę

znakiem ko

znakiem ko

ń

ń

ca wiersza. 

ca wiersza. 

Ca

Ca

ł

ł

y plik ko

y plik ko

ń

ń

czy si

czy si

ę

ę

znakiem ko

znakiem ko

ń

ń

ca pliku (EOF).

ca pliku (EOF).

Pliki binarne

Pliki binarne

nie maj

nie maj

ą

ą

okre

okre

ś

ś

lonej struktury

lonej struktury

Aby otworzy

Aby otworzy

ć

ć

plik jako binarny, w 

plik jako binarny, w 

ł

ł

a

a

ń

ń

cuchu znak

cuchu znak

ó

ó

okre

okre

ś

ś

laj

laj

ą

ą

cym tryb dost

cym tryb dost

ę

ę

pu na ko

pu na ko

ń

ń

cu dodajemy 

cu dodajemy 

literk

literk

ę

ę

"b", 

"b", 

np

np

. "

. "

rb

rb

", "

", "

w+b

w+b

". Bez tego plik jest 

". Bez tego plik jest 

traktowany jako tekstowy.

traktowany jako tekstowy.

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

Zamykanie pliku

Zamykanie pliku

Po zako

Po zako

ń

ń

czeniu pracy z plikiem nale

czeniu pracy z plikiem nale

ż

ż

y go 

y go 

zamkn

zamkn

ąć

ąć

. S

. S

ł

ł

u

u

ż

ż

y do tego funkcja 

y do tego funkcja 

fclose

fclose

.

.

int

int

fclose(FILE

fclose(FILE

*zmienna);

*zmienna);

background image

5

Schemat przetwarzania pliku

Schemat przetwarzania pliku

FILE *

FILE *

plik=fopen("D:

plik=fopen("D:

\

\

\

\

student

student

\

\

\

\

plik.txt","r

plik.txt","r

"); 

"); 

//otwarcie

//otwarcie

if

if

(

(

plik==NULL

plik==NULL

)

)

//kontrola b

//kontrola b

łę

łę

d

d

ó

ó

w

w

{

{

printf("Blad

printf("Blad

otwarcia 

otwarcia 

pliku

pliku

\

\

n

n

");

");

getch

getch

(); exit(

(); exit(

-

-

1);

1);

}

}

/* przetwarzanie pliku 

/* przetwarzanie pliku 

zapis lub odczyt */

zapis lub odczyt */

fclose(plik

fclose(plik

//zamkni

//zamkni

ę

ę

cie

cie

1.

1.

Operacje na plikach 

Operacje na plikach 

-

-

wprowadzenie

wprowadzenie

2. Zapis i odczyt dla plik

2. Zapis i odczyt dla plik

ó

ó

w tekstowych

w tekstowych

Czytanie i zapisywanie pojedynczych znak

Czytanie i zapisywanie pojedynczych znak

ó

ó

w:

w:





fgetc

fgetc

odczytuje z pliku jeden znak

odczytuje z pliku jeden znak

nag

nag

ł

ł

ó

ó

wek: 

wek: 

int

int

fgetc(FILE

fgetc(FILE

*plik);

*plik);





fputc

fputc

zapisuje do pliku jeden znak

zapisuje do pliku jeden znak

nag

nag

ł

ł

ó

ó

wek: 

wek: 

int

int

fputc(char

fputc(char

znak, FILE *plik);

znak, FILE *plik);

Przyk

Przyk

ł

ł

ad:

ad:

FILE *plik;

FILE *plik;

plik

plik

fopen("jakis_plik.txt","r+t

fopen("jakis_plik.txt","r+t

");

");

char znak = 

char znak = 

fgetc(plik

fgetc(plik

);

);

fputc(znak,plik

fputc(znak,plik

);

);

background image

6

2. Zapis i odczyt dla plik

2. Zapis i odczyt dla plik

ó

ó

w tekstowych

w tekstowych

Czytanie i zapisywanie 

Czytanie i zapisywanie 

ł

ł

a

a

ń

ń

cuch

cuch

ó

ó

w znak

w znak

ó

ó

w:

w:





fgets

fgets

czyta z pliku 

czyta z pliku 

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w o podanej d

w o podanej d

ł

ł

ugo

ugo

ś

ś

ci lub do 

ci lub do 

ko

ko

ń

ń

ca wiersza, 

ca wiersza, 

nag

nag

ł

ł

ó

ó

wek: 

wek: 

char* 

char* 

fgets(char

fgets(char

* linia, 

* linia, 

int

int

dl, FILE* plik);

dl, FILE* plik);





fputs

fputs

zapisuje 

zapisuje 

ł

ł

a

a

ń

ń

cuch znak

cuch znak

ó

ó

w do pliku, 

w do pliku, 

nag

nag

ł

ł

ó

ó

wek: 

wek: 

int

int

fputs(char

fputs(char

* linia, FILE *plik);

* linia, FILE *plik);

Przyk

Przyk

ł

ł

ad:

ad:

FILE *plik;

FILE *plik;

char *linia;

char *linia;

plik = 

plik = 

fopen("jakis_plik.txt","rt

fopen("jakis_plik.txt","rt

");

");

fgets

fgets

(linia,255,plik);

(linia,255,plik);

printf("Linia

printf("Linia

z pliku: %

z pliku: %

s",linia

s",linia

);

);

2. Zapis i odczyt dla plik

2. Zapis i odczyt dla plik

ó

ó

w tekstowych

w tekstowych

Odczyt i zapis sformatowany:

Odczyt i zapis sformatowany:





fscanf

fscanf

dzia

dzia

ł

ł

a tak jak 

a tak jak 

scanf

scanf

, ale ma dodatkowy parametr, 

, ale ma dodatkowy parametr, 

nag

nag

ł

ł

ó

ó

wek: 

wek: 

int

int

fscanf(FILE

fscanf(FILE

* plik, 

* plik, 

const

const

char* format,

char* format,

);

);





fprintf

fprintf

dzia

dzia

ł

ł

a tak jak 

a tak jak 

printf

printf

, ale ma dodatkowy parametr, 

, ale ma dodatkowy parametr, 

nag

nag

ł

ł

ó

ó

wek: 

wek: 

int

int

fprintf(FILE

fprintf(FILE

* plik, 

* plik, 

const

const

char* format,

char* format,

);

);

Przyk

Przyk

ł

ł

ad:

ad:

FILE *plik;

FILE *plik;

int

int

liczba=21;

liczba=21;

plik = 

plik = 

fopen("jakis_plik.txt","wt

fopen("jakis_plik.txt","wt

");

");

fprintf(plik,"Liczba

fprintf(plik,"Liczba

zapisana do pliku to %

zapisana do pliku to %

d

d

\

\

n",liczba

n",liczba

);

);

background image

7

3. Przyk

3. Przyk

ł

ł

ady odwo

ady odwo

ł

ł

a

a

ń

ń

do plik

do plik

ó

ó

w tekst.

w tekst.

Czytanie z pliku znak po znaku:

Czytanie z pliku znak po znaku:

#

#

include

include

<

<

stdio.h

stdio.h

>

>

#

#

include

include

<

<

conio.h

conio.h

>

>

int

int

main

main

()

()

{

{

char znak; 

char znak; 

FILE* plik = 

FILE* plik = 

fopen("main.c","rt

fopen("main.c","rt

");

");

while((znak=fgetc(plik))!=EOF

while((znak=fgetc(plik))!=EOF

)

)

printf("%c",znak

printf("%c",znak

);

);

fclose(plik

fclose(plik

);

);

getch

getch

();

();

}

}

3. Przyk

3. Przyk

ł

ł

ady odwo

ady odwo

ł

ł

a

a

ń

ń

do plik

do plik

ó

ó

w tekst.

w tekst.

Czytanie z pliku linia po linii:

Czytanie z pliku linia po linii:

#

#

include

include

<

<

stdio.h

stdio.h

>

>

#

#

include

include

<

<

conio.h

conio.h

>

>

int

int

main

main

()

()

{

{

char linia[255]; 

char linia[255]; 

FILE* plik = 

FILE* plik = 

fopen("main.c","rt

fopen("main.c","rt

");

");

while((znak=fgets(linia,255,plik))!=NULL)

while((znak=fgets(linia,255,plik))!=NULL)

printf("%s",linia

printf("%s",linia

);

);

fclose(plik

fclose(plik

);

);

getch

getch

();

();

}

}

background image

8

Dzi

Dzi

ę

ę

kuj

kuj

ę

ę

za uwag

za uwag

ę

ę