Tải bản đầy đủ (.pdf) (17 trang)

kỹ thuật lập trình C chuyên nghiệp phần 8 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (303.27 KB, 17 trang )

Kiể ấ túKiể ấ tú
Kiể
u c

u
t
r
ú
c
Kiể
u c

u
t
r
ú
c
 KháiKhái niệmniệm
 KhaiKhai báobáo

PhânPhân
loạiloại

PhânPhân
loạiloại
 CácCác thaothao táctác
Khái iệKhái iệ
Khái
n
iệ
m


Khái
n
iệ
m
 TậpTậptintin làlà kiểukiểudữdữ liệuliệuhỗhỗ trợtrợ truytruy xuấtxuất//lưulưutrữtrữ
dữdữ liệuliệutrêntrên bộbộ nhớnhớ ngoàingoài
ỗỗ
ểể
 CCh

h

trợtrợ haihai ki

uki

utậptập tintin::vănvănbảnbảnvàvà nhịnhị
p
hân
p
hân
 TruyTruy xuấtxuất thôngthông quaqua concon trỏtrỏ FILEFILE
Kiể FILE *Kiể FILE *
Kiể
u
FILE

*Kiể
u
FILE


*
KiểKiể
FILE * (FILE * (
kh ikh i
bábá
tt
tdi htdi h
))
hh
héhé
làlà
iệiệ

Kiể
u
Kiể
u
FILE

*

(FILE

*

(
kh
a
ikh

a
i

o

o
t
rong
t
rong s
tdi
o.
h
s
tdi
o.
h
)

)
c
h
oc
h
o
phé
p
phé
p


m

mv
iệ
cv
iệ
c
vớivới cáccác tậptập tin (tin (vănvănbảnbản, , nhịnhị phânphân).).
 Khai Khai báobáo con con trỏtrỏ tậptập tin tin
FILE * FILE * fpfp;;
 ChúngChúng tata sửsử dụngdụng con con trỏtrỏ tậptập tin tin đểđể truytruy cậpcập((đọcđọc, , ghighi, ,
thêmthêm thôn
g
thôn
g
tin
)
tin
)
cáccác tậ
p
tậ
p
tin.tin.
gg
))
pp
Mở tậ tiMở tậ ti
Mở


tậ
p
ti
n
Mở

tậ
p
ti
n
FILE
*
FILE
*
fopenfopen
( const char
*
( const char
*
FileNameFileName
const char
*
Mode);const char
*
Mode);
FILE

FILE

fopenfopen

(

const

char

(

const

char

FileNameFileName
,
const

char

Mode);
,
const

char

Mode);

Filename:Filename:
têntên
tậptập
tintin

cầncần
mởmở
CóCó
thểthể
chỉchỉ
địnhđịnh
mộtmột
đườngđường

Filename:

Filename:

têntên
tậptập
tin

tin

cầncần
mởmở
. .
CóCó
thểthể
chỉchỉ
địnhđịnh
mộtmột
đườngđường
dẫndẫn đầyđầy đủđủ chỉchỉđếnđếnvịvị trítrí củacủatậptập tin.tin.
 Mode: Mode: chếchếđộđộ mởmở tậptập tin: tin: chỉchỉđọcđọc, , đểđể ghighi ((tạotạomớimới), ), ghighi

thêmthêm

NếuNếu
t
h
aot
h
ao
táctác
m

m

t
h
à
nh
t
h
à
nh

n
gcô
n
g
,

,
f

ope
nf
ope
n
t
r
ảt
r

vềvề
co
n
co
n
t
r
ỏt
r

FILE FILE
t
r
ỏt
r

NếuNếu
taotao
táctác
ởở
tàtà

cô gcô g
,,
opeope
t ảt ả
vềvề
coco
t ỏt ỏ
t ỏt ỏ
đếnđếntậptập tin tin FileNameFileName
 NếuNếumởmở khôngkhông thànhthành côngcông ((FileNameFileName khôngkhông tồntồntạitại, , khôngkhông
thểthể tạotạomớimới), ), fopenfopen trảtrả vềvề giágiá trịtrị NULL.NULL.
Đótậ tiĐótậ ti
Đó
ng
tậ
p
ti
n
Đó
ng
tậ
p
ti
n
itit
fl (fl (
FILEFILE
*fil t*fil t
))
i

