Dữ liệu kiểu File trong Pascal
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
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 lu tr÷ trong bé nhí ngoµi nh ®Üa cøng, ®Üa mÒm...§iÒu
®ã cã nghÜa lµ tÖp ®îc lu 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 nhng d÷ liÖu nµo
cÇn lu 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;
1
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);
VD : ASSIGN(F1,'NGUYENTO.DAT');
REWRITE(F1);
Sau khi më tÖp xong, tÖp sÏ rçng v× cha cã phÇn tö nµo, cöa sæ tÖp
sÏ kh«ng cã gi¸ trÞ x¸c ®Þnh v× nã trá vµo cuèi tÖp (EOF). L y ý, 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.
b.Ghi c¸c gi¸ trÞ vµo tÖp víi thñ tôc WRITE
C¸ch viÕt
Write (BiÕn_tÖp, Item1, Item2, ... , ItemN);
Trong ®ã Item1, Item2,...ItemN lµ c¸c h»ng, biÕn, 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,J,K lµ c¸c biÕn INTEGER, ta cã thÓ viÕt :
Write (F1, 3, I+2*J, K, 5);
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);
4. §äc d÷ liÖu tõ mét tÖp ®· cã
a. Më tÖp ®Ó ®äc
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;
RESET (BiÕn_TÖp);
VD : ASSIGN(F1,'NGUYENTO.DAT');
RESET(F1);
Sau khi më tÖp xong, 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
2
b.§äc d÷ liÖu tõ tÖp
C¸ch viÕt
Read (BiÕn_tÖp, Var1, Var2, ... , VarN);
Trong ®ã Var1, Var2,...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, tøc lµ cöa sæ tÖp cha trá ®Õn EOF. 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, X);
..................
END;
c.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);
5.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
C¸ch viÕt
SEEK (BiÕn_TÖp, 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. 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.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, St) : ®æi tªn tÖp thµnh St (kiÓu String)
7.TÖp v¨n b¶n (TEXT FILE)
3
a. C¸ch khai b¸o
VAR BiÕn_tÖp : TEXT;
VD :
VAR F1,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. §ã lµ cÆp kÝ tù
®iÒu khiÓn :
- CR (Carriage Return) : nh¶y vÒ ®Çu dßng, m· sè ASCII=13
- 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.Ghi vµo tÖp v¨n b¶n
Cã 3 thñ tôc
Write(BiÕn_TÖp, Item1, Item2,...ItemN);
Writeln(BiÕn_TÖp, Item1, Item2,...ItemN);
Writeln(BiÕn_TÖp);
Trong ®ã Item1, Item2,...ItemN lµ c¸c h»ng, biÕn, biÓu thøc cã kiÓu
®¬n gi¶n nh Integer, real, Boolean, String.
C¸ch viÕt vµo tÖp v¨n b¶n còng nh c¸ch viÕt ra mµn h×nh nhng kh¸c
víi mµn h×nh chØ h¹n chÕ cã 80 dßng x 25 cét. Cßn tÖp v¨n b¶n cã sè
dßng, cét kh«ng giíi h¹n (xem l¹i Ch¬ng 3 : Thñ tôc vµo ra d÷ liÖu)
c.§ä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, boolean tõ tÖp v¨n b¶n th«ng qua c¸c thñ tôc
Read(BiÕn_TÖp, Var1, Var2,...VarN); (1)
Readln(BiÕn_TÖp, Var1, Var2,...VarN); (2)
Readln(BiÕn_TÖp); (3)
4
Trong ®ã Var1, Var2,...VarN lµ c¸c biÕn kiÓu Char, Integer, String,
Real, Boolean.
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. 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;
F:TEXT;
BEGIN
Write('NhËp tªn tÖp : ');readln(st);
assign(f,st);{$I-} reset(f);
if ioresult=0 then write('TÖp ',St,' cã trªn ®Üa')
else write('TÖp ',St,' kh«ng cã trªn ®Üa')
END;
9. TÖp kh«ng ®Þnh kiÓu
TÖp kh«ng ®Þnh kiÓu lµ mét kiÓu file ®Æc biÖt. §ã lµ tÖp khi ®Þnh
nghÜa hay khai b¸o ra, ta kh«ng nãi râ nã chøa g×, kh«ng nãi râ b¶n
chÊt c¸c d÷ liÖu ghi trong ®ã. 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. §ã 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.
C¸ch khai b¸o
VAR BiÕn_tÖp : FILE;
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. Sau ®ã nhËp N sè nguyªn tõ bµn phÝm Ghi c¸c sè ®ã
vµo file 'bai1.dat'. Sau ®ã më l¹i file ®ã ®äc N sè ®ã vµ tÝnh
tæng cña chóng (file kiÓu byte)}
uses crt;
var
i,a,n:byte;{i,a,n kiÓu byte}
f:file of byte;{biÕn f kiÓu tÖp (byte)}
5
tong:integer;{tong kiÓu integer}
begin
clrscr;{Xo¸ mµn h×nh}
assign(f,'bai1.dat');rewrite(f);{Më file bai1.dat ®Ó ghi}
write('N = ');readln(n);{§äc N}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N}
begin
write('Nhap so thu ',i,' : ');readln(a);{§äc sè thø i vµo a}
write(f,a);{Ghi a vµo f}
end;
close(f);{§ãng tÖp F}
tong:=0;{G¸n tong b»ng 0}
assign(f,'bai1.dat');reset(f);{Më file bai1.dat ®Ó ®äc}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N}
begin
read(f,a);{§äc tõ f biÕn a}
inc(tong,a);{Céng a vµo tæng}
end;
writeln('Tong = ',tong);{XuÊt tæng}
readln;
end.
{ ViÕt thñ tôc taofile(s:string;n:integer) t¹o ra n sè nguyªn
ngÉu nhiªn tõ 1..10000 råi sau ®ã ghi vµ file (kiÓu integer)cã
tªn lµ s
Sau ®ã thö t¹o ra file 'bai21.dat' cã 10 phÇn tö, 'bai22.dat' cã
20 phÇn tö}
uses crt;
var
f:file of integer;{f kiÓu tÖp integer}
procedure taofile(s:string;n:integer);
var i,a:integer;{Khai b¸o i,a kiÓu integer}
begin
assign(f,s);rewrite(f);{Mëi file s ®Ó ghi}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n}
begin
6
a:=random(10000)+1;{G¸n a b»ng sè ngÉu nhiªn tõ 1..10000}
write(f,a);{Ghi a vµo f}
end;
close(f);{§ãng tÖp f}
end;
begin
randomize;
taofile('bai21.dat',10);
taofile('bai22.dat',20);
end.
{ 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'..'Z' vµ ghi vµo tÖp
'bai3.dat'. Sau ®ã më l¹i file ®Õm xem cã bao nhiªu kÝ tù 'A',
bao nhiªu 'B'....}
uses crt;
var
dem:array['A'..'Z']of byte;{M¶ng dem['A'..'Z'] kiÓu byte}
f:file of char;{f kiÓu tÖp kÝ tù}
ch:char;{ch kiÓu kÝ tù}
i,n:byte;{i,n kiÓu byte}
procedure taofile(s:string;n:integer);
var i:byte;{Khai b¸o i kiÓu byte}
begin
assign(f,s);rewrite(f);{Më file s ®Ó ghi}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N}
begin
ch:=chr(random(26)+65);{G¸n ch b»ng kÝ tù ngÉu nhiªn tõ 'A'..'Z'}
write(f,ch);{Ghi ch vµo f}
end;
close(f);{§ãng tÖp f}
end;
begin
clrscr;{Xo¸ mµn h×nh}
randomize;
write('N = ');readln(n);{§äc N}
7
taofile('bai3.dat',n);
assign(f,'bai3.dat');reset(f);{Më file bai3.dat ®Ó ®äc}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N}
begin
read(f,ch);{§äc kÝ tù ch tõ f}
inc(dem[ch]);{T¨ng dem[ch]}
end;
for ch:='A' to 'Z' do{Cho ch ch¹y tõ 'A'..'Z'}
if dem[ch]>0 then{NÕu ch cã xuÊt hiÖn th×}
writeln('Chu ',ch,' xuat hien ',dem[ch],' lan');{XuÊt ch vµ sè lÇn xuÊt
hiÖn}
readln;
end.
{ T¹o ra 2 file sè nguyªn ngÉu nhiªn (bµi 2) file 1 cã m phÇn tö,
file 2 cã n phÇn tö råi sau ®ã ghi vµo file bai41.dat, bai42.dat
Sau ®ã më l¹i 2 file nµy. §äc hÕt c¸c phÇn tö cña 2 file vµo
m¶ng A. S¾p xÕp l¹i theo thø tù t¨ng dÇn råi sau ®ã ghi vµo
file bai4.dat}
uses crt;
var
a:array[1..10000]of integer;{M¶ng a 10000 phÇn tö kiÓu integer}
f:file of integer;{f kiÓu tÖp integer}
i,j,tg,m,n:integer;{i,j,tg,m,n kiÓu byte}
procedure taofile(s:string;n:integer);
var i,a:integer;{Khai b¸o i,a kiÓu integer}
begin
assign(f,s);rewrite(f);{Më file s ®Ó ghi}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N}
begin
a:=random(10000)+1;{G¸n a b»ng sè ngÉu nhiªn tõ 1..10000}
write(f,a);{Ghi a vµo tÖp f}
end;
close(f);{§ãng tÖp f}
end;
begin
8
clrscr;{Xo¸ mµn h×nh}
randomize;
write('M = ');readln(m);{§äc M}
write('N = ');readln(n);{§äc N}
taofile('bai41.dat',m);
taofile('bai42.dat',n);
assign(f,'bai41.dat');reset(f);{Më file bai41.dat ®Ó ®äc}
for i:=1 to m do read(f,a[i]);{§äc m phÇn tö tö f vµo a}
close(f);{§ãng tÖp f}
assign(f,'bai42.dat');reset(f);{Më file bai42.dat ®Ó ®äc}
for i:=1 to n do read(f,a[m+i]);{§äc n phÇn tö tö f vµo a}
close(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];a[i]:=a[j];a[j]:=tg;{§æi chç a[i],a[j]}
end;
assign(f,'bai4.dat');rewrite(f);{Më file bai4.dat ®Ó ghi}
for i:=1 to m+n do write(f,a[i]);{Ghi m+n phÇn tö tõ a vµo f}
close(f);{§ãng tÖp f}
end.
{ ViÕt ch¬ng tr×nh nhËp tõ bµn phÝm liªn tôc c¸c x©u S. Ghi
chóng vµo file 'bai5.txt'. Ch¬ng tr×nh kÕt thóc khi nhËp chuçi
S rçng}
uses crt;
var
s:string;{X©u S}
f:text;{f kiÓu tÖp v¨n b¶n}
begin
clrscr;
assign(f,'bai5.txt');rewrite(f);{Më file bai5.txt ®Ó ghi}
repeat
readln(s);{§äc S}
if s''then writeln(f,s);{NÕu S kh«ng rçng th× ghi s vµo f}
9
until s='';{Cho ®Õn khi S rçng}
close(F);{§ãng tÖp F}
end.
{ ViÕt ch¬ng tr×nh nhËp tõ file 'bai61.txt' lµ file v¨n b¶n. T¹o
ra file 'bai62.txt' cã néi dung t¬ng tù nh file 'bai61.txt' nh ng
®æi tÊt c¶ kÝ tù th êng trong file bai61.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;
var
s:string;{X©u S}
f,f1:text;{F,F1 kiÓu tÖp v¨n b¶n}
i:byte;{i kiÓu byte}
begin
assign(f,'bai61.txt');reset(f);{Më file bai61.txt ®Ó ®äc (dïng biÕn F)}
assign(f1,'bai62.txt');rewrite(f1);{Më file bai62.txt ®Ó ghi (dïng biÕn
F1)}
while not eof(f)do{Trong khi cha hÕt file f th×}
begin
readln(f,s);{§äc x©u S tõ F}
for i:=1 to length(s)do s[i]:=upcase(s[i]);{§æi S thµnh hoa}
writeln(f1,s);{Ghi x©u S vµo F1}
end;
close(F);close(f1);{§ãng f,f1}
end.
{ ViÕt ch¬ng tr×nh t¹o 2 tÖp v¨n b¶n cã tªn lµ bai71.txt
bai72.txt. Mçi tÖp cã 100 dßng. Mçi dßng lµ mét sè nguyªn ®îc
t¹o ngÉu nhiªn
10
Sau ®ã më file bai71.txt. §äc c¸c sè trong file ®ã vµ ghÐp vµo
cuèi file bai72.txt
Híng dÉn
Sau khi t¹o file xong th×
- Dïng thñ tôc APPEND ®èi víi bai72.txt ®Ó ghi vµo cu«i
- §äc lÇn lît c¸c sè tõ tÖp bai71.txt råi ghi vµo tÖp bai72.txt mét c¸ch
b×nh th êng}
uses crt;
var
s:string;{X©u S}
f,f1:text;{F,F1 kiÓu tÖp v¨n b¶n}
i:byte;{i kiÓu byte}
procedure taofile(s:string);
var i,a:integer;{Khai b¸o i,a kiÓu integer}
begin
assign(f,s);rewrite(f);{Më file s ®Ó ghi}
for i:=1 to 100 do{Cho i ch¹y tõ 1 ®Õn 100}
begin
a:=random(10000)+1;{G¸n a b»ng sè ngÉu nhiªn tõ 1..10000}
writeln(f,a);{Ghi a vµo f}
end;
close(f);{§ãng tÖp f}
end;
begin
taofile('bai71.txt');
taofile('bai72.txt');
assign(f,'bai71.txt');reset(f);{Më file bai71.txt ®Ó ®äc (dïng biÕn F)}
assign(f1,'bai72.txt');append(f1);{Më file bai72.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}
begin
readln(f,s);{§äc x©u s tõ F}
writeln(f1,s);{Ghi x©u S vµo F1}
end;
close(f);close(f1);{§ãng tÖp f,f1}
11
end.
{ ViÕt ch¬ng tr×nh ®äc tõ bµn phÝm chuçi S1 vµ chuçi S2.
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;
var
f:file;{f kiÓu tÖp bÊt k×}
s1,s2:string;{X©u S1,S2}
begin
clrscr;{Xo¸ mµn h×nh}
write('S1 = ');readln(s1);{§äc S1}
write('S1 = ');readln(s2);{§äc S2}
assign(f,s1);{$I-}Reset(f);{$I+}
if IOResult 0 then write('File ',s1,' khong ton tai'){NÕu
IOResult0 th× kh«ng tån t¹i}
else{Ngîc l¹i}
begin
Close(F);{§ãng tÖp F}
rename(F,s2);{§æi tªn D thµnh S2}
end;
readln;
end.
{ NhËp S. ViÕt ch¬ng tr×nh hiÓn thÞ file v¨n b¶n cã tªn S lªn
mµn h×nh. 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;
WHILE not EOF(F)DO
BEGIN
§äc vµ xuÊt x©u S
IF i=23 THEN readln;
END;}
uses crt;
var f:text;{f kiÓu tÖp v¨n b¶n}
12
i:byte;{i kiÓu byte}
s:string;{X©u S}
begin
clrscr;{Xo¸ mµn h×nh}
write('S = ');readln(s);{§äc S}
assign(f,s);reset(f);{Më s ®Ó ®äc}
i:=0;{G¸n i=0}
while not eof(f)do{Trong khi cha hÕt tÖp F th×}
begin
readln(f,s);{§äc S}
writeln(s);{XuÊt S}
inc(i);{T¨ng i}
if i=23 then begin i:=0;readln;end;{NÕu i=23 th× g¸n i=0 vµ dõng l¹i
®îi}
end;
close(f);{§ãng tÖp F}
end.
{ 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,LF...)
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;
var
f,f1:file of char;{f,f1 kiÓu tÖp kÝ tù}
ch:char;{ch kiÓu kÝ tù}
s:string;{X©u S}
begin
clrscr;{Xo¸ mµn h×nh}
write('S = ');readln(s);{§äc S}
assign(f,s);reset(f);{Më file S ®Ó ®äc (dïng biÕn F)}
assign(f1,'mahoa.dat');rewrite(f1);{Më file mahoa.dat ®Ó ghi (dïng
biÕn F1)}
13
while not eof(f)do{Trong khi file f cha hÕt th×}
begin
read(f,ch);{§äc kÝ tù ch tõ f}
ch:=chr(255-ord(ch));{M· ho¸ ch}
write(f1,ch);{Ghi ch vµo f1}
end;
close(f);close(f1);{§ãng tÖp f,f1}
end.
14