Sách Giải

https://sachgiai.com

Kiểu tệp (file) trong Pascal

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.
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