L 2= EN_TRIM(TEN) 3 = EN_TRIM(ST1)
7.3.6 File truy cập trực tiếp dạng nhị phân
File truy cập trực tiếp dạng nhị phân l−u trữ các bản ghi nh− là một chuỗi các số nhị phân, có thể truy cập đ−ợc theo trình tự bất kỳ. Các bản ghi trong file có cùng độ dài đ−ợc chỉ ra bởi tham số RECL= của câu lệnh OPEN. Có thể ghi một phần bản ghi vào file trực tiếp dạng nhị phân; phần ch−a sử dụng của bản ghi sẽ chứa dữ liệu không xác định.
Một câu lệnh đơn READ hoặc WRITE có thể truyền tải dữ liệu nhiều hơn một bản ghi liên tiếp trong file. Tuy nhiên điều đó có thể gây nên lỗi.
Ví dụ 7.11. Ch−ơng trình sau đây tạo một file truy cập trực tiếp dạng nhị phân gồm
4 bản ghi. Sau đó đọc các thơng tin từ file theo một trình tự và qui cách khác với cách tạo file. Bạn đọc cần nghiên cứu và phân tích lời ch−ơng trình một cách kỹ càng, sau đó chạy ch−ơng trình rồi nhận xét kết quả để hiểu rõ hơn nguyên tắc thao tác với file loại này.
character*20 st
OPEN(3, FILE='TEST6.TXT',RECL=10,FORM='BINARY', & ACCESS='DIRECT')
WRITE (3, REC=1) 'abcdefghijklmno' ! Ghi đè sang cả bản ghi thứ 2
WRITE (3) 4,5 ! Ghi vào bản ghi thứ 3 WRITE (3, REC=4) 'pq'
CLOSE (3)
OPEN (3, FILE='TEST6.TXT',RECL=10,FORM='BINARY',& ACCESS='DIRECT')
read(3,rec=3) i,j ! Đọc bản ghi thứ 3 write(*,*) i,j
read(3,rec=1) st ! Đọc sang cả bản ghi thứ 2 print*,st
read(3,rec=2) st ! Đọc sang cả bản ghi thứ 3 write(*,*) st
END
Cấu trúc dữ liệu trong file đ−ợc mơ tả trên hình 7.8. Khi chạy ch−ơng trình ta sẽ nhận đ−ợc những kết quả ngoài mong đợi. Khai báo độ dài của bản ghi là 10 byte, của biến st bằng 20 byte, gấp hai lần độ dài của một bản ghi, trong khi nội dung của st chỉ có 15 byte. Khi ghi vào file, st sẽ chiếm hai bản ghi, trong đó bản ghi thứ hai sẽ chứa 5 byte nội dung cuối cùng của st và 5 byte cịn lại có nội dung khơng xác định. Do đó, khi đọc nội dung của bản ghi thứ hai (rec=2) và gán cho biến ký tự ta sẽ nhận đ−ợc kết quả “klmno”. Bản ghi thứ ba l−u hai số nguyên 4 byte, nên còn d− 2 byte không xác định. T−ơng tự nh− vậy đối với bản ghi thứ 4.