Đọc dữ liệu từ tệp vào mảng biết một kích thước
Đọc
dữ liệu kiểu nguyên từ một tệp văn bản vào một mảng hai chiều a[n,m] cho biết
một kích thước m (số cột).
Tệp có cấu
trúc như sau:
- Số đầu tiên ghi số lượng cột m của mảng tức là số phần tử trên một
dòng.
- Tiếp đến
là các dữ liệu ghi liên tiếp nhau theo từng dòng của mảng.
- Các số
cách nhau ít nhất một dấu cách.
Thí dụ:
3 -1 4 5 3 7 1
sẽ được
bố trí vào mảng n = 3 dòng, m = 3 cột như sau:
-1
|
4
|
5
|
3
|
7
|
1
|
Thuật toán
1. Mở tệp.
2. Đọc giá trị đầu tiên vào biến m: số lượng cột của ma trận.
3. Mỗi lần đọc xong một dòng ta tăng con đếm dòng (n) thêm 1.
Chú ý
Do có thể gặp dòng trống nên ta cần sử dụng hàm SeekEof. Hàm SeekEof duyệt tiếp từ vị
trí hiện thời của con trỏ tệp, bỏ qua các dấu trắng (gồm dấu cách, dấu kết thúc
dòng, dấu đầu dòng, dấu nhảy TAB), nếu gặp dấu hết tệp thì cho giá trị true, ngược lại, nếu sau khi đã bỏ qua các dấu trắng mà
chưa gặp dấu hết tệp thì cho giá trị false.
(* Pascal *)
uses crt;
const MN = 100;
var a: array[1..MN,1..MN] of integer;
m,n: integer;
Function
Doc(fn: string): Boolean;
var f: text; j: integer;
begin
Doc := FALSE;
assign(f,fn);
{$I-}
reset(f); {$I+}
if
IORESULT <> 0 then exit;
read(f,m); {m:
so luong cot}
n := 0; {n: so
luong dong}
while NOT
SeekEof(f) do
begin
inc(n);
for j := 1 to
m do read(f,a[n,j]);
end;
close(f);
Doc := TRUE;
end;
procedure
Xem(n,m: integer); tự viết
BEGIN
if
Doc('DATA.INP') then Xem(n,m)
else
write('Khong mo duoc tep ');
readln;
END.
Chú ý
Cần chuẩn bị trước dữ liệu và ghi trong tệp văn
bản DATA.INP, thí
dụ:
DATA.INP
3
-1 4 5 3 7 1
|
Không có nhận xét nào:
Đăng nhận xét