Một số lệnh và hàm về xử lý file

Một phần của tài liệu Giao an tin học 8 Pascal (Trang 62 - 69)

I/ Khái niệm về File

5. Một số lệnh và hàm về xử lý file

a. Với File có định kiểu:

Lệnh Read(Bienfile, cacbien)

Cacbien là một hay nhiều biến thuộc kiểu thành phần của kiểu file, nếu có nhiều thì chúng được cách nhau bởi dấu phẩy (,). Các biến sẽ được đọc từ Bienfile, sau mỗi lần đọc, con trỏ của file được tự động đưa đến phần tử kế tiếp.

Ví dụ: Var F1 : FileLilich; x, y : Lilich; Begin Assign(F1, ‘Hocsinh.LL’); Reset(F1); Read(F1, x, y);

…….. ……..

x.Hovaten sẽ là ‘Nguyễn Thành An’ x.Namsinh sẽ là 1990

…….. ……..

y.Hovaten sẽ là ‘Phan Thanh Bình’ y.Namsinh sẽ là 1991

…….. ……..

Lệnh Write(Bienfile, Cacbien)

Giải thích như lệnh read, ở đây các biến sẽ được ghi lên Bienfile, sau mỗi lần ghi thì con trỏ của file sẽ tự động đưa đến phần tử kế tiếp.

Ví dụ:

…… ……

Write(‘Ban cho biet ten file: ‘); Readln(Tenfile);

Assign(F1, Tenfile); Rewrite(F1);

x.Hovaten := ‘Thanh Văn Anh’; x.Namsinh := 1990;

x.Noisinh := ‘Saigon’; ……

……

y.Hovaten := ‘Phan Văn Bình’; y.Namsinh := 1991; y.Noisinh := ‘HaNoi’; …… …… Write(F1,x, y); Close(F1);

b. Với File văn bản

Ngoài Read(F, ch); hoặc Write(F, ch); được dùng để đọc, ghi từng ký tự, tập tin văn bản còn có các lệnh ghi, đọc theo dòng văn bản.

Readln(F, Cacbien); Writeln(F, Cacbien);

c. Với File không định kiểu

Dùng các lệnh đọc ghi theo từng khối, do đó sẽ có tốc độ nhanh.

BlockRead BlockWrite.

Ngoài ra còn có một số thủ tục và hàm xử lý File thông dụng như sau:

 Hàm EOF(F): Cho giá trị True nếu con trỏ file đã ở vị trí kết thúc file. Thủ tục này được dùng mỗi khi cần đọc dữ liệu.

 Hàm EOLN(F): Cho giá trị True nếu con trỏ file ở vị trí kết thúc dòng của file văn bản, thủ tục này chỉ được dùng với file văn bản.

 Hàm SEEK(F, i): Đặt vị trí con trỏ file vào vị trí RECORD thứ i (i được đếm từ 0). SEEK chỉ áp dụng cho file có định kiểu.

 Thủ tục EARSE(F): Xoá file trên đĩa.  Thủ tục RENAME(F): Đổi tên file.

TÓM LƯỢC

 Kiểu File là một cấu trúc dữ liệu gồm nhiều phần tử cùng kiểu được chứa trong thiết bị ngoài như đĩa cứng hay đĩa mềm.

 File dùng để lưu trữ dữ liệu trong một thời gian dài, ngay cả khi chương trình đã kết thúc.  Chứa với khối lượng lớn.

 Để cung cấp cho một hay nhiều chương trình hoạt động ở nhiều thời điểm.  Chúng ta có 3 loại file. File văn bản (text). File có định kiểu. File không định kiểu  Khai báo biến file văn bản:

Var <Tenbienfile> : Text;

 Khai báo biến file định kiểu:

Type

<Tenkieufile> = FiLE OF Kieuphantu; Var

<Tenbienfile> : (Tenkieufile>;

Hoặc có thể khai báo trực tiếp như sau:

Var

<Tenbienfile> : FiLE OF Kieuphantu;

 Khai báo biến file không định kiểu:

Var <Tenbienfile> : FiLE;  Lệnh gán tên file: ASSiGN (F, Tenfile);  Lệnh mở file để đọc: RESET (F);  Lệnh mở file để ghi: REWRiTE (F);  Lệnh đóng file: CLOSE (F); PHẦN THỰC HÀNH:

1. Tham khảo chương trình nhập điểm cho học sinh, khi không muốn nhập nữa thì phần họ tên học sinh bỏ trống. Program Vaodiem; Type Phieudiem = Record HotenHs : String[40]; Van : real; Toan : real; Ngoaingu : real; Ly : real; Hoa : real; Sinh : real; Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real;

End;

FilePhieudiem = FiLE OF Phieudiem; Var HS : Phieudiem; F : FilePhieudiem; DK : Boolean; Begin Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK do With HS do Begin

Writeln(‘Ban de trong vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);

Readln(HotenHS);

if HotenHS = ‘ ‘ then DK:= False Else

Begin

Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);

Write(‘Diem Ngoai ngu : ‘); Readln(Ngoaingu); Write(‘Diem Ly : ‘); Readln(Ly);

Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);

Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);

Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS); End; End; Close(F); End. Giải thích:

 Trong chương trình trên, đầu tiên bạn khai báo Phieudiem có kiểu Record gồm 13 phần tử.  Thành phần HotenHS có kiểu chuỗi, các thành phần còn lại đều có kiểu số thực.

 Khai báo File có định kiểu.

 Khai báo biến HS có kiểu Phieudiem.  Khai báo biến F có kiểu FilePhieudiem.

 Biến DK có kiểu Boolean, dùng làm điều kiện trong vòng lặp.

 Vì dùng kiểu File, đầu tiên bạn phải dùng lệnh gán Assign, theo điều kiện bạn phải dùng lệnh mở file để ghi Rewrite.

 Vòng lặp While để nhập các thông tin trong Phieudiem khi DK là true.

