1
mgr in
mgr in
ż
ż
. Pawe
. Pawe
ł
ł
Myszkowski
Myszkowski
Metodyki i Techniki
Metodyki i Techniki
Programowania 2
Programowania 2
zaj
zaj
ę
ę
cia nr 2
cia nr 2
Elektronika i Telekomunikacja, semestr III
Elektronika i Telekomunikacja, semestr III
rok akademicki 2009/2010
rok akademicki 2009/2010
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
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
ó
ó
r
r
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
ó
ó
r
r
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.
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
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
ó
ó
w
w
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);
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
);
);
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
);
);
fclose(plik
fclose(plik
);
);
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((fgets(linia,255,plik)!=NULL)
while((fgets(linia,255,plik)!=NULL)
printf("%s",linia
printf("%s",linia
);
);
fclose(plik
fclose(plik
);
);
getch
getch
();
();
}
}