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í ⇔ j888
Kênh 90Phut TV full HD ⇔ Gemwin
iwin ⇔ https://789bet.kitchen/ ⇔ go 88
truc tiep bong da xoilac tv mien phi
link trực tiếp
bóng đá xôi lạc tv hôm nay ⇔ link xem truc tiep bong da xoilac tv ⇔ https://104.248.99.177/
link trực tiếp bóng đá xoilactv tốc độ cao ⇔ xem bóng đá cà khịa tv trực tuyến hôm nay
hitclub ⇔ https://nhatvip.rocks ⇔ 
ABC8 ⇔ https://ww88.supply/ ⇔ W88
sin88.run ⇔ TDTC ⇔ 789BET ⇔ BJ88
33win ⇔ 789club ⇔ BJ88 ⇔ 789win
https://789betcom0.com/ ⇔ https://hi88.baby/
https://j88cem.com/ ⇔ iwin ⇔ iwin
iwin ⇔  ⇔ iwin ⇔ ko66
iwin ⇔ bet88 ⇔ iwin ⇔ 23win
FB88 ⇔ Hb88 ⇔ BJ88 ⇔ Fun222
789Bet ⇔ 789Bet ⇔ 33WIN
 ⇔  ⇔ kuwin ⇔ VIPwin
Go88 ⇔ 23win ⇔ 789club ⇔ 69VN
BJ88 ⇔ Kuwin ⇔ hi88 ⇔ 789BET
77win tosafe ⇔ https://okvipno1.com/
8K BET ⇔ Go88 ⇔ 789club
69vn ⇔ hi88 ⇔ j88
99OK ⇔ jun888 เครดิตฟร ⇔ Bet88
 ⇔ https://88clb.promo/
https://meijia789.com/ ⇔ BK8 ⇔ 33WIN
https://f8bet0.tv/ ⇔ https://choangclub.bar
https://vinbet.fun ⇔ https://uk88.rocks
Hay88 ⇔ https://33win.boutique/
789club ⇔ BJ88 ⇔ ABC8 ⇔ iwin
sunwin ⇔ sunwin ⇔ hi88 ⇔ hi88
go 88 ⇔ go88 ⇔ go88 ⇔ sun win
sun win ⇔ sunwin ⇔ sunwin ⇔ iwinclub
iwin club ⇔ iwin ⇔ iwinclub ⇔ iwin club
iwin ⇔ hitclub ⇔ hitclub ⇔ v9bet
v9bet ⇔ v9 bet ⇔ v9bet ⇔ v9 bet
v9 bet ⇔ rikvip ⇔ hitclub ⇔ hitclub
Go88 ⇔ Go88 ⇔ Sunwin ⇔ Sunwin
iwin ⇔ iwin ⇔ rikvip ⇔ rikvip
 v9bet ⇔ v9bet ⇔ iWin ⇔ 23WIN
https://j88.so/ ⇔ https://projectelpis.org/
https://33win103.com/ ⇔ SV66 ⇔ 
888B ⇔ 188BET ⇔ J88
https://ww88vs.com/ ⇔ 789BET
https://188bethnv.com/ ⇔ https://win79og.com/
Cakhiatv ⇔ CakhiaTV ⇔ Cakhia TV
https://timnhaonline.net/ ⇔ https://vididong.com/
https://obrigadoportugal.org/ ⇔ https://69vncom.pro/
https://thoibaoso.net/ ⇔ https://hi88.report/
https://margaretjeanlangstaff.com/ ⇔ https://sunwin214.com/
789winmb.black ⇔ 789win
https://88clb.lawyer/ ⇔ https://olicn.com/
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