L 2= EN_TRIM(TEN) 3 = EN_TRIM(ST1)
7.5 Các lệnh vào ra dữ liệu với file 1 Lệnh đọc dữ liệu từ file (READ)
7.5.1 Lệnh đọc dữ liệu từ file (READ)
Cú pháp lệnh READ làm việc với file có dạng:
READ { { fmt , | nml } | ( [UNIT=] unit [, { [FMT=] fmt | [NML=] nml } ] [, ADVANCE=advance] [, END=end] [, EOR=eor] [, ERR=err] [, IOSTAT=iostat] [, REC=rec] [, SIZE=size] ) } iolist
Trong đó dấu gạch đứng (|) dùng để phân chia các tham số thuộc một nhóm, có nghĩa là chỉ đ−ợc phép chọn một trong các tham số của nhóm. Ví dụ, nếu đã chọn
[FMT=] fmt thì khơng đ−ợc phép chọn [NML=] nml. Nếu bỏ qua UNIT=, thì unit phải
là tham số đầu tiên. Nếu bỏ qua FMT= hoặc NML=, thì fmt hoặc nml phải là tham số thứ hai. Nếu muốn sử dụng fmt khơng có FMT=, thì phải bỏ qua UNIT=. Trong các tr−ờng hợp khác các tham số có thể xuất hiện theo thứ tự bất kỳ. Hoặc fmt hoặc nml cần đ−ợc chỉ ra nh−ng không phải cả hai. Sau đây là ý nghĩa các tham số.
unit: Là tên thiết bị lơgic. Khi đọc từ một file ngồi unit là một biểu thức nguyên.
Khi đọc từ một file trong unit là một xâu ký tự, một biến ký tự hoặc một phần tử của mảng ký tự,...
fmt: Là chỉ thị định dạng, có thể nhận một trong các tr−ờng hợp: 1) Nhãn của lệnh
FORMAT; 2) Biểu thức ký tự (biến, thủ tục, hoặc hằng) xác định định dạng đọc vào, phân
định bởi các dấu nháy đơn (' ) hoặc dấu nháy kép ( " ); 3) Dấu sao (*) đối với tr−ờng hợp định dạng tự do; 4) hoặc một biến nguyên ASSIGN. Không đ−ợc dùng fmt đối với
NAMELIST. Nếu lệnh READ bỏ qua các tùy chọn UNIT=, END=, ERR=, và REC=, và chỉ có
fmt và iolist, thì câu lệnh sẽ đọc từ UNIT (*) là bàn phím.
nml: Chỉ tên của NAMELIST. Các tùy chọn iolist và fmt phải đ−ợc bỏ qua. Lệnh
đọc NAMELIST chỉ có thể đ−ợc thực hiện đối với file truy cập tuần tự.
advance: Có dạng ký tự (Character*(*)), dùng để chỉ ra cách đọc vào từ file tuần
tự có định dạng, nhận giá trị hoặc 'YES' (ngầm định) hoặc 'NO'. Nếu advance = ‘YES’: Ch−ơng trình sẽ đọc theo định dạng fmt hết bản ghi này sang bản ghi khác và gán giá trị cho iolist. Nếu advance = ‘NO’: Ch−ơng trình sẽ đọc các giá trị theo định dạng chỉ
trên một dòng và gán cho iolist. Nếu số giá trị chứa trong bản ghi ít hơn số biến trong
iolist sẽ xuất hiện lỗi. Yêu cầu tham số định dạng fmt phải khác (*)
end: Nhãn của câu lệnh trong ch−ơng trình sẽ đ−ợc chuyển điều khiển đến nếu con
trỏ file đặt ở cuối bản ghi kết thúc file. Nếu bỏ quan end, sẽ xuất hiện lỗi khi con trỏ file đã ở cuối file nh−ng quá trình đọc vẫn cố gắng đọc tiếp, trừ tr−ờng hợp có chỉ ra err hoặc
iostat.
eor: Nhãn của câu lệnh trong ch−ơng trình sẽ đ−ợc chuyển điều khiển đến nếu con
trỏ file đặt ở cuối bản ghi. Tham số này chỉ dùng khi đ−a vào tham số ADVANCE='NO'. Nếu bỏ qua eor, hiệu ứng lỗi vào/ra sẽ đ−ợc xác định bởi iostat.
err: Nhãn của câu lệnh trong ch−ơng trình sẽ đ−ợc chuyển đến nếu gặp lỗi trong
quá trình đọc. Nếu bỏ qua err, hiệu ứng lỗi vào/ra sẽ đ−ợc xác định bởi iostat.
iostat: Là tham số kết xuất, ngầm định là một số ngun (INTEGER(4)). iostat
= 0 nếu khơng có lỗi, = −1 nếu gặp kết thúc file (end-of-file), hoặc bằng một số chỉ thị
rec: Tham số vào, ngầm định là một số nguyên d−ơng (INTEGER(4)) chỉ số thứ tự
bản ghi cần đọc đối với file truy cập trực tiếp. Sẽ xuất hiện lỗi khi sử dụng tham số này cho file truy cập tuần tự hoặc file trong. Khi sử dụng tham số rec cần bỏ qua các tham số
end và nml. Con trỏ file sẽ đ−ợc định vị đến bản ghi có số thứ tự rec tr−ớc khi dữ liệu
đ−ợc đọc. Số thứ tự bản ghi bắt đầu từ 1. Ngầm định của rec là số thứ tự bản ghi hiện thời.
size: Ngầm định là một số nguyên (INTEGER(4)), trả về số l−ợng ký tự đ−ợc đọc
và chuyển cho các biến nhận dữ liệu vào. Các dấu cách chèn đệm vào sẽ không đ−ợc tính. Nếu sử dụng tham số này thì cần phải đặt tùy chọn ADVANCE='NO'.
iolist: Danh sách các biến sẽ đ−ợc nhận dữ liệu từ file.