Nếu để trống phần HotenHS, gõ Enter, sẽ thoát khỏi vòng lặp vì DK lúc này là False.

 Chương trình trên dùng để nhập thông tin vào File, nếu muốn vừa nhập thông tin vào File đồng thời cũng cho xuất hiện ra màn hình các thông tin vừa nhập. Bạn thay đổi chương trình một chút như sau:

Program Vaodiem; Type

Phieudiem = Record HotenHs : String[40];

Van : real; Toan : real; Ngoaingu : real; Ly : real; Hoa : real; Sinh : real; Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real; End;

FilePhieudiem = FiLE OF Phieudiem; Var HS : Phieudiem; F : FilePhieudiem; DK : Boolean; Begin Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK do With HS do Begin

Writeln(‘Ban de trong vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);

Readln(HotenHS);

if HotenHS = ‘ ‘ then DK:= False Else

Begin

Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);

Write(‘Diem Ngoai ngu : ‘); Readln(Ngoaingu); Write(‘Diem Ly : ‘); Readln(Ly);

Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);

Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);

Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS); End; End; Close(F); Reset(F);

While not EOF(F) do Begin

Read(F, HS); Begin

Writeln(‘Diem Van: ‘, HS.Van); Writeln(‘Diem Toan: ‘, HS.Toan);

Writeln(‘Diem Ngoai ngu: ‘, HS.Ngoaingu); Writeln(‘Diem Ly: ‘, HS.Ly);

Writeln(‘Diem Hoa: ‘, HS.Hoa); Writeln(‘Diem Sinh: ‘, HS.Sinh);

Writeln(‘Diem Ky thuat: ‘, HS.Kythuat); Writeln(‘Diem Su: ‘, HS.Su);

Writeln(‘Diem Dia: ‘, HS.Dia); Writeln(‘Diem Cong dan: ‘, HS.CD); Writeln(‘Diem The duc: ‘, HS.TD); Writeln(‘Diem Nhac: ‘, HS.Nhac); Writeln(‘Diem Ve: ‘, HS.Ve); End;

End; Close(F); Readln; End.

 Phần đầu của chương trình cũng giống như bài trên.  Để đọc File, chúng ta dùng lệnh Reset.

 Vòng lặp While sẽ in thông tin ra màn hình khi không phải là EOF (cuối tập tin).

 Khi thực hiện chương trình, sẽ in ra một lần tất cả các học sinh mà bạn vừa nhập, nếu có quá nhiều học sinh, chúng ta chỉ thấy được màn hình cuối cùng, để thấy mỗi lần những thông tin của một học sinh mà thôi và cho biết đây là học sinh thứ mấy, bạn thêm một vài lệnh (những lệnh đậm).

Program Vaodiem; Type Phieudiem = Record HotenHs : String[40]; Van : real; Toan : real; Ngoaingu : real; Ly : real; Hoa : real; Sinh : real; Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real; End;

FilePhieudiem = FiLE OF Phieudiem; Var HS : Phieudiem; F : FilePhieudiem; DK : Boolean; N : integer; Begin Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK do With HS do

Begin

Writeln(‘Ban de trong vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);

Readln(HotenHS);

if HotenHS = ‘ ‘ then DK:= False Else

Begin

Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);

Write(‘Diem Ngoai ngu : ‘); Readln(Ngoaingu); Write(‘Diem Ly : ‘); Readln(Ly);

Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);

Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);

Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS); End; End; Close(F); Reset(F); N := 1;

While not EOF(F) do Begin

Read(F, HS); Begin

Writeln(‘Day la hoc sinh thu: ‘,N);

Writeln(‘Ho va ten hoc sinh: ‘, HS.HotenHS); Writeln(‘Diem Van: ‘, HS.Van);

Writeln(‘Diem Toan: ‘, HS.Toan);

Writeln(‘Diem Ngoai ngu: ‘, HS.Ngoaingu); Writeln(‘Diem Ly: ‘, HS.Ly);

Writeln(‘Diem Hoa: ‘, HS.Hoa); Writeln(‘Diem Sinh: ‘, HS.Sinh);

Writeln(‘Diem Ky thuat: ‘, HS.Kythuat); Writeln(‘Diem Su: ‘, HS.Su);

Writeln(‘Diem Dia: ‘, HS.Dia); Writeln(‘Diem Cong dan: ‘, HS.CD); Writeln(‘Diem The duc: ‘, HS.TD); Writeln(‘Diem Nhac: ‘, HS.Nhac); Writeln(‘Diem Ve: ‘, HS.Ve);

N;= N + 1; Readln; Readln; End; End; Close(F); Readln; End.

3. Viết chương trình con đọc dữ liệu từ một file của các phần tử có kiểu Luong = record

Hoten : String[40]; Mucluong : real; End;

Vào một mảng, sắp xếp lại theo thứ tự tăng dần của vùng mức lương rồi ghi trở lại vào file.

4. Viết chương trình dự đoán giải bóng đá Sea games 22, in kết quả dự đoán lên một file. Cách dự đoán: cho điểm từng đội bóng theo các mục sau:

 Điểm huấn luyện viên tối đa 30 điểm.  Điểm thủ môn tối đa 15.

 Điểm hậu vệ tối đa 30.

 Điểm các cầu thủ khác tối đa 50.  Điểm thuận lợi sân bãi tối đa 20. Sau đó tính tổng điểm của mỗi đội.

Một phần của tài liệu Giao an tin học 8 Pascal (Trang 62 - 69)

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

(69 trang)
w