1. Trang chủ
  2. » Công Nghệ Thông Tin

Dữ liệu kiểu tệp

12 672 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 86,87 KB

Nội dung

Dữ liệu kiểu tệp Dữ liệu kiểu tệp Bởi: Thu Nguyen KIỂU DỮ LIỆU TỆP Khái niệm tệp: Tệp dãy phần tử kiểu xếp cách Tệp liệu lưu trữ nhớ tên Tệp tập hợp số phần tử liệu có cấu trúc giống mảng khác mảng số phần tử tệp chưa xác định Trong Pascal có loại tệp sử dụng là: Tệp có kiểu: Tệp có kiểu tệp mà phần tử có độ dài kiểu liệu Tệp văn bản: Dùng để lưu trữ liệu dạng ký tự bảng mã ASCII, ký tự lưu thành dòng, độ dài dòng khác Ví dụ 2008 (kiểu word) ghi vào tệp văn cần Byte ( Byte) Tệp không kiểu: Tệp không kiểu loại tệp không cần quan tâm đến kiểu liệu ghi tệp Dữ liệu ghi vào tệp không cần chuyển đổi Tác dụng lớn kiểu liệu tệp ta lưu trữ liệu nhập vào từ bàn phím kết xử lý nhớ RAM tệp để dùng nhiều lần Khai báo: • Định nghĩa kiểu tệp với từ khóa FILE OF phần mô tả kiểu sau từ TYPE, khai báo biến tệp phần khai báo biến 1/12 Dữ liệu kiểu tệp Ví dụ 2.6: Type MSN=Array[1 100] of integer; {định nghĩa mảng 100 số nguyên} TSN= File of MSN; {định nghĩa tệp TSN có phần tử mảng số nguyên} TCV=File of String[80]; {định nghĩa tệp TCV có phần tử chuỗi có độ dài 80 ký tự Bangdiem= Record …… End; TBD= File of Bangdiem; Var: Tep1: TSN; Tep2: TCV; Tep3: TBD; • Định nghĩa trực tiếp biến kiểu tệp phần khai báo biến Var Tep4:File of Array[1 5] of String[80]; Tep5: File of Bangdiem; Truy nhập vào tệp: Turbo Pascal xử lý loại tệp : Tệp truy nhập tệp truy nhập trực tiếp • Tệp truy nhập tuần tự: để truy nhập vào phần tử đó, ta bắt buộc phải qua phần tử trước Nếu muốn thêm phần tử vào tệp thêm vào cuối tệp • Tệp truy nhập trực tiếp: tệp truy nhập vào phần tử tệp Muốn truy nhập trực tiếp phải dùng thủ tục Seek (số hiệu phần tử) 2/12 Dữ liệu kiểu tệp • Mở tệp: Để mở tệp chuẩn bị lưu trữ liệu, ta sử dụng thủ tục chuẩn sau đây: ASSIGN(biến tệp, tên tệp); REWRITE(biến tệp); Trong đó: Biến tệp: tên biến tệp khai báo sau từ khóa VAR Tên tệp: Là tên ta chọn để ghi liệu vào đĩa Ví dụ : ASSIGN(f, ‘a:\baitap.txt’); REWRITE(f); {khởi tạo tệp rỗng} Sau thủ tục trên, để tiến hành ghi liệu vào tệp ta lại dùng thủ tục WRITE(…): Cách viết: WRITE(biến tệp, giá trị cần ghi vào tệp); Cuối cùng, ta phải đóng tệp thủ tục: CLOSE(biến tệp); Tệp văn bản: a Khai báo tệp văn bản: Tệp văn khai báo trực tiếp phần khai báo biến: Var Bientep:Text; b Truy nhập vào tệp: Truy nhập vào tệp hiểu nhập liệu vào tệp, ghi lại liệu thiết bị nhớ ngoài, đọc liệu hình máy in xử lý • Mở tệp để ghi: 3/12 Dữ liệu kiểu tệp Assign(bientep, tentep); Rewrite(bientep); • Mở tệp có để ghi thêm: Assign(bientep, tentep); Append(bientep); • Mở tệp để đọc liệu: Assign(bientep, tentep); Reset(bientep); c Ghi liệu vào tệp: Sau mở tệp dùng thủ tục Write Writeln để ghi liệu vào tệp Ví dụ 2.7: Var T1:Text; Begin Assign(T1,’Dulieu.dat’); Rewrite(T1); Writeln(T1,’Tep van ban’); Write(T1,123); Write(T1,’ ’,123.45); Writeln(T1); Close(T1); End 4/12 Dữ liệu kiểu tệp Dữ liệu ghi vào tệp sau: Tep van ban 123 1.234500000E+02 Dòng trống d Đọc liệu từ tệp văn bản: Sau tiến hành mở tệp, trỏ tệp đặt dòng đầu.Ta dùng thủ tục Read Readln để đọc liệu từ dòng thời gán vào biến tương ứng, viết biến hình máy in Để viết toàn liệu từ tệp văn thiết bị thì, lệnh đọc viết phải lặp lặp lại từ dòng đến dòng cuối cùng, nghĩa phải sử dụng vòng lặp: While not eof(Bientep) Begin Readln(Bientep, Dong); {biến Dong phải khai báo trước, kiểu String} Write(Dong); End; Hoặc: For i:=1 to filesize(Bientep) Begin Readln(Bientep,Dong); Write(Dong); End; Lưu ý: Muốn lấy lại kiểu liệu nhập vào tệp văn biến phải nhập dòng Ví dụ 2.8: 5/12 Dữ liệu kiểu tệp Xây dựng chương trình đơn giản để quản lý công chức Dữ liệu nhập bao gồm: Họ tên, Hệ số lương số Dữ liệu xuất hình bao gồm Họ tên, Hệ số lương, Số Lương tháng ( tính theo quy định nhà nước = heso*540000) Chương trình đặt hai khả lựa chọn: Nếu tệp liệu tồn nhập thêm người Nếu tệp chưa có mở tệp Trong trường hợp cho biết số người cần nhập Dữ liệu in dạng bảng Program Quan_ly_can_bo; Uses Crt; Var f:Text; hoten:String[20]; c1, heso:real; c2,i,n,socon:byte; Ten:string[12]; Begin Clrscr; Write(‘cho biet ten tep’); readln(ten); Assign(f,ten); Reset(f); If IOResult=0 then Append(f); Else Rewrite(f); Write(‘nhap bao nhieu nguoi’); readln(n); For i:=1 to n Begin Write(‘Hoten’); Readln(hoten); 6/12 Dữ liệu kiểu tệp Write(‘He so’); Readln(heso); Write(‘So con’); Readln(socon); Writeln(f,hoten); Writeln(f,heso:4:2); Writeln(f,socon); End; Close(f); Assign(f,ten); Reset(f); Writeln(‘ ‘); Writeln (‘| Ho va ten | Hs | socon | Luong |’); Writeln(‘ ‘) While not eof(f) Begin Readln(f,hoten); Readln(f,heso); Readln(f,socon); Writeln(‘|’, hoten:19,’|’,heso:4:2,’|’,socon:4,’|’,heso*540000:10:2,’|’); End; Readln; End Tệp có kiểu: 7/12 Dữ liệu kiểu tệp a Đọc ghi : - Ghi lên tệp: Write(bientep,bien1,bien2,…); bien1,bien2,…là biến kiểu với biến tệp - Đọc tệp: Read(bientep,bien1,bien2,…); Chú ý: Khác với tệp văn bản, việc ghi đọc tệp có kiểu không sử dụng lệnh Writeln readln nghĩa tệp có kiểu không ghi liệu thành dòng Các phần tử tệp có kiểu ghi liên tục ô nhớ có ký hiệu kết thúc tệp EOF Khi đọc ghi xong phần tử trỏ tệp tự động chuyển đến vị trí Truy nhập vào tệp: Seek(bientep,i); i=0,1,2,… Thủ tục seek định vị trỏ vị trí thứ i tệp • • • hàm xử lý tệp: Filesize(bientep) cho biết số phần tử có tệp FilePos(bientep) cho biết vị trí thời trỏ tệp Eof(Bientep) cho giá trị True trỏ tệp vị trí cuối tệp, ngược lại cho giá trị False Ví dụ 2.9: Tạo tệp lấy tên TEPCK.DAT để vừa ghi vừa sửa liệu: Program Tep_co_kieu: Uses crt; Var bt:file of byte; i:byte; n:real; Begin 8/12 Dữ liệu kiểu tệp Clrscr; Assign(bt,’ TEPCK.DAT’); Rewrite(bt); For i:=0 to write(bt,i); {ghi vào tệp số nguyên} Reset(bt); Writeln(‘Du lieu luu tru tep TEPCK.DAT’); While not eof(BT) Begin Read(bt,i); write(i:5); End; Writeln; Seek(bt,3); {định vị trỏ phần tử thứ 4} Textcolor(magenta); Read(bt,i); Writeln (‘So tep o vi trí thu 4:’,i); i:=33; seek(bt,3); write(bt,i); seek(bt,3); read(bt,i); writeln(‘So moi tep o vi tri 4:,i); writeln(‘vi tri hien thoi cua tro:’, filepos(bt)); readln; 9/12 Dữ liệu kiểu tệp close(bt); end Tệp không kiểu: a Khai báo biến tệp: Var Bientep:File; b Mở tệp để ghi-đọc: • Mở tệp để ghi: Assign(bientep, tentep); Rewrite(bientep, n); • Mở tệp để đọc liệu: Assign(bientep, tentep); Reset(bientep, n); Với n độ lớn tính theo Byte c Đọc ghi tệp không định kiểu: * Đọc tệp không định kiểu: BlockRead(bientep,biennho,i,j); • biennho: biến khai báo kiểu với phần tử tệp, biến nhớ đóng vai trò vùng nhớ đệm để lưu trữ liệu đọc từ phần tử tệp • i: số phần tử quy định cho lần đọc • j: biến kiểu Word, dùng để ghi lại số phần tử thực đọc * Ghi tệp không định kiểu: BlockWrite(bientep,biennho,i); Truy nhập tệp không định kiểu: 10/12 Dữ liệu kiểu tệp Tệp không kiểu truy nhập tệp có kiểu nghĩa dùng thủ tục Seek(bientep,n) để truy nhập vào phần tử thứ n+1 tệp Lưu ý với tệp không kiểu, lần trỏ dịch chuyển dịch chuyển số byte số byte quy định lệnh Rewrite() Reset() Ví dụ 2.10 Nhập vào tệp phần tử record sau viết chúng hình Trong phần khai báo record chọn Hoten string[15] Diem thuộc kiểu Real Program tep_khong_kieu; Uses Crt; Type hs=record Hoten:string[15]; Diem:real; End; Var bt:file; k,nguoi:hs; i,j:byte; 11/12 Dữ liệu kiểu tệp Close(bt); Readln; End 12/12 [...].. .Dữ liệu kiểu tệp Tệp không kiểu cũng được truy nhập như tệp có kiểu nghĩa là cũng dùng thủ tục Seek(bientep,n) để truy nhập vào phần tử thứ n+1 của tệp Lưu ý là với tệp không kiểu, mỗi lần con trỏ dịch chuyển nó sẽ dịch chuyển một số byte đúng bằng số byte đã quy định trong lệnh Rewrite() hoặc Reset() Ví dụ 2.10 Nhập vào tệp các phần tử là record và sau đó viết... vào tệp các phần tử là record và sau đó viết chúng ra màn hình Trong phần khai báo record chọn Hoten là string[15] và Diem thuộc kiểu Real Program tep_khong_kieu; Uses Crt; Type hs=record Hoten:string[15]; Diem:real; End; Var bt:file; k,nguoi:hs; i,j:byte; 11/12 Dữ liệu kiểu tệp Close(bt); Readln; End 12/12

Ngày đăng: 19/10/2016, 22:11

TỪ KHÓA LIÊN QUAN

w