Kiểu tệp (file) trong Pascal

Thứ sáu - 31/07/2020 10:30
1. KHÁI NIỆM
Các kiểu dữ liệu ta đã khảo sát đều hiện diện trong bộ nhớ RAM khi khởi động chương trình, nhưng khi chấm dứt chương trình, các dữ liệu bị xóa mất, vì vậy, việc lưu trữ dữ liệu lâu dài hoặc sử dụng lại nhiều lần không thể thực hiện được. PASCAL đã tạo ra một kiểu cho phép ta lưu trữ dữ liệu lâu dài trên đĩa mềm hoặc đĩa cứng gọi là dữ liệu kiểu File.
2. ĐỊNH NGHĨA
File là một cấu trúc dữ liệu gồm nhiều phần tử cùng kiểu được nhóm lại với nhau tạo thành một dây. Thông thường có 2 loại File:
- File có kiểu: Mỗi phần tử của File là một dữ liệu kiểu cơ sở hay kiểu Record.
- File dạng TEXT: Dữ liệu được lưu trữ trên đĩa có thành phần cơ bản là các kí tự, cấu trúc lại thành các dòng, mỗi dòng được kết thúc bởi dấu Eoln, File được kết thúc bởi dấu Eof.

3. CÁCH KHAI BÁO
Cách viết Ý nghhĩa
TYPE        
F: FILE OF KPT
VAR
X, Y, F;
ASSIGN (Filevar, Tên File)
REWRITE (Biến File);
WRITE (Filevar, X1; X2, ..., Xn);
CLOSE (Filevar);
ASSIGN (Filevar, Ten File)
RESET (Filevar);
READ (Filevar, X1; X2, ..., Xn)
Định nghĩa kiểu R là File của các kiểu phần tử.
Biến X, Y thuộc kiểu F

Mở File để chuẩn bị viết.

Viết các giá trị X1, X2, ..., Xn vào File.
Đóng File.
Mở File để chuẩn đọc.

Đọc các giá trị của File ra các biến X1; X2, ..., Xn.

4. CÁC THAO TÁC TRÊN FILE
• ASSIGN (filevar, filename) filevar là 1 biến file, filename là 1 biểu thức kiểu string.
Tác dụng là gán 1 tên thực sự filename cho 1 biến file, filename là tên của file khi ghi lên đĩa.
• REWRITE (filever,x)
x là 1 hay nhiều biến thuộc kiểu thành phần của kiểu file (nếu nhiều thì phân cách nhau bởi dấu phẩy)
■ Ví dụ: Read (f 1, HK, KT);
• WRITE (filevar, x)
Ghi biến x lên file.
• CLOSE (filevar)
Đóng file để tránh bị hư hao, mất mát dữ liệu.
SEEK (Filevar, n)
- n là biểu thức integer
- Các phần tử của file được đánh số từ 0, 1, ...n
- Seek (filevar, n) sẽ cho phép ta truy xuất phần tử được đánh số n của file.
• ERASE (filevar)
- Để xóa 1 file
- File cần xóa phải được đóng rồi.
• RENAME (filevar, newname):
Đổi tên file thành newname.

5. CÁC HÀM TRÊN FILE
Mỗi file có 1 con trỏ như là người chỉ đường, khi truy xuất phần tử nào đó của file xong, con trỏ sẽ chỉ đến phần tử kế tiếp.
• EOF (filevar)
Cho trị là true nếu hết file hay con trỏ có vị trí cuối file.
• FILEPOS (filevar)
Cho trị kiểu integer.
Cho biết vị trí hiện tại của con trỏ file.
• FILESIZE (filevar)
Cho trị kiểu integer.
Cho biết chiều dài của file.

■ Ví dụ 1:
Viết chương trình ghi vào đĩa 1.00 số tự nhiên (từ 1 đến 100).
Program GHI;
var
    i: integer;
    f: file of integer;
Begin
    Assign (f, INTEGER.GHI')
    Rewrite(f);
For i:= to 100 do write(f,i);
    Close(f)
End.

■ Ví dụ 2:
Viết chương trình nhập điểm các môn Toán, Lý, Hóa của từng học sinh và ghi vào đĩa.
Program Nhap;
Type
      Diem = Record
         Hoten: String[20];
         T, L, H: integer;
      End;
      fd = file of Diem;
      Var
           hs: Diem;
           f: fd;
           b: boolean;
      Begin
          Assign (f .DIEM.DTA);
          Rewrite(f);
          b := True;
        While b do
              With hs do
               Begin
                   Write(Họ và tên Học sinh:');
                   Readln(Hoten);
                   If Hoten = ' ' then b:= false
                   else
                     Begin
                         Write ('Điểm Toán ='); Readln(T);
                         Write ('Điểm Lý ='); Readln(L);
                         Write ('Điểm Hóa ='); Readln(H);
                         Write (f, hs);
                      End;
                   End;
               Close(f);
          End.

■ Ví dụ 3:
Viết chương trình thực hiện các việc sau:
a. Đọc từ bàn phím một danh sách gồm họ, tên, môn thi thứ nhất, điểm môn thi thứ nhất, môn thi thứ hai, điểm môn thi thứ hai.
b. Ghi vào đĩa mềm với tên File QLHT.
c. Đọc dữ liệu từ File (QLHT, tìm những học sinh phải thi lại (có ít nhất một môn không đạt)). Đưa số thứ tự, họ tên, các môn thi phải thi lại và điếm tương ứng ra màn hình.
Program THI;
     USED Crt;
     TYPE
          Phdiem = record
              ht: string[25];
              mhl: string[10];
              d1: real;
              mh2: string [10];
              d2: real;
          end;
     VAR
          Pd : Phdiem;
          f: file of Phdiem;
          n, i, tt: integer;
      BEGIN
           ClrScr;
           Write ('So phieu diem n =');
           Readln(n);
         Assign (F, 'QLHT');
         ReWrite (F);
         For i:= 1 to n do
              With Pd do
                 Begin
                     Writeln ('Vao phieu diem thu', i);
                     Write ('Ho va ten:');
                     readln(ht);
                     Write ('Mon thu 1:');
                     Readln (mhl);
                     Write ( Diem mon thu 1 :’);
                     Readln (d1);
                     Write ('Mon thu 2 :’);
                     Readln (mh2);
                     Write ( Diem mon thu 2:')
                     Readln (d2);
                     Write (F, Pd);
                   end;
              Close(F);
              ClrScr;
              Writeln ('DANH SACH HOC SINH THI LAI');
              Writeln;
              Assign (F, 'QLHT');
              Reset(F);
              tt := 0;
              While not Eof (F) do
                   Begin;
                       Read (R, Pd);
                      With Pd do
                           If (d1 < 5) or (d2 < 5) then
                                Begin;
                                Inc(tt);
                                   Write (tt: 3, ht,’’: 30-Lenght(ht));
                                    If d1 < 5 then
Write (mh1, ‘’: 7-Lenght(mh1),' :, d1: 4 : 1,’ ‘: 8);
                                    If d2 < 5 then
                                       Write(mh2, ‘’: 7-Lenght(mh2),':, d2: 4: 1);
Writeln;
    End;
End;
Close(F);
Writeln;
Write ('An ENTER de ket thuc !');
Readln;
END.

■ Ví dụ 4:
Lập chương trình kiểm tra xem một file có tên đưa từ bàn phím có trong đĩa ở ổ chủ không? Nếu có thì cho biết độ dài của nó. Tổ chức chương trình hội thoại để thực hiện nhiều lần cho đến khi ấn phím Esc.
Program KT-File;
USE Crt;
VAR
F: file of byte;
s: string[79];
Ch: Char;
BEGIN
ClrScr;
Gotoxy(12,25);
Write('An phim bat ki de tiep tuc');
Write(‘An ESC de ra khoi chuong trinh');
Window (1,1,80,23); {đặt cửa sổ làm việc}
Gotoxy(l,l);
Repeat
Write(‘Cho biet ten file can tim:');
Readln(S);
assign(F,S);
{$I-}
Reset(F);
{$I+}
If IOResult = 0 then
Begin
Write ('File',S' co kich thuoc la:');
Writein (Filesize(f), 'bytes.');
End;
Else
Writeln (‘Khong tim thay File',S' !'); Writeln;
Ch:= ReadKey;
Until ch = 27;
Window(l,l,80,25); {Trả lại cửa sổ ngầm định}
END.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 888new
69VN ⇔  ⇔ F168 ⇔ 123b ⇔ 566

Vmax ⇔ 78Win ⇔ https://xn88.bio/
GK88 ⇔ SHBET ⇔  ⇔ u888 ⇔ 789f
fo88vic88 ⇔ u888 ⇔ 888p ⇔ 69vn
BL555 ⇔ 99OK ⇔ KJC ⇔ Link MB66
mv66af88 ⇔ 8x bet ⇔ 88AA
789BET ⇔ LC88 ⇔ BL555 ⇔ 789f
999slot ⇔ 789F ⇔ MB66 ⇔ 8xbet
https://789betcom0.com/ ⇔ https://hi88.baby/
UU88 ⇔ au88 ⇔ win678 ⇔ https://xx88.ink/
zo88 ⇔ ev99 ⇔ 888b ⇔ go88 ⇔ kèo nhà cái
cm88 ⇔ 88aa ⇔ Kkwin ⇔ tv88 ⇔ 
mb66.racing ⇔ u888 ⇔ FO88 ⇔ 88xx
188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8
99ok ⇔ 88fc ⇔ iwinclub ⇔ vn88 ⇔ 69vn
m88 ⇔ 56win ⇔ P3 ⇔ 8s ⇔ RWIN
vn23 ⇔ SHBET ⇔ kubet ⇔ 888new
NOHU ⇔ hi88 ⇔ https://fun88.social/
thabet ⇔ SV88 ⇔ https://vnalo789c.com/
https://qq88.fun/ ⇔ f168 ⇔ 888New ⇔ QQ88
daga ⇔ SHBET ⇔ keo nha cai ⇔ bl-555.site
https://bshbet.com/ ⇔ https://uk88.rocks
kkwin ⇔ KUWIN ⇔ 8xbet ⇔ RR88 ⇔ 188v
mb6678win ⇔ https://hello8880.net/
tv88UU88 ⇔ HM88 ⇔ MB66 ⇔ TV88
NOHU ⇔ 77ball ⇔ 32win ⇔ Kuwin
ek333 ⇔ xoso66 ⇔ nổ hũ ⇔ SUN WIN
X88 ⇔ 78win ⇔ Jun88 ⇔ uu88
NOHU ⇔  KINGFUN ⇔ https://789club24.com/
https://98winlive.com/ ⇔ https://789win.voyage/
https://bet88yk.com/ ⇔ https://alo789apk.app/
https://33win100.com/ ⇔ https://u888ny.com/
alo789 ⇔ OK8386 ⇔ x88 ⇔ SHBET
https://hi88.voyage/ ⇔ https://79kings.blue/
https://dom88.jp.net/ ⇔ https://hello880.net/
https://789club60.com/ ⇔ https://blc88.net/
23win ⇔ 6ff ⇔ f168 ⇔ xoso66 ⇔ bomwin
nhatvip ⇔ https://789club24.com/ ⇔ 789 bet
dola789 ⇔ 8xbet ⇔ 78win ⇔ QQ88
XX88 ⇔ ev99 ⇔ 69vn ⇔ rr88 ⇔ rr88
Uu88 ⇔ win456 ⇔ Tài xỉu online ⇔ XN88
https://33win101.com/ ⇔ oxbet ⇔ Slot365
78wind.com ⇔ https://shbet.gg/ ⇔ XX88
 ⇔  ⇔ OKFUN ⇔ ee88 ⇔ 12bet
hitclub ⇔ Kkwin ⇔ VankhanhTV ⇔ Hay 88
3WIN ⇔ WIN678 ⇔ 
68 game bàiEE88 ⇔ 77BET ⇔ 12BET
vmaxVMAX ⇔ ok9 football ⇔ K8CC
https://hi88o.com/ ⇔ https://hi88.gives/
https://qq88.co.com/ ⇔ https://f168.law/
8xbet ⇔ https://shbetk.net/ ⇔ RIKVIP ⇔ rikvip
https://mm88.us.com/ ⇔ 79king
ww88 ⇔ https://78win.bot/ ⇔ https://13win.vegas/
https://lc88o.com/ ⇔ https://hi88.uno/
https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn
Slot365 ⇔ alo88 ⇔ UU88 ⇔ 32 win
888TO ⇔ wstar77 ⇔ 73bet ⇔ 888b
11uu ⇔ 123B ⇔ 78win ⇔ Slot365
789f ⇔ mv88 ⇔ 789f ⇔ Bsport
888New ⇔ EV99 ⇔ 89bet ⇔ sunwin
tỷ lệ kèo nhà cái hôm nay ⇔ BIN88
https://f8bet0.world ⇔ https://qq88.studio/
https://nh8811.com/ ⇔ Leo88 ⇔ 78win
88CLB ⇔ SV388 ⇔ https://cakhiatv88.net/
7m ⇔ i9 Bet ⇔ Tv88 ⇔ hi88 ⇔ 888To
 ⇔  ⇔ VN168
Bong88 ⇔ socolive ⇔ bet88 ⇔ 555WIN
https://au88.black/ ⇔ trực tiếp bóng đá
https://king88clb.com/ ⇔ https://f168hi.com/
sv66ax88 ⇔ 88clb ⇔ Nn88
https://32win.vc/ ⇔ 888new ⇔ PG88 ⇔ PG88
EE88 ⇔ SanClub ⇔ F168 ⇔ QQ88
hb88 ⇔ Vin777 ⇔ SV388 ⇔ MV66 ⇔ 23WIN
https://vankhanhtvv.com/ ⇔ Nhà Cái LC88
https://789fnew.com/ ⇔ https://u888lm.com/
https://sv66.coupons/ ⇔ https://f168.tech/
https://8kbetbh.com/ ⇔ https://ta88club.kim/
socolivemv88 ⇔ https://rr88.com.se/
https://bet168.com.co/ ⇔ https://8kbet.co/
https://888b-link.cc/ ⇔ https://sunwinn.deal/
88gokingfun ⇔ https://bong88vn.wiki/
SHBET ⇔ https://shbet.racing/
RR99 ⇔ U888 ⇔ OK8386 ⇔ Mv88
MM88 ⇔ 33win ⇔ BL555 ⇔ 69vn
hi88com ⇔ https://w88link1.com/
xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa
https://fun88link0.com/ ⇔ https://fun88link1.com/
https://188betlink0.com/ ⇔ https://188betlink1.com/
https://188betlink2.com/ ⇔ https://w88link0.com/
thabet ⇔ 888P ⇔ 11UU ⇔ EV88 ⇔ 789F
69vn77win ⇔ xx88 ⇔ 78win
https://okfun.bz/ ⇔ 
 ⇔ 
https://i9betz4.com/ ⇔ đá gà 88
w88link2.com ⇔ w88link3.com ⇔ luck8
https://8dayvip.mobi/ ⇔ https://8dayvip.com/
QQ88 Com ⇔ af88 ⇔ https://79kingsr.com/
https://pg99yk.com/ ⇔  hm88.com ⇔ J88
https://luongson161.tv/ ⇔ 78WIN ⇔ MB66
78win ⇔ U888 ⇔ nn88 ⇔ 99win ⇔ hi88
https://8kbettt.com/ ⇔ https://hi88.biz/
https://thabetcasino.us.com/ ⇔ 789Win ⇔ vn88
https://hello88net.com/ ⇔ https://pg88.jpn.com/
https://az8888.org/ ⇔ https://fly88.gifts/
lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88
GO8 ⇔ 28BET ⇔ sv388 ⇔ KWIN
tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win
BL555 ⇔ 23win ⇔ SV388 ⇔ SHBET ⇔ hitclub
Game bài đổi thưởng ⇔ https://saobet.shop/
https://99ok99ok.com/ ⇔ UU88 ⇔ HM88
https://bet88.ventures/ ⇔ bongdalu22.com
zx88 ⇔ ev99 ⇔ 8s ⇔ bet8s ⇔ QQ88
https://f168.name/ ⇔ https://13wincom.io/
Nhà cái vn88 ⇔ Nhà Cái QQ88
https://fb888.in.net/ ⇔ https://kjc.ac/
https://onbet.in.net/ ⇔ link vn88 ⇔ HZ88
http://58win.trading/ ⇔ https://qq88.gives/
bong88 ⇔ sky88 ⇔ Cổng game rikvip ⇔ ev99
79KING ⇔ Bet88 ⇔ XN88 ⇔ i9bet ⇔ VN23
https://kkwin.fan/ ⇔ https://555win.bike/
https://f8bet.courses/ ⇔ https://go8play.com/
https://lc88.bar/ ⇔ 789f ⇔ abc8 ⇔ good88
789win ⇔ Hitclub ⇔ https://f8bet80.one/
lương sơn tv ⇔ vwin ⇔ sut88 ⇔ vua88
hb88 ⇔ https://okfun.center/ ⇔ 68win
LC88 ⇔ 79king ⇔ https://hi88.tours/
https://ok9.charity/ ⇔ https://kkwin68.info/
https://ee88com.me/ ⇔ https://new88blog.org
nổ hũ ⇔ https://uu88vn.com ⇔ LC88
nohu ⇔ lc88 com ⇔ 69VN ⇔ Ok365 ⇔ 6FF
Nohu90 ⇔ go8 ⇔ 22vip ⇔ af88 ⇔ 86bet
five88 ⇔ 68win ⇔ 11uu ⇔ https://go8.beer/
đánh bài tiến lên ⇔ sin88 ⇔ 9win ⇔ 88i
https://u888.ac/ ⇔ https://king88com.uk.net/
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây