//
you're reading...
Chủ đề file, Giáo trình Tin học cơ bản

Bài giảng kiểu tập tin (File)

I / Phân loại :

Có 3 loại chính :
+ File văn bản ( Text)
+ File có kiểu , mỗi phần tử của File như một bản ghi
+ File không kiểu


II / File văn bản ( Text ):


1) Định nghĩa :

File văn bản là một kiểu dữ liệu lưu trữ dữ liệu dưới dạng các kí tự theo từng dòng . Các kí tự này được mã số theo bảng mã ASCII . Đặc biệt các kí tự 10,13,26 có nhiệm vụ riêng :
#13 : Báo hết 1 dòng ( Dạng Hecxa : 0D )
#10 : Về đầu dòng tiếp theo ( Dạng Hecxa : 0A )
#26 : Báo hết File ( Dạng Hecxa : 1A )
Thí dụ :
a) x := 12 , được ghi vào File là 31 32 ( 31 là mã số của 1 viết dưới dạng Hecxa , 32 là mã số của 2 viết dưới dạng Hecxa.
b) S := ANH EM được ghi vào File là 41 4E 48 20 45 4D ( đó là các dạng Hecxa
của các mã số 65,78,72,32,69,77 )
c) TT := (12=3*4) ghi vào File dưới dạng Hecxa là 54 52 55 45 ( Chúng tương ứng với các kí tự #84,#82,#85,#69 , đó là các kí tự T,R,U,E .

2) Cách khai báo :

Cách 1

Type TenkieuFile = Text;
Var TenbienFile : TenkieuFile;
Cách 2 Var TenbienFile : Text;
Thí dụ Var F1,F2 : Text;

3) Thông báo làm việc với 1 File :

ASSIGN(Tên_biến_File,Xâu_ký_tự_Tên_File);

Thí dụ :

ASSIGN(F1,DAYSO.INP); bắt đầu làm việc với biến file F1, biến này quản lý File DAYSO.INP trong thư mục hiện thời .

4) Thông báo mở File để đọc :

RESET(Tên_Biến_File)

Thí dụ : ASSIGN(F1,DAYSO.INP);
RESET(F1);
Sẽ mở File DAYSO.INP của thư mục hiện thời để đọc lấy các dữ liệu trong đó.

4) Thông báo mở File để ghi :

REWRITE(Tên_Biến_File)

Thí dụ : ASSIGN(F1,DAYSO.OUT);
REWRITE(F1);
Sẽ mở File DAYSO.OUT của thư mục hiện thời để ghi các dữ liệu vào File này.

Chú ý 1 :

Lệnh Rewrite(F) sẽ xoá các dữ liệu có sẵn trong File cũ do biến F quản lý , nó bắt đầu tạo một File mới trùng tên File cũ . Để tránh tình trạng vô ý làm mất dữ liệu cũ , muốn ghi thêm dữ liệu mới vào File , người ta gọi RESET(F) trước khi gọi REWRITE(F) hoặc dùng lệnh thông báo mở File để ghi tiếp sau đây :

5) Thông báo mở File để ghi tiếp :

APPEND(Tên_biến_File);

Chú ý 2 : Trong các lệnh Reset,Rewrite,Append nêu trên nếu trước chúng có hướng dẫn biên dịch kiểm tra dữ liệu vào ra {$I-} thì khi không gặp lỗi đọc,ghi File thì hàm IORESULT trả giá trị bằng 0 , trái lại nếu có lỗi thì hàm này cho giá trị khác 0 .

6) Đọc dữ liệu từ File

Trong tổ chức File , có một biến con trỏ chỉ đến vị trí hiện thời cần đọc (đọc đến đâu con trỏ này dời theo tới đó ).Sau lệnh reset(F) con trỏ ở vị trí đầu File .

Lệnh 1 : READ(F,danh_sách_biến) ;

Lần lượt đọc các giá trị ghi trong File , bắt đầu kể từ vị trí hiện thời của con trỏ , các giá trị này tương ứng gửi vào các biến kể từ trái sang phải trong danh sách biến

Lệnh 2 : READLN(F,danh_sách_biến);

Lần lượt đọc các giá trị ghi trong File , bắt đầu kể từ vị trí hiện thời của con trỏ , các giá trị này tương ứng gửi vào các biến kể từ trái sang phải trong danh sách biến . Sau đó con trỏ File tự động chuyển tới vị trí đầu dòng tiếp theo của File

Lệnh 3 : READLN(F);

Không đọc dữ liệu nào của dòng hiện thời , con trỏ của File chuyển ngay xuống đầu dòng sau .

6) Ghi dữ liệu vào File

Lệnh 1 : WRITE(F,danh_sách_biến) ;

Lần lượt ghi các giá trị của các biến kể từ trái sang phải trong danh sách biến vào trong File , bắt đầu kể từ vị trí hiện thời của con trỏ

Lệnh 2 : WRITELN(F,danh_sách_biến);

