X: ARRAY[INTEGER] OF INTEGER; Y: ARRAY[REAL] OF INTEGER;
KIỂU DỮ LIỆU CÓ CẤU TRÚC: KIỂU TẬP TIN (FILE)
ỌC DỮ LIỆU TỪ TẬP TIN:
Việc đọc các phần tử từ tập tin ra sau khi mở tập tin được thực hiện bằng thủ tục READ
Cách viết:
READ(FileVar, Var1, Var2, …, VarN); READ(Biến_tập tin, các biến);
Thực hiện đọc các giá trị tại vị trí cửa sổ đang trỏ (nếu có) gán sang biến tương ứng cùng kiểu. Sau đó cửa sổ dịch chuyển sang vị trí tiếp theo và đọc giá trị cho biến khác. Cứ thế đọc cho đến biến VarN.
Một điều cần lưu ý là trong thủ tục READ ta chỉ có thể đọc giá trị của tập tin để gán giá trị cho các biến (Var1, Var2, …, VarN) và chỉ cho các biến mà thôi. Không như trong thủ tục ghi vào tập tin, các tham số thực là các Item (hằng, biến, biểu thức…).
Việc đọc một phần tử của tập tin còn cần có một điều kiện: phải thử xem tập tin có còn phần tử không tức là cửa sổ chưa trỏ đến EOF. Hàm chuẩn EOF sẽ báo cho biết: nếu cửa sổ trỏ vào cuối tập tin thì EOF(Biến_tập tin) = True, còn nếu cửa sổ trỏ vào phần tử của tập tin thì EOF(Biến_tập tin) = False. Do vậy trước khi làm một thao tác gì để đọc tập tin gán cho biến X, cần phải thử xem tập tin đó đã kết thúc chưa bằng câu lệnh:
IF NOT EOF(Biến_tập tin) THEN READ(Biến_tập tin, X);
Hoặc nếu muốn đọc tất cả các phần tử của tập tin: WHILE NOT EOF(Biến_tập tin) DO Begin
End;
READ(Biến_tập tin, X);(* Đọc một phần tử của tập tin *) …
Nếu cửa sổ đã trỏ đến phần EOF mà chương trình vẫn cố tình đọc thì sẽ gặp sai và máy sẽ báo lỗi, sau đó chương trình dừng lại.
Công việc cuối cùng kết thúc việc đọc tập tin là đóng tập tin lại với thủ tục giống như khi tạo tập tin mới:
CLOSE(Biến_tập tin);
Bây giờ chúng ta lấy ví dụ cụ thể: giả sử tồn tại một tập tin có tên là NGUYEN.DAT được tạo ra bằng các thủ tục mở tập tin cất dữ liệu như ở trên đã miêu tả. Ta phải đọc ra giá trị thứ nhất và thứ ba của tập tin và gán cho hai biến A và B tương ứng. Giả sử tập tin không rỗng và chứa ít nhất ba phần tử để ta không phải dùng phép thử EOF.
Program DOC_TEP_1;
Var A, B: integer; FI: File of integer; Begin
END.
ASSIGN(FI, ‘NGUYEN.DAT’); RESET(FI);
Read(FI, A); (* Đọc một phần tử thứ nhất của tập tin ra biến A *) Read(FI, B); (* Đọc một phần tử thứ hai của tập tin ra biến B *) Read(FI, B); (* Đọc một phần tử thứ ba của tập tin ra biến B *) CLOSE(FI);
Ba lần đọc READ(FI, …) ở trên có thể thay thế bằng một lệnh đọc duy nhất: