D li u ki u File

1.Khái ni m v t p T p hay t p d li u là m t t p h p các d li u có liên quan v i nhau và có cùng ki u ñư c nhóm l i v i nhau t o thành m t dãy. Chúng thư ng ñư c ch a trong m t thi t b nh ngoài c a máy tính (ñĩa m m, ñĩa c ng...) T p d li u theo nghĩa r ng : có th ñó là chương trình, có th là s li u, có th là các d li u khác như kí t , văn b n... T p ñư c lưu tr trong b nh ngoài như ñĩa c ng, ñĩa m m...ði u ñó có nghĩa là t p ñư c lưu tr ñ dùng nhi u l n và t n t i ngay c khi chương trình k t thúc ho c m t ñi n. Vì v y nhưng d li u nào c n lưu gi thì chúng ta b t bu c ph i dùng ñ n t p. T p là m t ki u d li u có c u trúc. ð nh nghĩa t p có ph n nào gi ng m ng ch chúng ñ u là t p h p c a các ph n t d li u cùng ki u. Song m ng ñư c khai báo trong chương trình v i s ph n t ñã xác ñ nh, còn s ph n t c a t p không xác ñ nh khi ñ nh nghĩa 2. Cách ñ nh nghĩa t p trong Pascal Cách 1 TYPE Ki u_t p = FILE OF ki u_ph n_t ; Sau ñó ta khai báo VAR Bi n_T p : Ki u_t p; Cách 2 : khai báo tr c ti p VAR Bi n_t p : FILE OF Ki u_ph n_t ; VD : TYPE FileInteger = FILE OF integer; FileReal = FILE OF real; FileBoolean = FILE OF Boolean; Nhan_su = RECORD Ten : String[30]; Tuoi : Byte; Luong : Real; END; VAR F1,F2 : FileInteger; F3 : FileReal; FNS : FILE OF Nhan_su; F5 : FILE OF Char; 3.M t p m i ñ c t d li u a. M t p ñ ghi Pascal dùng 2 th t c ñi li n nhau theo th t ASSIGN (Bi n_T p, Tên_t p); Gán tên_t p cho bi n_t p; REWRITE (Bi n_T p); 1

Item2. RESET(F1).DAT'). Var2..'NGUYENTO. X)...... K. Item2. . 3.. M t p ñ ñ c Pascal dùng 2 th t c ñi li n nhau theo th t ASSIGN (Bi n_T p.K là các bi n INTEGER..J.DAT').. ta có th vi t : Write (F1. Item1.Bư c cu i cùng c a vi c ñ c d li u t t p là ñóng t p b ng th t c CLOSE (Bi n_T p) VD : CLOSE(F1)...VarN ch có th là các bi n có giá tr cùng v i ki u ph n t c a t p Vi c ñ c m t ph n t c a t p còn c n có ñi u ki n : ph i xem t p có còn ph n t không. n u trên ñĩa có t p tin trùng v i tên c a t p m thì nó s b xoá ñi.. ItemN). 5).ItemN là các h ng.Ghi các giá tr vào t p v i th t c WRITE Cách vi t Write (Bi n_t p. 4. ð c d li u t m t t p ñã có a. Var1... Trong ñó Item1.. . Bư c cu i cùng c a vi c ñ t d li u vào t p là ñóng t p b ng th t c CLOSE (Bi n_T p) VD : CLOSE(F1)... bi n. Sau khi m t p xong. c a s t p s không có giá tr xác ñ nh vì nó tr vào cu i t p (EOF). END.. I+2*J.VD : ASSIGN(F1. n u t p không r ng thì c a s bao gi cũng tr vào ph n t ñ u tiên c a t p b. t p s r ng vì chưa có ph n t nào. Gán tên_t p cho bi n_t p. .. c.T p truy nh p tr c ti p Vì ñ dài c a các ph n t trong t p là như nhau nên ta có th truy nh p tr c ti p vào v trí c a m t ph n t nào ñó trong t p b ng cách dùng SEEK 2 .. các bi u th c và ph i có giá tr cùng v i ki u ph n t c a t p VD : V i I. Var2.. Trong ñó Var1.. VarN). VD : ASSIGN(F1.. Hàm EOF(Bi n_t p)=TRUE n u c a s t p tr vào cu i t p và EOF(Bi n_t p)=FALSE n u c a s v n tr vào ph n t c a t p VD : Mu n ñ c t t c các ph n t c a t p WHILE not EOF(Bi n_T p) DO BEGIN Read(Bi n_T p.. t c là c a s t p chưa tr ñ n EOF. Sau khi m t p xong. b. REWRITE(F1).. 5... Lưy ý. . . RESET (Bi n_T p).ð c d li u t t p Cách vi t Read (Bi n_t p. Tên_t p).'NGUYENTO.

c t không gi i h n (xem l i Chương 3 : Th t c vào ra d li u) c.. boolean t t p văn b n thông qua các th t c Read(Bi n_T p..ItemN).... (1) Readln(Bi n_T p. ðó là c p kí t ñi u khi n : . Boolean. bi u th c có ki u ñơn gi n như Integer. Var1.LF (Line Feed) : nh y xu ng dòng ti p theo... mã s ASCII=10 Chúng ñư c nh n d ng ñ ngăn cách gi a 2 dãy kí t tương ng v i 2 dòng khác nhau VD : ðo n văn b n sau VI DU 1234 HET Máy s ch a trong t p văn b n thành m t dãy như sau : VI DU ³ CR LF ³ 1234 ³ CR LF ³ HET ³ EOF b... String.. Trong ñó Item1. bi n. 3 .ItemN là các h ng.. Boolean.. Cách khai báo VAR Bi n_t p : TEXT. Item1.. Integer. (3) Trong ñó Var1. Còn t p văn b n có s dòng.Ghi vào t p văn b n Có 3 th t c Write(Bi n_T p. Var2. Sau ñó ta ch c n dùng các th t c READ ñ ñ c nó ra ho c WRITE ñ ñ t giá tr m i vào 6. Writeln(Bi n_T p. VD : VAR F1.VarN). No) No là s th t c a ph n t trong t p Theo th t c này máy s ñ t c a s t p vào ph n t th No.. Real.ItemN). Writeln(Bi n_T p). real. Cách vi t vào t p văn b n cũng như cách vi t ra màn hình nhưng khác v i màn hình ch h n ch có 80 dòng x 25 c t. mã s ASCII=13 . Item1. Item2.VarN). String. Var2. (2) Readln(Bi n_T p). Var1.VarN là các bi n ki u Char.ð c d li u t t p văn b n Chúng ta có th ñ c không nh ng kí t t t p văn b n mà còn có th ñ c các s nguyên s th c..T p văn b n (TEXT FILE) a.Cách vi t SEEK (Bi n_T p.F2 : TEXT Các ph n t c a t p ki u TEXT là các kí t (ch vi t) song TEXT khác v i FILE OF Char ch TEXT ñư c t ch c thành t ng dòng v i ñ dài m i dòng khác nhau nh có thêm các d u h t dòng. Var2.CR (Carriage Return) : nh y v ñ u dòng... Item2. Item2.. St) : ñ i tên t p thành St (ki u String) 7.Các th t c và hàm x lí t p c a Pascal FILESIZE (F) : cho s ph n t c a t p F FILEPOS (F) : cho v trí t c th i c a con tr ERASE (F) : xoá FILE trên ñĩa có tên ñã gán vào F RENAME (F.

readln(a). close(f).{ð c s th i vào a} write(f.{Xoá màn hình} assign(f. T p không ñ nh ki u T p không ñ nh ki u là m t ki u file ñ c bi t.a). Cách khai báo VAR Bi n_t p : FILE.{Gán tong b ng 0} assign(f. if ioresult=0 then write('T p '.dat ñ ghi} write('N = ').dat').a.' có trên ñĩa') else write('T p '.dat'). var i.readln(st). ðó là t p khi ñ nh nghĩa hay khai báo ra. 9.readln(n). Ki m tra t p khi m Xét ño n chương trình sau s ki m tra xem t p F có trên ñĩa hay không VAR st:string.'bai1.Th t c (2) ñ c xong s ñưa c a s t p sang ñ u dòng ti p theo Th t c (3) không ñ c gì c ch ñưa c a s t p sang ñ u dòng ti p theo 8.n:byte. BEGIN Write('Nh p tên t p : ').st).{tong ki u integer} begin clrscr. Sau ñó nh p N s nguyên t bàn phím Ghi các s ñó vào file 'bai1.{ð c N} for i:=1 to n do{Cho i ch y t 1 ñ n N} begin write('Nhap so thu '.{M file bai1.'bai1.{Ghi a vào f} end.{bi n f ki u t p (byte)} tong:integer. Vì v y vi c chuy n d li u t ñĩa vào c u trúc d li u s ñư c th c hi n ngay l p t c.rewrite(f).dat ñ ñ c} for i:=1 to n do{Cho i ch y t 1 ñ n N} begin 4 . Vi c ghi và ñ c d li u ñ i v i t p không ñ nh ki u thư ng xuyên dùng ñ n 2 th t c BLOCKREAD và BLOCKWRITE { Nh p N.{ðóng t p F} tong:=0.dat'.St.i. assign(f.{$I-} reset(f). F:TEXT. Sau ñó m l i file ñó ñ c N s ñó và tính t ng c a chúng (file ki u byte)} uses crt.' không có trên ñĩa') END.n ki u byte} f:file of byte. không nói rõ b n ch t các d li u ghi trong ñó. ta không nói rõ nó ch a gì.' : ').St.{M file bai1. ðó là lí do vì sao t p không ñ nh ki u ñư c dùng r ng rãi trong các ng d ng ñòi h i t c ñ cao.{i.a.reset(f).

'Z']of byte.{ð c t f bi n a} inc(tong.a). var dem:array['A'.dat'.'Z' và ghi vào t p 'bai3.s).{Gán a b ng s ng u nhiên t 1...20).{ch ki u kí t } i. 'bai22.tong).rewrite(f). begin randomize.dat' có 20 ph n t } uses crt..10000 r i sau ñó ghi và file (ki u integer)có tên là s Sau ñó th t o ra file 'bai21. taofile('bai21.{Gán ch b ng kí t ng u nhiên t 'A'. taofile('bai22..{Ghi a vào f} end.{i. var i. { Vi t th t c taofile(s:string.n ki u byte} procedure taofile(s:string.{ðóng t p f} end.. Sau ñó m l i file ñ m xem có bao nhiêu kí t 'A'. end.{Ghi ch vào f} 5 . var f:file of integer.{f ki u t p integer} procedure taofile(s:string..a:integer.dat'.{M file s ñ ghi} for i:=1 to n do{Cho i ch y t 1 ñ n N} begin ch:=chr(random(26)+65)..a).'Z'} write(f. close(f). end.ch).'Z'] ki u byte} f:file of char. { Vi t chương trình tương t như bài t p 2 nhưng l n này t o ra n kí t ng u nhiên trong kho ng t 'A'.{M ng dem['A'.{M i file s ñ ghi} for i:=1 to n do{Cho i ch y t 1 ñ n n} begin a:=random(10000)+1.n:integer) t o ra n s nguyên ng u nhiên t 1.rewrite(f).10). writeln('Tong = '.a ki u integer} begin assign(f.n:integer)..10000} write(f. var i:byte.{Khai báo i.{C ng a vào t ng} end.dat'. bao nhiêu 'B'.{Khai báo i ki u byte} begin assign(f.dat' có 10 ph n t .n:integer).a).read(f.{Xu t t ng} readln.} uses crt.n:byte..{f ki u t p kí t } ch:char.s).