Lần lượt ghi các giá trị của các biến kể từ trái sang phải trong danh sách biến vào trong File , bắt đầu kể từ vị trí hiện thời của con trỏ. Sau đó con trỏ File tự động chuyển tới vị trí đầu dòng tiếp theo của File

Lệnh 3 : WRITELN(F);

Không ghi dữ liệu nào vào dòng hiện thời , con trỏ của File chuyển ngay xuống đầu dòng sau , chờ lệnh ghi tiếp vào dòng này.

Chú ý 3 : Chỉ trong File dạng văn bản ( dạng Text ) mới có các lệnh Readln, Writeln, Append .

Chú ý 4 : Khi ghi các giá trị số vào File , giữa 2 số liền nhau phải ghi ít nhất 1 dấu cách (Kí tự 32 – bằng ấn Space bar ) hoặc kí tự kết thúc dòng ( Kí tự 13 – bằng ấn Enter )

Chú ý 5 : Tổ chức ghi File theo qui luật như thế nào thì khi đọc File phải theo qui luật đó
Thí dụ :
Giả sử trong File TD1.TXT chỉ ghi 1 dòng :
Trần văn Thanh 18 10.0 8.0 9.0
bằng cách cho biến Hoten :=Trần văn Thanh;
biến Tuoi := 18;
biến Toan := 10.0;
biến Van := 8.0;
biến TBMon := (Toan+Van)/2;
Sau đó để ghi các giá trị trên vào File dùng các lệnh :
Assign(F,TD1.TXT);
Rewrite(F);
Writeln(F,Hoten,Tuoi, ,Toan, ,Van, ,TBMon);
Bây giờ muốn hiện các giá trị này lên màn hình ta dùng các lệnh sau :
Assign(F,TD1.TXT);
Reset(F);
Readln(F,S,NS,T,V,TB);
Writeln(S, ,NS, ,T, ,V, ,TB);

Chú ý 6 :
Để tiện ích , trong Turbo thường dùng F3 để soạn các File văn bản chứa các bộ dữ liệu phục vụ Test (Kiểm tra ) các chương trình .

7) Đóng File :

CLOSE(Tên_biến_File);

8) Xoá File :

ERASE(Tên_biến_File);

9) Một số hàm và thủ tục :

EOLN(Tên_biến_File);
+ Hàm cho giá trị TRUE nếu con trỏ File ở vị trí sau giá trị cuối cùng của dòng hiện thời , cho giá trị False khi con trỏ chưa tới vị trí của giá trị cuối cùng của dòng

EOF (Tên_biến_File);
+ Hàm cho giá trị TRUE nếu con trỏ File ở vị trí sau dòng cuối cùng của File, cho giá trị False khi con trỏ chưa tới vị trí sau dòng cuối cùng của File .

SEEKEOLN(Tên_biến_File);
+ Khi đọc File , cho con trỏ bỏ qua các kí tự dấu cách không đọc , hàm có giá trị True khi con trỏ tới vị trí sau giá trị cuối cùng của dòng hiện thời, ngược lại có giá trị False

SEEKEOF(Tên_biến_File);
+ Khi đọc File , cho con trỏ bỏ qua các kí tự dấu cách và các dòng trống không đọc , hàm có giá trị True khi con trỏ tới vị trí sau dòng cuối cùng của File, ngược lại có giá trị False

Chú ý 7 : Máy in (thực chất là bộ nhớ của máy in) được định nghĩa là 1 File văn bản có tên chuẩn là LST . Vì vậy để ghi dữ liệu vào máy in ( để in ra giấy ) một giá trị của biễn x ta dùng Lệnh 1 : Write(LST,x);
hoặc Lệnh 2 : Writeln(LST,x);
Lệnh 2 sau khi in xong giá trị của x thì in xuống đầu dòng tiếp theo .


III / File có kiểu gồm các phần tử cùng kiểu :


1) Định nghĩa :

File có kiểu là một kiểu dữ liệu chứa các phần tử (Record Component ) giống hệt nhau (độ dài, kiểu …) . Mồi phần tử gọi là 1 bản ghi của File .Con trỏ của File sẽ dịch chuyển từ bản ghi này tới bản ghi kia . Các kiểu của phần tử có thể là các kiểu chuẩn đơn giản như : Integer,Char,Byte,Real,String…) nhưng cũng có thể là những kiểu có cấu trúc như : array, Record . Song phần tử của File không được là kiểu File.

2) Khai báo :

Cách 1 :

Type Tên_kiểu_của_biến_File = File of Tên_kiểu_của_phần_tử;
Var Tên_biến_File : Tên_kiểu_của_biến_File;

Cách 2 :

Var Tên_biến_File : File of Tên_kiểu_của_phần_tử;

Thí dụ :

Khai báo theo cách 1
Type Hocsinh = Record
Hoten : String[25];
Toan,Ly,Hoa,TBM : Real;
End;
Lop = File of Hocsinh;
Var L : Lop;
Hoặc khai báo theo cách 2 :
Var L : File of Record
Hoten : String[25];
Toan,Ly,Hoa,TBM : Real;
End;

3) Các thao tác trên File có kiểu :