n
ti
n
t
f
c
l
ose
(f
c
l
ose
(
FILEFILE
*fil
es
t
ream
*fil
es
t
ream
))
;;
fil tfil t
t ỏt ỏ
đếđế
tậtậ
titi
đđ

ởở
ầầ
đóđó

fil
es
t
ream
fil
es
t
ream::concon
t
r
ỏt
r

đế
n
đế
n
tậ
p
tậ
p
ti
n
ti
n
đ

ang
đ
ang m

m

c

nc

n
đó
ng
đó
ng
NếNế
hh
áá
đóđó
hà hhà h
ôô
flfl
ảả
ềề
00

Nế
u
Nế
ut

h
aot
h
ao t
á
ct
á
c
đó
ng
đó
ng t

n
h
t

n
h
c
ô
ng,c
ô
ng,
f
c
l
ose
f
c

l
ose tr

tr

v

v

00

 NếuNếucócó lỗilỗi(tập(tập tintin đangđang sửsử dụng),dụng), fclosefclose trảtrả vềvề giágiá trịtrị EOFEOF
Ví d Mở Đótậ tiVí d Mở Đótậ ti


d
ụ :
Mở
,
Đó
ng
tậ
p
ti
n


d
ụ :
Mở

,
Đó
ng
tậ
p
ti
n
11
FILE *FILE *
ff
1
.
1
.
FILE

*

FILE

*

f
p
f
p;;
////
ởở
VB TXT “VB TXT “
hỉhỉ

đđ
””
2.2.
//

//
m

m

VB
.
TXT

“VB
.
TXT


c
hỉ
c
hỉ
đ
ọc
đ
ọc
””
3.3. if( (if( (fpfp = = fopenfopen( “C:( “C:\\\\LTCLTC\\\\VB.TXT”, “r” )) == NULL)VB.TXT”, “r” )) == NULL)
{{

ifif
(“T i(“T i
khkh
dd
\\
”)”)
4.4.
{

{

p
r
i
nt
fp
r
i
nt
f
(

“T
ap t
i
n
(

“T
ap t

i
n
kh
ong
kh
ong mo mo
d
uoc
d
uoc
\\
n
”)
;n
”)
;
5.5. exit(1); exit(1);
}}
6.6.
}

}

/
**
//
**
/
/


//

/
77
fclosefclose
((
fpfp
););
7
.
7
.
fclosefclose
(

(

fpfp
););
Tậ ti ă bảTậ ti ă bả
Tậ
p
ti
n v
ă
n
bả
n
Tậ
p

ti
n v
ă
n
bả
n
 T
ập
T
ập
tintin vănvănbảnbảnlàlà ki

uki

ut
ập
t
ập
tintin đư

cđư

clưulưutr

tr

cáccác thôn
g
thôn
g

tintin
ậpập
ậpập
ợợ
gg
dướidướidạngdạng kiểukiểukýký tựtự
 Tru
y
Tru
y
xu

txu

ttậ
p
tậ
p
tintin vănvănbảnbản::
yy
pp
 theotheo từngtừng kýký tựtự
 theotheo từn
g
từn
g
dòn
g
dòn
g

gg
gg
 ChếChếđộđộ mởmở trêntrên tậptập tintin vănvănbảnbản
 “r”“r” :: đ



c
((
t
ập
t
ập
tintin
p
hải
p
hảicócó trêntrên đĩađĩa
))
ọọ
((
ậpập
pp
))
 “w”“w” :: ghighi ((ghighi đèđèlênlên tậptập tintin cũcũ hoặchoặctạotạomớimớinếunếutậptập tintin
khôngkhông cócó trêntrên đĩađĩa))
 “a”“a” :: ghighi nốinốivàovào cuốicuốitậptập tintin
 “r+”“r+” :: đọcđọc//
g
hi

g
hi Tậ
p
Tậ
p
tintin
p
hải
p
hảicócó trêntrên đĩađĩa
gg
pp
pp
 “a+”“a+” :: đọcđọc,, ghighi vàovào cuốicuốitậptậptintin TạoTạomớimớitậptậptintin nếunếutậptập
tintin chưachưacócó trêntrên đĩađĩa
t tftf tt tftf t
ge
t
c, pu
t
c,
f
ge
t
c,
f
pu
t
cge
t

c, pu
t
c,
f
ge
t
c,
f
pu
t
c

