1
mgr in
mgr in
ż
ż
. Pawe
. Pawe
ł
ł
Myszkowski
Myszkowski
Metodyki i Techniki
Metodyki i Techniki
Programowania 2
Programowania 2
zaj
zaj
ę
ę
cia nr 3
cia nr 3
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.
Dost
Dost
ę
ę
p do plik
p do plik
ó
ó
w
w
-
-
przypomnienie
przypomnienie
2.
2.
Zapis i odczyt dla plik
Zapis i odczyt dla plik
ó
ó
w binarnych
w binarnych
3.
3.
Przyk
Przyk
ł
ł
ady odwo
ady odwo
ł
ł
a
a
ń
ń
do plik
do plik
ó
ó
w binarnych
w binarnych
4.
4.
Zadania do zrobienia
Zadania do zrobienia
2
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.
Dost
Dost
ę
ę
p do plik
p do plik
ó
ó
w
w
-
-
przypomnienie
przypomnienie
1.
1.
Dost
Dost
ę
ę
p do plik
p do plik
ó
ó
w
w
-
-
przypomnienie
przypomnienie
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
3
1.
1.
Dost
Dost
ę
ę
p do plik
p do plik
ó
ó
w
w
-
-
przypomnienie
przypomnienie
Aby otworzy
Aby otworzy
ć
ć
plik jako binarny, w
plik jako binarny, w
ł
ł
a
a
ń
ń
cuchu znak
cuchu znak
ó
ó
w okre
w okre
ś
ś
laj
laj
ą
ą
cym tryb
cym tryb
dost
dost
ę
ę
pu na ko
pu na ko
ń
ń
cu dodajemy literk
cu dodajemy literk
ę
ę
"b",
"b",
np
np
. "
. "
rb
rb
", "
", "
w+b
w+b
". Bez tego plik
". Bez tego plik
jest traktowany jako tekstowy.
jest traktowany jako tekstowy.
2. Zapis i odczyt dla plik
2. Zapis i odczyt dla plik
ó
ó
w binarnych
w binarnych
Czytanie danych z pliku:
Czytanie danych z pliku:
fread
fread
–
–
odczytuje z pliku okre
odczytuje z pliku okre
ś
ś
lon
lon
ą
ą
ilo
ilo
ść
ść
bajt
bajt
ó
ó
w
w
nag
nag
ł
ł
ó
ó
wek:
wek:
int
int
fread(void
fread(void
*p,
*p,
int
int
rozm
rozm
,
,
int
int
ile, FILE *plik);
ile, FILE *plik);
Przyk
Przyk
ł
ł
ad:
ad:
FILE *plik;
FILE *plik;
float
float
liczba;
liczba;
plik =
plik =
fopen("jakis_plik.bin","rb
fopen("jakis_plik.bin","rb
");
");
fread(&liczba,sizeof(float),1,plik);
fread(&liczba,sizeof(float),1,plik);
fclose(plik
fclose(plik
);
);
4
2. Zapis i odczyt dla plik
2. Zapis i odczyt dla plik
ó
ó
w binarnych
w binarnych
Zapisywanie danych do pliku:
Zapisywanie danych do pliku:
fwrite
fwrite
–
–
zapisuje do pliku okre
zapisuje do pliku okre
ś
ś
lon
lon
ą
ą
ilo
ilo
ść
ść
bajt
bajt
ó
ó
w
w
nag
nag
ł
ł
ó
ó
wek:
wek:
int
int
fwrite(void
fwrite(void
*p,
*p,
int
int
rozm
rozm
,
,
int
int
ile, FILE *plik);
ile, FILE *plik);
Przyk
Przyk
ł
ł
ad:
ad:
FILE *plik;
FILE *plik;
float
float
liczba=1924;
liczba=1924;
plik =
plik =
fopen("jakis_plik.bin","wb
fopen("jakis_plik.bin","wb
");
");
fwrite(&liczba,sizeof(liczba),1,plik);
fwrite(&liczba,sizeof(liczba),1,plik);
fclose(plik
fclose(plik
);
);
3. Przyk
3. Przyk
ł
ł
ady odwo
ady odwo
ł
ł
a
a
ń
ń
do plik
do plik
ó
ó
w binarnych
w binarnych
FILE *plik1, *plik2;
FILE *plik1, *plik2;
float
float
d1=1.5, d2;
d1=1.5, d2;
float
float
tab1[5]={1.0, 2.0, 3.0, 4.0, 5.0};
tab1[5]={1.0, 2.0, 3.0, 4.0, 5.0};
float
float
tab2[5];
tab2[5];
//zapis
//zapis
plik1 =
plik1 =
fopen("dane.bin","wb
fopen("dane.bin","wb
");
");
fwrite(&d1, sizeof(float),1,plik1);
fwrite(&d1, sizeof(float),1,plik1);
fwrite(tab1, sizeof(float),5,plik1);
fwrite(tab1, sizeof(float),5,plik1);
fclose(plik1);
fclose(plik1);
5
3. Przyk
3. Przyk
ł
ł
ady odwo
ady odwo
ł
ł
a
a
ń
ń
do plik
do plik
ó
ó
w binarnych
w binarnych
//odczyt
//odczyt
plik2 =
plik2 =
fopen("dane.bin","rb
fopen("dane.bin","rb
");
");
fread(&d2, sizeof(d2),1,plik2);
fread(&d2, sizeof(d2),1,plik2);
fread(tab2, sizeof(tab2),1,plik2);
fread(tab2, sizeof(tab2),1,plik2);
fclose(plik2);
fclose(plik2);
//sprawdzenie
//sprawdzenie
printf("d2 = %.2f
printf("d2 = %.2f
\
\
n",d2);
n",d2);
printf("tab2 = ");
printf("tab2 = ");
for (
for (
int
int
i=0;i<5;i++)
i=0;i<5;i++)
printf("%.2f ",tab2[i]);
printf("%.2f ",tab2[i]);
1.
Dany jest plik binarny "liczby.dat". Plik ten zawiera 10 liczb
rzeczywistych pojedynczej precyzji. Odczytaj je, oblicz ich
sumę oraz średnią i dopisz na końcu pliku.
[http://we.pb.edu.pl/~pmyszkowski/dydaktyka/liczby.dat]
2.
Dany jest plik binarny "punkty.bin", zawierający
współrzędne 10-ciu punktów na płaszczyźnie w kolejności
x1, y1, x2, y2,… (liczby typu float). Pobierz współrzędne z
pliku i oblicz, który punkt leży najdalej od początku układu
współrzędnych. Wykorzystaj funkcję użytkownika do
obliczania odległości. Wypisz stosowny komunikat.
[http://we.pb.edu.pl/~pmyszkowski/dydaktyka/punkty.bin]
3.
Dany jest plik binarny "struktura.dat", zawierający dane do
struktury zdefiniowanej w pliku "struktura.cpp". Odczytaj
wartości do struktury z pliku i wypisz na ekranie w postaci
zdania.
[http://we.pb.edu.pl/~pmyszkowski/dydaktyka/struktura.dat]
[http://we.pb.edu.pl/~pmyszkowski/dydaktyka/struktura.cpp]
4. Zadania do zrobienia
4. Zadania do zrobienia
6
Dzi
Dzi
ę
ę
kuj
kuj
ę
ę
za uwag
za uwag
ę
ę