1- ASSIGN(Tên_biến_File,Xâu_ký_tự_Tên_File);
2- RESET(Tên_Biến_File);
3- REWRITE(Tên_Biến_File);
4- SEEK(Tên_Biến_File,N); Điều khiển con trỏ tới bản ghi thứ N+1
5- FILESIZE(Tên_Biến_File); Số phần tử của File = Filesize(Tên_biến_File) – 1
Do đó Seek(F,FileSize(F)) thì con trỏ tới vị trí EOF(F)
6- FILEPOS(Tên_Biến_File); Bản ghi hiện thời của File F = FilePos(F) +1
7- WRITE(Tên_Biến_File, Danh_sách_biến_hoặc_Hằng ); Thủ tục cho phép lần lượt ghi các giá trị của các biến hoặc hằng trong danh sách biến hoặc hằng vào File kể từ bản ghi hiện thời .
8- READ(Tên_Biến_File,Danh_sách_biến); Thủ tục cho phép lấy các giá trị của các bản ghi kể từ bản ghi hiện thời , gán lần lượt vào các biến trong danh sách biến .
9- EOF(Tên_Biến_File);
10-CLOSE(Tên_Biến_File);
11- ERASE(Tên_Biến_File);
12- RENAME(Tên_Biến_File,Xâu_Kí_Tự_Tên_Mới_của_File);
13- ^Tên_Biến_File ; Hàm cho giá trị phần tử ở bản ghi hiện thời ( vị trí FilePos+1)

Chú ý 1 : Trong File có kiểu (gồm các phần tử cùng kiểu ) không có các hàm và thủ tục
sau đây :
WRITELN(Tên_Biến_File, Danh_sách_biến_hoặc_Hằng );
READLN(Tên_Biến_File,Danh_sách_biến);
APPEND(Tên_Biến_File,Danh_sách_biến);
EOLN(Tên_Biến_File,Danh_sách_biến);

Chú ý 2 : Ngược lại trong Filevăn bản (File kiểu Text ) không có hàm và thủ tục sau :

SEEK(Tên_Biến_File,N);
FILESIZE(Tên_Biến_File);
FILEPOS(Tên_Biến_File);

Chú ý 3 : Dữ liệu truyền từ File có kiểu vào bộ nhớ trong thường nhanh chóng hơn dữ liệu như thế truyền từ File Text vào bộ nhớ trong vì không phải giải mã các kí tự và số .

Chú ý 4 : Sau khi mở ghi bằng Reset(Tên_biến_File) , có thể thay đổi giá trị các bản ghi kể từ bản ghi hiện thời bằng WRITE(Tên_Biến_File, Danh_sách_biến_hoặc_Hằng ); các giá trị này ghi đè lên giá trị cũ ( Chỉ thêm bản ghi mới khi danh sách các biến dài hơn số lượng bản ghi còn lại kể từ bản ghi hiện thời tính đến hết File ) .

 


IV/ File không kiểu : ( Phân loại theo vật lý )


1 ) Khái niệm :

File không kiểu được coi như một dãy liên tiếp các Byte , truy xuất loại File này theo từng “Bản ghi qui ước” gồm một khối số lượng Byte nào đó (tuỳ theo khai báo ban đầu).

2 ) Cách khai báo :

Var Tên_biến : File ;

3) Mở File đọc :

Assign(Tên_biến_File,Xâu_kí_tự_Tên_File);
Reset(Tên_biến_File,Số_lượng_Byte_Trong_một_bản_ghi);

4) Mở File ghi :

Assign(Tên_biến_File,Xâu_kí_tự_Tên_File);
Rewrite(Tên_biến_File,Số_lượng_Byte_Trong_một_ bản_ghi);

5) Đọc :

BlockRead(TF,BD,N,M);
+ TF là tên biến File .
+ BD là biến sẽ chứa giá trị đọc được ( Thường là mảng gồm các phần tử có kích thước bằng kích thước 1 bản ghi qui ước của File ) .
+ N là số lượng Byte tối đa của một thao tác đọc.
+ M là số lượng Byte thực tế đã đọc được trong 1 thao tác đọc .

6) Ghi :

BlockWrite(TF,BG,N,M);
+ TF là tên biến File .
+ BG là biến mang giá trị sẽ ghi vào File ( Thường là mảng gồm các phần tử có kích thước bằng kích thước 1 bản ghi qui ước của File ) .
+ N là số lượng Byte tối đa của một thao tác ghi.
+ M là số lượng Byte thực tế đã ghi được trong 1 thao tác ghi .

Advertisements

About pascalteacher

Trang thông tin Toán học và Tin học

Thảo luận

Không có bình luận

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Các tác giả

Danh mục

Tháng Mười 2016
H B T N S B C
« Th9   Th11 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

NCT Computer

Flickr Photos

Palouse Falls at Sunrise (Palouse, WA)

Dartford Warbler

Herbal face

More Photos

Thống kê

  • 137,116 lượt xem

pascalteacher.nct@gmail.com


Trang huấn luyện học sinh giỏi Tin học

%d bloggers like this: