Tập tin văn bản (Text File)

Một phần của tài liệu Giáo trình ngôn ngữ lập trình pascal phần 2 lê mạnh thạnh (Trang 41 - 46)

Kiểu bản ghi và kiểu tập tin

9.2.6. Tập tin văn bản (Text File)

Trong Pascal có một kiểu tập tin đã đ−ợc định nghĩa tr−ớc, đó là tập tin văn bản. Tập tin này đ−ợc định nghĩa với tên chuẩn Text. Chẳng hạn, d−ới đây là cách khai báo các tập tin F1, F2 có kiểu Text:

Var

Thành phần cơ sở của tập tin kiểu Text là kí tự. Tuy nhiên tập tin văn bản đ−ợc cấu trúc thành các dòng, mỗi dòng đ−ợc kết thúc bởi dấu EOL (End Of Line). Trong Turbo Pascal đó là cặp kí tự kiểu CR (Carriage Return: nhảy về đầu dòng, mã ASCII=13) và LF (Line Feed: nhảy thẳng xuống dòng tiếp theo, mã ASCII=10).

Nh− vậy, tập tin văn bản khác với Text of Char. Với Text Of Char thì coi dấu hết dòng nh−

một kí tự bình th−ờng. Nh− vậy: muốn đọc và in ra từng dòng của tập tin văn bản dùng dạng Text, muốn đọc và in ra từng kí tự của tập tin văn bản thì dùng File Of Char.

Tập tin văn bản đ−ợc kết thúc bởi dấu End_of_file, cụ thể với Turbo Pascal là Ctrl+Z (^Z), mã ASCII=26. Ví dụ, tập tin các ch−ơng trình nguồn của Pascal, Basic, công văn, bức th−,... là một tập tin văn bản. Ví dụ, đoạn văn bản: ‘BO MON TOAN ma so 1221’ đ−ợc chứa trong tập tin văn bản thành một dãy nh− sau:

BO MON TOAN ma so 1221EOF

Vì chiều dài của các dòng th−ờng là khác nhau nên Text file chỉ có thể truy xuất theo kiểu tuần tự, ngoài ra không thể tiến hành cả hai hoạt động đọc và ghi cùng lúc trên Text File.

Các thủ tục đã trình bày với File có cấu trúc cũng sử dụng đ−ợc trong file văn bản. Tuy nhiên Text File có đặc điểm khác sẽ đ−ợc trình bày sau.

a. Hàm chuẩn

– Hàm Eof (Var F: Text): Boolean;

Hàm này cho giá trị False khi cửa sổ tập tin ch−a đến điểm cuối tập tin, ng−ợc lại cho giá trị True. Nó th−ờng dùng để kiểm tra xem đã đọc hết Text File ch−a.

b. Ghi vào một tập tin văn bản

Chúng ta có thể ghi các trị kiểu Integer, Real, Boolean, String vào tập tin văn bản bằng lệnh Write hay Writeln. Cách ghi này cho phép chuyển các giá trị bằng số sang dạng kí tự, tức là d−ới dạng đọc đ−ợc một cách t−ờng minh nh− trên trang giấy viết bình th−ờng, cho phép viết các kiểu bảng dữ liệu với quy cách mong muốn.

Có 3 dạng viết: Dạng 1. Write(<FileVar>,<Item1>, <Item2>,...,<ItemN>); Dạng 2. Writeln(<FileVar>,<Item1>, <Item2>,...,<ItemN>); Dạng 3. Writeln(<FileVar>);

Dạng 1 ghi các giá trị của các <Item1>, <Item2>,..., <ItemN> là các hằng hay biểu thức có kiểu đơn giản nh−: nguyên, thực, kí tự, chuỗi, logic vào biến tập tin <FileVar>.

Dạng 2 t−ơng tự nh− dạng 1 nh−ng đ−a thêm dấu hiệu hết dòng vào tập tin sau khi đã viết hết các giá trị <Item>, <Item2> ,... , <ItemN>.

Dạng 3 chỉ thực hiện việc đ−a thêm dấu hiệu hết dòng vào tập tin.

Ví dụ 17. Ch−ơng trình sau tạo một Text file có 6 dòng: Program Tao_File;

Begin

Assign(F,‘VanBan.txt’); Rewrite(F);

Writeln(F,‘Cong Hoa Xa Hoi Chu Nghia Viet Nam’); Writeln(F,‘Doc lap – Tu do – Hanh phuc’);

Writeln(F,‘...’); Writeln(F);

Writeln(F,‘Danh sach hoc vien lop Pascal’); Writeln(F,‘*** Khoa 1 ***’);

