Thứ Tư, 25 tháng 12, 2013

Đọc dữ liệu từ tệp vào mảng biết một kích thước



Đọ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