n). var a:array[1.{Xu t ch và s l n xu t hi n} readln. file 2 có n ph n t r i sau ñó ghi vào file bai41. write('M = '). write('N = ').dat'.dat} uses crt.a ki u integer} begin assign(f.{Khai báo i.{M file bai3.{Tăng dem[ch]} end.{Xoá màn hình} randomize. { T o ra 2 file s nguyên ng u nhiên (bài 2) file 1 có m ph n t .m.{ð c N} taofile('bai3.'Z'} if dem[ch]>0 then{N u ch có xu t hi n thì} writeln('Chu '.s).' xuat hien '.{ðóng t p f} end.ch).10000]of integer.a). ð c h t các ph n t c a 2 file vào m ng A..dat'.{ðóng t p f} end. close(f).tg. S p x p l i theo th t tăng d n r i sau ñó ghi vào file bai4.'bai3. for ch:='A' to 'Z' do{Cho ch ch y t 'A'.' lan'). var i. end.dat.j.{Ghi a vào t p f} end. 6 .readln(m).{Xoá màn hình} randomize.reset(f). close(f).rewrite(f).m).end.dat Sau ñó m l i 2 file này.{ð c kí t ch t f} inc(dem[ch]).10000} write(f.{ð c M} write('N = ').n:integer.readln(n).dem[ch].readln(n).a:integer. assign(f. begin clrscr.n:integer).n ki u byte} procedure taofile(s:string. bai42.{M file s ñ ghi} for i:=1 to n do{Cho i ch y t 1 ñ n N} begin a:=random(10000)+1.ch.{ð c N} taofile('bai41.m.dat').{Gán a b ng s ng u nhiên t 1.{M ng a 10000 ph n t ki u integer} f:file of integer.j. begin clrscr.{f ki u t p integer} i.tg.{i...dat ñ ñ c} for i:=1 to n do{Cho i ch y t 1 ñ n N} begin read(f.

{ðóng t p f} for i:=1 to m+n-1 do{Cho i ch y t 1 ñ n m+n-1} for j:=i+1 to m+n do{Cho j ch y t i+1 ñ n m+n} if a[i]>a[j]then{N u a[i]>a[j] thì} begin tg:=a[i]. T o ra file 'bai62.'bai4.dat').{Xâu S} f:text.{Ghi m+n ph n t t a vào f} close(f). Chương trình k t thúc khi nh p chu i S r ng} uses crt.n).txt'.{f ki u t p văn b n} begin clrscr.a[j]:=tg.{ðóng t p f} assign(f.s).{ð c S} if s<>''then writeln(f.a[j]} end.'bai41.dat').{ðóng t p F} end. Ghi chúng vào file 'bai5.a[i]:=a[j].txt' là file văn b n.{Xâu S} 7 .a[i]). assign(f. { Vi t chương trình nh p t file 'bai61.'bai5. var s:string.rewrite(f).dat'. assign(f.dat ñ ñ c} for i:=1 to n do read(f.{Cho ñ n khi S r ng} close(F).{ðóng t p f} end.dat'). assign(f.txt ñ ghi} repeat readln(s).{M file bai41.rewrite(f).{M file bai42. { Vi t chương trình nh p t bàn phím liên t c các xâu S.{ð i ch a[i].{ð c m ph n t t f vào a} close(f).txt' nhưng ñ i t t c kí t thư ng trong file bai61.dat ñ ñ c} for i:=1 to m do read(f.txt thành kí t hoa Hư ng d n WHILE not EOF(F)DO BEGIN ð c xâu S t file F ð i S thành hoa Ghi S vào file F1 END} uses crt.{M file bai5. var s:string.txt').reset(f).{N u S không r ng thì ghi s vào f} until s=''.reset(f).{M file bai4.dat ñ ghi} for i:=1 to m+n do write(f.taofile('bai42.txt' có n i dung tương t như file 'bai61.{ð c n ph n t t f vào a} close(f).a[i]).'bai42.a[m+i]).

f1} end. { Vi t chương trình t o 2 t p văn b n có tên là bai71.{Xâu S} f. ð c các s trong file ñó và ghép vào cu i file bai72.10000} writeln(f.{M file s ñ ghi} for i:=1 to 100 do{Cho i ch y t 1 ñ n 100} begin a:=random(10000)+1.txt').{Ghi xâu S vào F1} end.{M file bai72.{M file bai71.append(f1).{i ki u byte} begin assign(f.close(f1).s).txt m t cách bình thư ng} uses crt. close(F). var s:string.{ð i S thành hoa} writeln(f1.rewrite(f).s).rewrite(f1). M i t p có 100 dòng.'bai72.txt ñ ghi (dùng bi n F1)} while not eof(f)do{Trong khi chưa h t file f thì} begin readln(f.{Ghi a vào f} end.F1 ki u t p văn b n} i:byte.F1 ki u t p văn b n} i:byte. assign(f. begin taofile('bai71.{ðóng f.txt').txt ñ ñ c (dùng bi n F)} assign(f1.reset(f).{ð c xâu S t F} for i:=1 to length(s)do s[i]:=upcase(s[i]).f1:text.reset(f).txt'). close(f).txt').f1:text.'bai61. taofile('bai72.ð c l n lư t các s t t p bai71.{F.a ki u integer} begin assign(f.s).{M file bai62. var i..{Khai báo i.'bai71.'bai62.txt Hư ng d n Sau khi t o file xong thì .f.a:integer.Dùng th t c APPEND ñ i v i bai72.txt').txt ñ ghi vào cu i (dùng bi n F1)} for i:=1 to 100 do{Cho i ch y t 1 ñ n 100} 8 .txt ñ ñ c (dùng bi n F)} assign(f1.{M file bai61.{ðóng t p f} end.{i ki u byte} procedure taofile(s:string).a).{Gán a b ng s ng u nhiên t 1.txt ñ ghi vào cuôi .txt').txt.{F.txt r i ghi vào t p bai72.txt bai72. M i dòng là m t s nguyên ñư c t o ng u nhiên Sau ñó m file bai71.txt.

{ð c S2} assign(f.begin readln(f.s).{M s ñ ñ c} i:=0.' khong ton tai'){N u IOResult<>0 thì không t n t i} else{Ngư c l i} begin Close(F).{ðóng t p f.{Ghi xâu S vào F1} end.readln(s2). N u văn b n ñó dài thì hi n th t ng trang r i sau ñó ñ i cho ngư i dùng b m phím Enter thì hi n th tiêp Hư ng d n i:=0. { Vi t chương trình ñ c t bàn phím chu i S1 và chu i S2.{f ki u t p b t kì} s1.close(f1).{Xâu S} begin clrscr.{i ki u byte} s:string.f1} end.s2).{Gán i=0} 9 .{$I+} if IOResult <> 0 then write('File '.{Xâu S1. { Nh p S. END.{ð c S1} write('S1 = '). WHILE not EOF(F)DO BEGIN ð c và xu t xâu S IF i=23 THEN readln.readln(s).} uses crt.readln(s1).reset(f).s1.{ðóng t p F} rename(F.{Xoá màn hình} write('S = '). close(f).S2} begin clrscr. var f:text.{ð i tên D thành S2} end.{f ki u t p văn b n} i:byte. end.{ð c S} assign(f. N u file có tên S1 t n t i thì ñ i tên S1 thành S2 ngư c l i thông báo file không t n t i} uses crt.s2:string. readln.{ð c xâu s t F} writeln(f1. Vi t chương trình hi n th file văn b n có tên S lên màn hình.{$I-}Reset(f).s1). var f:file.s).s).{Xoá màn hình} write('S1 = ').

{ch ki u kí t } s:string.dat').{Xoá màn hình} write('S = ').{Xu t S} inc(i).f1 ki u t p kí t } ch:char.end.{ðóng t p f.while not eof(f)do{Trong khi chưa h t t p F thì} begin readln(f.ch). close(f).rewrite(f1).) Hư ng d n Ta m file văn b n ñó dư i d ng file kí t r i l n lư t ñ c t ng kí t ñ i mã r i ghi vào file m i Gi i mã thì ch c n ch y l i chương trình mã hoá ñ i v i file ñã mã hoá} uses crt.{Xâu S} begin clrscr.ch).{ð c S} assign(f..{f.LF.f1:file of char.{N u i=23 thì gán i=0 và d ng l i ñ i} end. close(f).f1} end.s).dat ñ ghi (dùng bi n F1)} while not eof(f)do{Trong khi file f chưa h t thì} begin read(f. 10 .{Mã hoá ch} write(f1.{ð c S} writeln(s). { Vi t chương trình mã hoá m t file văn b n b ng cách : ð i các kí t trong file văn b n ñó thành kí t có mã = (255-mã_kí_t _cũ) (ñ i t t c các kí t k c kí t CR.{M file mahoa..{M file S ñ ñ c (dùng bi n F)} assign(f1.readln(s).{Ghi ch vào f1} end.{Tăng i} if i=23 then begin i:=0.close(f1).s).reset(f).readln. var f.{ð c kí t ch t f} ch:=chr(255-ord(ch)).'mahoa.{ðóng t p F} end.

Sign up to vote on this title
UsefulNot useful