Close(F); End.

Chú ý. Trong Write, Writeln có thể dùng cách in có quy cách nh− đã trình bày.

c. Đọc dữ liệu từ tập tin văn bản

Chúng ta có thể đọc không những các kí tự từ tập tin văn bản mà còn có thể đọc lại các số nguyên, thực, logic từ tập tin văn bản thông qua các thủ tục:

Dạng 1.

Read(<File Var>,<Var1>, <Var2>,...,<VarN>);

Dạng 2.

Readln(<FileVar>,<Var1>,<Var2>,...,<VarN>):

Dạng 3.

Readln(<FileVar>);

trong đó <Var1>,<Var2>,...,<VarN> là các biến thuộc kiểu kí tự, Nguyên, Thực, Logic, Chuỗi. Dạng 1 đọc một hay nhiều phần tử mà không chuyển cửa sổ tập tin xuống dòng. Dạng 2 t−ơng tự dạng 1 nh−ng chuyển cửa sổ tập tin sang đầu dòng tiếp theo sau khi đã lần lần l−ợt đọc các biến t−ơng ứng. Dạng 3 đ−a cửa sổ tập tin sang đầu dòng tiếp theo mà không đọc gì cả.

Ví dụ 18. Ch−ơng trình sau đây đọc và in ra màn hình nội dung của tập tin kiểu Text file có tên Vanban.txt đ−ợc tạo ra từ ch−ơng trình sau:

Program Doc_File; Uses Crt;

Var F: Text; Dong:String[80]; Begin Clrscr; Assign(F,’VanBan.txt’); Reset(F);

While Not EOF(F) Do Begin Readln(F,dong); Writeln(dong); End; Close(F); Readln; End. d. Thủ tục thêm dòng

– Thủ tục Append(Var F:Text);

Mở tập tin văn bản để thêm vào các dòng. Thủ tục Append mở tập tin theo lối ghi, định vị cửa sổ tập tin, sau đó nếu gặp thủ tục Write hay Writeln nội dung thêm vào sẽ đ−ợc đặt vào cuối tập tin.

Ví dụ 19. Ch−ơng trình sau đây thêm hai dòng vào cuối tập tin VanBan.txt Program Them; Var F:Text; Begin Assign(F;’VanBan.txt’); Append(F);

Writeln(F,’Day la dong thu nhat them vao’); Writeln(F,’Day la dong thu hai them vao’); Close(F);

End.

Một số phần mềm của Pascal coi các thiết bị ngoài nh− các tập tin văn bản. Nghĩa là việc xuất nhập đ−ợc thực hiện bằng các thao tác nh− với tập tin văn bản. Chẳng hạn đối với Turbo Pascal ta có thể sử dụng các tập tin chuẩn sau : (Không cần khai báo lại).

OUTPUT là tập tin xuất cơ bản. Thông th−ờng OUTPUT đã đ−ợc tự động gán cho màn hình. Khi dùng biến tập tin OUTPUT, các thủ tục Write, Writeln không cần ghi rõ OUTPUT. Đó cũng chính là cách viết Write, Writeln mà ta đã học từ đầu. Chẳng hạn, lệnh Writeln(a,b,c); đ−ợc hiểu ngầm là Writeln(Output,a,b,c);

INPUT là tập tin nhập cơ bản t−ơng ứng với tập tin chứa dữ liệu nguồn vào, th−ờng đ−ợc tự động gán cho bàn phím (tr−ớc đây có thể máy đọc bìa, đọc băng). INPUT không phải ghi vào vị trí FileVar trong thủ tục Read hay Readln. Chẳng hạn, Read(Var); đ−ợc hiểu là Read(Input,Var)

LST : Trong Turbo Pascal, máy in đ−ợc định nghĩa là biến tập tin có tên LST. Biến này đ−ợc đặt trong đơn vị ch−ơng trình PRINTER.TPU, vì vậy cần khai báo unit Uses PRINTER sau đó có thể sử dụng các thủ tục thủ tục Write(LST,...), Writeln(LST,...).

Ví dụ 20. Ch−ơng trình sau in tập tin VanBan.txt ra máy in. Program In_File; Uses Printer; Var F:Text; Dong:String[80]; Begin Assign(F,‘Vaban.txt’); Reset(F);

While Not Eof(F) Do Begin Readln(F,dong); Writeln(Lst,dong); End; Close(F); Writeln; End.

Một phần của tài liệu Giáo trình ngôn ngữ lập trình pascal phần 2 lê mạnh thạnh (Trang 41 - 46)

Tải bản đầy đủ (PDF)

(64 trang)