getcgetc
::
nhậnnhận
kýký
tựtự
từtừ
tậptập
tintin

getcgetc
:

:

nhậnnhận
kýký
tựtự
từtừ

tậptập
tin
.
tin
.
intint getcgetc ( FILE *( FILE *fpfp ););
getcgetc trảtrả vềvề kýký tựtựđọcđọc đượcđượchoặchoặc
trảtrả
vềvề
EOFEOF
nếunếu
fpfp
khôngkhông
hợphợp
lệlệ
hoặchoặc
đọcđọc
đếnđến
cuốicuối
tậptập
tintin
trảtrả
vềvề
EOF

EOF

nếunếu
fpfp
khôngkhông

hợphợp
lệlệ
hoặchoặc
đọcđọc
đếnđến
cuốicuối
tậptập
tin
.
tin
.

p
utc
p
utc: :
g
hi
g
hi k
ý
k
ý
t

t

rara t
ập
t

ập
tin.tin.
pp
gg
ýý
ựự
ậpập
intint putcputc ( ( intint Ch, FILE * Ch, FILE * fpfp ););
putcputc trảtrả vềvề EOF EOF nếunếu thaothao táctác ghighi cócó lỗilỗi
 cócó thểthể dùngdùng fgetcfgetc vàvà fputcfputc
Ví d 1t()đ hí đế khi E tVí d 1t()đ hí đế khi E t


d

1
: ge
t
c
()

đ
ọc p

m
đế
n
khi

E

n
t
er


d

1
: ge
t
c
()

đ
ọc p

m
đế
n
khi

E
n
t
er
1.1. #include#include <<stdiostdio hh>>
2.2. #include#include <<conioconio hh>>
3.3. #include#include <<stdlibstdlib hh>>
idid
i()i()

4.4. vo
id
vo
id
ma
i
n
()
ma
i
n
()
5.5. {{FILEFILE **fpfp;;
6.6.
charchar
filename[filename[
6767
],],
chch
;;
6.6.
charchar
filename[filename[
6767
],],
chch
;;
7.7. printfprintf (( “Filename“Filename::““));;
8.8. getsgets (filename)(filename);;
9.9. ifif ((((fpfp == fopenfopen (filename,(filename, “w”“w” )))) ==== NULLNULL ))//// mởmở tậptập tintin mớimới đểđể

ghighi
1010
{{
printfprintf
((

Create

Create
filefile
errorerror
\\
n

)n

)
;;
exitexit
((
11
))
;;
}}
10
.
10
.
{{
printfprintf

((
CreateCreate
filefile
errorerror
\\
n)n)
;;
exitexit
((
11
))
;;
}}
11.11. whilewhile (((( chch == getchegetche()() ))!=!= ‘‘\\r’r’ ))//// đọcđọcchocho đếnđến khikhi gặpgặpENTERENTER
12.12. putcputc ((fpfp ));;
13.13. fclosefclose ((fpfp ));;
14.14. }}
Ví d

2:
p
utc
()
in n

i dun
g
t
ập
tin văn Ví d


2:
p
utc
()
in n

i dun
g
t
ập
tin văn
ụ p() ộ g ậpụ p() ộ g ập
bản ra màn hìnhbản ra màn hình
11
#include <#include <
stdio hstdio h
>>
1
.
1
.
#include

<#include

<
stdio
.
hstdio

.
h
>>
2.2. #include <#include <conio.hconio.h>>
3.3. #include <#include <stdlib.hstdlib.h>>
4.4. void main()void main()
5.5. { FILE * { FILE * fpfp;;
6.6. char filename[67], char char filename[67], char chch;;
7.7. printfprintf ( “Filename: “ );( “Filename: “ );
88
gets (filename);gets (filename);
8
.
8
.
gets

(filename);gets

(filename);
9.9. if ((if ((fpfp = = fopenfopen (filename, “r” )) == NULL ) // (filename, “r” )) == NULL ) // mởmở tậptập tin tin mớimới đểđể đọcđọc
10.10.
{

{

p
rintf
p
rintf

(
“O
p
en file error
(
“O
p
en file error
\\
n”
);
exit
(
1
);

}
n”
);
exit
(
1
);

}
{{
pp
(p(p
); ( ); }); ( ); }
11.11. while (( while (( chch = = getcgetc ( ( fpfp ) ) != EOF ) // ) ) != EOF ) // đọcđọcchocho đếnđếnhếthếttậptập tintin

12.12. printfprintf ( “%c”, ( “%c”, chch ););
13.13. fclosefclose ( ( fpfp ););
14.14. }}
Ví d

3: Đếm số từ tron
g
t
ập
tin văn Ví d

3: Đếm số từ tron
g
t
ập
tin văn
ụ g ậpụ g ập
bản.bản.
1.1. #include#include <stdio<stdio h>h>
2.2. #include#include <conio<conio h>h>
3.3. #include#include <stdlib<stdlib h>h>
4.4. voidvoid main()main()
5.5. {{FILEFILE **fpfp;;
6.6. charchar filename[filename[6767],], charchar chch;;
77
intint
countcount
==
00
iswordisword

==
00
;;
7
.
7
.
intint
countcount
==
00
,,
iswordisword
==
00
;;
8.8.
p
rintf
p
rintf
((
“Filename“Filename::““
))
;;
g
ets
g
ets
(

filename
)(
filename
)
;;
pp
((
))
;;
gg
()()
;;
9.9. ifif ((fp((fp == fopenfopen (filename,(filename, “r”“r” )))) ==== NULLNULL ))//// mởmở tậptập tintin mớimới đểđể đọcđọc
10.10. {{printfprintf ((“Open“Open filefile errorerror \\n”)n”);;exitexit ((11));;}}
1111
whilewhile
((((
chch
==
getcgetc
((
fpfp
))
))
!=!=
EOFEOF
))
////
đọcđọc
chocho

đếnđến
hếthết
tậptập
tintin
11
.
11
.
whilewhile
((((
chch
==
getcgetc
((
fpfp
))
))
!=!=
EOFEOF
))
////
đọcđọc
chocho
đếnđến
hếthết
tậptập
tintin
12.12. {{
13.13. ifif
((((

chch >=>= ‘a’‘a’ &&&& chch <=<= ‘z’‘z’
))
||||
((
chch >=>= ‘A’‘A’ &&&& chch <=<= ‘Z’‘Z’
))))
((((
))
||||
((
))))
14.14. iswordisword ==11;;
15.15. ifif (((( chch ==== ‘‘‘‘|||| chch ==== ‘‘\\n’n’ |||| chch ==== ‘‘\\t’t’ ))&&&& iswordisword ))
16.16. {{ countcount ++++;;iswor
d
iswor
d
==00;;}}
17.17. }}
18.18. printfprintf ((“Number“Number ofof wordword::%%dd\\n”,n”, count)count);;
19.19. fclosefclose
((
f
p
f
p
))
;;
((
pp

))
;;
20.20. }}
ft()ft()
f
ge
t
s
()

f
ge
t
s
()

 f
g
etsf
g
ets: : đọcđọcchuỗichuỗik
ý
k
ý
t

t

t


t

tậ
p
tậ
p
tin.tin.
gg
ýý
pp
char * char * fgetsfgets ( char *( char *StrStr, , intint NumOfCharNumOfChar, FILE *, FILE *fpfp ););
fgetsfgets đọcđọc cáccác kýký tựtự trongtrong tậptập tin tin chocho đếnđến khikhi gặpgặpmộtmột trongtrong
cáccác
điềuđiều
kiệnkiện
::
cáccác
điềuđiều
kiệnkiện
::
 EOFEOF

gặpgặp
dòngdòng
mớimới

gặpgặp
dòngdòng
mớimới
 đọcđọc đượcđược((NumOfCharNumOfChar 1) 1) kýký tựtự trướctrước khikhi gặpgặphaihai điềuđiều

kiệnkiện
trêntrên

kiệnkiện
trêntrên


fgetsfgets
trảtrả
vềvề
chuỗichuỗi
kýký
tựtự
đọcđọc
đượcđược
((
kếtkết
thúcthúc
bằngbằng
\\
0)0)
hoặchoặc

fgetsfgets
trảtrả
vềvề
chuỗichuỗi
kýký
tựtự
đọcđọc

đượcđược
((
kếtkết
thúcthúc
bằngbằng
\\
0)

0)

hoặchoặc
trảtrả vềvề con con trỏtrỏ NULL NULL nếunếuEOF EOF hoặchoặccócó lỗilỗi khikhi đọcđọc
ft()ft()
f
pu
t
s
()f
pu
t
s
()
ftft
hihi
h ỗih ỗi
kýký
tt
tậtậ
titi


f
pu
t
s
f
pu
t
s: : g
hi
g
hi
c
h
u
ỗi
c
h
u
ỗi
kýký
tựtự
rara
tậ
p
tậ
p
ti
n.
ti
n.

intint
fputsfputs
( const char
*
( const char
*
StrStr
,FILE
*
,FILE
*
fpfp
););
intint
fputsfputs
(

const

char

(

const

char

StrStr
,


FILE

,

FILE

fpfp
););
 fputsfputs trảtrả vềvề EOF EOF nếunếu thaothao táctác ghighi cócó lỗilỗi
Hà hé tậ ti ă bảHà hé tậ ti ă bả

m c

p
tậ
p
ti
n v
ă
n
bả
n

m c

p
tậ
p
ti
n v

ă
n
bả
n
CóCó
tt
áá
thth
iệiệ

CóCó
t
rong
t
rong c
á
cc
á
c
thưthư
v
iệ
nv
iệ
n
#include
<
#include
<
stdio.hstdio.h

>>
#include

#include

stdio.hstdio.h
#include <#include <string.hstring.h>>
 /*/* ViếtViếtchươngchương trìnhtrình chépchép từtừ SourceFileSourceFile sangsang DestFileDestFile vàvà
trảtrả vềvề sốsố kýký tựtựđọcđọc đươcđươc
f f() f f() f i tf() ffl h()f f() f f() f i tf() ffl h()
f
eo
f()
;
f
scan
f()
,
f
pr
i
n
tf()
;
ffl
us
h()f
eo
f()
;

f
scan
f()
,
f
pr
i
n
tf()
;
ffl
us
h()

feoffeof
::
chocho
biếtbiết
đãđã
đếnđến
cuốicuối
tậptập
tintin
chưchư
a(EOF)a(EOF)

feoffeof
:

:


chocho
biếtbiết
đãđã
đếnđến
cuốicuối
tậptập
tin

tin

chưchư
a(EOF)
.
a(EOF)
.
intint feoffeof (FILE *(FILE *fpfp ););
 fprintffprintf: :
intint fprintffprintf ( FILE *( FILE *fpfp, const char * Format, );, const char * Format, );
 fscanffscanf: :
intint fscanffscanf
(
FILE *
(
FILE *f
p
f
p
,
const char * Format

,

);,
const char * Format
,

);
((
pp
,,);,,);
 fflushfflush: : làmlàm sạchsạch vùngvùng đệmđệmcủacủatậptập tintin
ii
ffl hffl h
(FILE*(FILE*
ff
))
i
nt
i
nt
ffl
us
hffl
us
h
(

FILE

*


(

FILE

*

f
p
f
p
)
;
)
;
Tậ ti Nhị hâTậ ti Nhị hâ
Tậ
p
ti
n
Nhị
p

n
Tậ
p
ti
n
Nhị
p


n
TậTậ
titi
hịhị
hâhâ
làlà
ộtột
h ỗih ỗi
áá
kýký
tt
khôkhô
hâhâ
biệtbiệt

Tậ
p
Tậ
p
ti
n
ti
n n
hị
n
hị
phâ
n
phâ

n
làlà
m
ột
m
ột
c
h
u
ỗi
c
h
u
ỗi
c
á
cc
á
c
kýký
tựtự
, ,
khô
ng
khô
ng
phâ
n
phâ
n

biệtbiệt
kýký tựtự in in đượcđượchay hay khôngkhông in in đượcđược
 TậpTập tin tin nhịnhị phânphân thườngthường dùngdùng đểđể lưulưutrữtrữ cáccác cấucấutrúctrúc
((
structstruct
))
hoặchoặc
unionunion
((
structstruct
)

)

hoặchoặc
union
.
union
.

KhaiKhai
báobáo
::

Khai

Khai

báobáo
::

FILE * FILE * f
p
f
p
;;
pp
 Tru
y
Tru
y
xu

txu

tt
ập
t
ập
tin tin nh

nh

p
hân
p
hân theotheo kh

ikh

id


d

li

uli

unh

nh

p
hân
p
hân
yy
ậpập
ịị
pp
ệệ
ịị
pp

×