Nhập và xuất dữ liệu là hai công việc rất phổ biến khi thực hiện một chương trình. Chođến nay, ta mới chỉ nhập dữ liệu từ bàn phím và xuất dữ liệu ra màn hình. Các dữ liệu nàyđược tổ chức trong bộ nhớ của máy, chúng tồn tại khi chương trình đang chạy và bị xóa khi chương trình kết thúc. Muốn lưu trữ các dữ liệu lâu dài để sử dụng nhiều lần thì phải ghi chúng lên đĩa thành các tập tin.
Tập tin (file) trong Pascal là một kiểu dữ liệu có cấu trúc.
Mỗi tập tin là một tập hợp các phần tử có cùng chung một kiểu dữ liệu được nhóm lại thành một dãy và được ghi trênđĩa dưới một cái tên chung. Khái niệm tập tin và mảng có những điểm rất gần nhau. Song tập tin khác mảng ở những điểm sau đây:
- Mảng được tổ chức trong bộ nhớ còn tập tin chủ yếu được tổ chức trênđĩa.
- Số phần tử của mảng được xác định ngay khi khai báo, còn số phần tử của tập tin thì không. Các tập tin được kết thúc bằng một dấu hiệu đặc biệt gọi là EOF (End Of File).
- Các phần tử của mảng được truy xuất thông qua chỉ số.
Các phần tử của tập tinđược truy xuất nhờ một biến trung gian chỉ điểm vào vị trí của chúng trên đĩa, gọi là con trỏ tệp. Tại mỗi thời điểm, con trỏ sẽ chỉ vào một vị trí nàođó trong tập tin, gọi là vị trí hiện thời.
Dưới đây sẽ trình bày hai loại tập tin thường gặp là tập tin cóđịnh kiểu và tập tin văn bản.
17.2. Tập tin có định kiểu
Tập tin mà các phần tử của nó có cùng một kiểu dữ liệu gọi là tập tin có định kiểu. Kiểu dữ liệu của các phần tử của tập tin có thể là kiểu đơn giản (nguyên, thực, ký tự , lô gic, chuỗi ký tự...) hoặc kiểu có cấu trúc (mảng, bản ghi).
Cách khai báo kiểu tập tin nhưsau:
Type
TênkiểuTtin = File of Kiểuphầntử;
Ví dụ Type
Ksvien =Record Ten: String[20];
Namsinh: Integer;
DTB: Real;
End;
KieuT1 =File ofInteger;
KieuT2 =File ofString[20];
KieuT3 =File ofKsvien;
Theo khai báo trên thì KieuT1 là tập tin có các phần tử kiểu nguyên (Integer), KieuT2 là tập tin có các phần tử là các chuỗi ký tự (String[20]), còn KieuT3 là tập tin có các phần tử là các bản ghi kiểu Ksvien.
Khiđã có kiểu tập tin, ta có thể khai báo các biến tập tin:
Var
F1: KieuT1;
F2: KieuT2;
F3: KieuT3;
F1, F2, F3 là các biến kiểu tập tin, một loại biến đặc biệt, không dùngđể gán giá trị nhưcác biến nguyên, thực hay chuỗi.
Mỗi biến nàyđại diện cho một tập tin mà thông qua các biến đó ta có thể thực hiện các thao tác trên tập tin như: tạo tập tin, mở, đóng, xóa tập tin, ghi dữ liệu vào tập tin và đọc dữ liệu từ tập tin, ...
Ngoài cách khai báo các biến F1, F2, F3 thông qua việc định nghĩa các kiểu dữ liệu mới nhưtrên, Pascal còn cho phép khai báo trực tiếp các biến tập tin nhưsau:
Var
TênbiếnTtin: File of Kiểuphầntử;
Ví dụ: có thể khai báo ba biến F1, F2, F3 nói trên theo cách sau:
Type
Ksvien =Record Ten: String[20];
Namsinh: Integer;
DTB: Real;
End;
Var
F1: File of Integer;
F2: File of String[20];
F3: File of Ksvien;
17.2.1. Các thủ tục chuẩn
1) Thủ tục ASSIGN(biếntậptin, têntậptin)
Gán tên tập tin cho biến tập tin. Ở đây tên tập tin là mộtbiểu thức kiểu chuỗi là tên thực sự của tập tin. Ví dụ:
Assign(F1, ‘DLIEU.DAT’);
Assign(F3, ‘QLSV.DAT’);
Sau hai lệnh này, biến F1 đồng nhất với tập tin DLIEU.DAT, mọi thao tác trên biến F1 chính là thao tác trên tập tin DLIEU.DAT. Tương tự, biến F3 đồng nhất với tập tin QLSV.DAT
2) Thủ tục REWRITE(biếntậptin)
Khởi tạo tập tin mới, nếu tập tinđã có trên đĩa thì nó xóađi và tạo mới. Ví dụ:
Rewrite(F1); khởi tạo tập tin DLIEU.DAT Rewrite(F3); khởi tạo tập tin QLSV.DAT 3) Thủ tục RESET(biếntậptin)
Mở tập tin đã cóđể sử dụng. Con trỏ tập tin trỏ vào phần tử đầu tiên (có số thứ tự là 0) củatập tin .
4) Thủ tục WRITE(biếntậptin, b1, b2, ..., bN)
Tuần tự ghi vào tập tin các giá trị của các biến b1, b2, ..., bN. Các biến b1, ..., bN phải cùng kiểu dữ liệu với các phần tử của tập tin.
Ví dụ:
- Cho i, j, k là các biến kiểu Integer và i=10, j=20, k=100, khiđó lệnh:
Write(F1, i, j, k );
sẽ ghi lần lượt các giá trị 10, 20, 100 vào tập tin DLIEU.DAT
- Cho khai báo:
Var
X: Ksvien;
Các lệnh sau gán giá trị cho X và ghi X vào tập tin QLSV.DAT:
X.Ten:=’Ng Van An’;
X.Namsinh:=1980;