Cấu trúc tệp (file)
Tổng quát về file trong VB
Truy xuất file trong VB (Các lệnh/Các hàm)
Truy xuất file nhị phân (binary file)
Truy xuất file tuần tự (sequence file/text file)
Các hàm xác định vị trí truy xuất file
Các hàm truy xuất thuộc tính file
Lệnh sao chép và xóa file
Các lệnh xử lý thư mục
33 trang |
Chia sẻ: tieuaka001 | Lượt xem: 668 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Tin học đại cương - Trần Quang Diệu - Chương 7: Xử lý tập tin với Visual Basic 6.0, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TIN HỌC ĐẠI CƯƠNGChương 7: Xử lý tập tin với Visual Basic 6.0Dùng cho nhóm ngành: Công trình + Cơ khíNội dungCấu trúc tệp (file)Tổng quát về file trong VBTruy xuất file trong VB (Các lệnh/Các hàm)Truy xuất file nhị phân (binary file)Truy xuất file tuần tự (sequence file/text file)Các hàm xác định vị trí truy xuất fileCác hàm truy xuất thuộc tính fileLệnh sao chép và xóa fileCác lệnh xử lý thư mụcTin học đại cương - Chương 727.1. Cấu trúc tập tin (file)Ở cấp độ hệ điều hành, file là danh sách n byte chưa có ngữ nghĩa. Mỗi ứng dụng phải tự quy định cấu trúc cụ thể cho file của mình tạo ra và đọc lại ngữ nghĩa của cấu trúc nàyVB cung cấp 3 dạng file khác nhau, ứng với mỗi dạng có 1 cách thức truy xuất dữ liệu tương ứng.File tuần tự (sequence file) hay file văn bản là danh sách gồm n byte, mỗi byte là 1 ký tự ANSI (vd: file source code của VB *.bas)File nhị phân (binary file) là danh gồm n byte nhị phân chưa có cấu trúc (vd: file word, excel)File truy xuất trực tiếp (random file): là danh sách gồm n record cùng độ dài, mỗi record chứa nhiều trường (field) thông tin Tin học đại cương - Chương 737.2. Tổng quát về file trong VBVB cung cấp cho người lập trình 2 phương pháp để quản lý file:Gọi các thủ tục truyền thống như Open, Close, Input, Write, Get, Put,.. Ta có thể gọi các thủ tục này là các lệnh VBDùng mô hình đối tượng FSO (File System Object). Người lập trình tạo ra đối tượng FileSystemObject rồi mỗi khi cần quản lý hệ thống file sẽ gọi method tương ứng của đối tượng trênFSO rất thân thiện và dễ dùng nhưng chỉ hỗ trợ cho phép truy xuất file văn bản, chưa hỗ trợ truy xuất file nhị phân và file randomTin học đại cương - Chương 747.3. Truy xuất file trong VBQuy trình truy xuất 1 file trong VB gồm 3 bướcMở/tạo file : Gọi thủ tục OpenLặp truy xuất file: thông qua việc gọi thủ tục Input, Get, Put, Write... Thường thì mỗi thủ tục chỉ truy xuất 1 đơn vị thông tin rất nhỏ của file nên ta phải lặp nhiều lần cho tới khi hết file, tuy nhiên ta có quyền đọc/ghi toàn bộ nội dung file vào/ra bộ nhớĐóng file: Gọi thủ tục CloseTin học đại cương - Chương 757.3. Truy xuất file trong VB (tt)Bảng các lệnh VB truy xuất fileTin học đại cương - Chương 76Tên thủ tụcSequential fileRandom fileBinary fileOpenXXXCloseXXXInput #XLine Input #XPrint #XWrite #XInput()XXType....EndTypeXPutXXGetXX7.3. Truy xuất file trong VB (tt)Bảng các function truy xuất file trong VBDir: Duyệt các phần tử thuộc thư mụcFileCopy: Sao chép 1 file thành file mớiFileDateTime: Đọc/hiệu chỉnh ngày giờ sửa file lần cuốiFileLen: xác định độ dài file chưa mởFreeFile: xác định chỉ số file còn trống để có thể dùng an toànLoc: Xác định vị trí truy xuất hiện hành trong fileLOF: xác định độ dài file đã mởSeek: Xác định/thiết lập vị trí truy xuất fileGetAttr: độc thuộc tính fileSetAttr: ghi thuộc tính fileTin học đại cương - Chương 777.4. Truy xuất Binary fileMở (open) file nhị phânOpen pathName For Binary As filenumberNếu chưa biết cấu trúc của file nên dùng dãy các byte để đọc/ghi dữ liệu ra/vào file nhị phânNếu đã biết cấu trúc file nhị phân nên khai báo kiểu dữ liệu mô tả cấu trúc đó rồi khai báo biến có kiểu vừa định nghĩa để chứa thông tin đọc/ghi trên fileDùng lệnh Seek để dời pointer tới vị trí mong muốnSeek [#] filenumber, [position], AVariableDời pointer tới vị trí position, đọc dữ liệu chứa vào biến AVariable. Số byte đọc được = kích cỡ biến AVariableTin học đại cương - Chương 787.4. Truy xuất Binary file (tt)Dùng lệnh Get để đọc dữ liệuGet [#] filenumber, [position], AVariableĐọc dữ liệu từ vị trí position rồi chứa vào biến AVariableSố byte đọc được = kích thước biến AvariableDùng lệnh Put để ghi dữ liệuPut[#] filenumber, [position], AVariableGhi dữ liệu trong AVariable vào vị trí position của fileSố byte được ghi vào file = kích thước biến AvariableDùng lệnh Close để đóng fileClose [#] filenumberTin học đại cương - Chương 79Ví dụ truy xuất Binary fileMỗi file thực thi (*.EXE) đều có 1 header dài 32 bytes với các field như sau:Nếu giá trị field Offset (2 byte) ở offset 18h (24) có giá trị là 40h (60) thì tương ứng là file executable trên windows (*.exe, *.dll, *.ocx, *.scr, *.drv,....)Nếu giá trị field Offset <40h (60) thì là file *.exe chạy trên DOSDựa vào header trên, hãy viết một ứng dụng cho phép user chọn đường dẫn đến file bất kỳ rồi kiểm tra tính chất của file đó với kết quả hiển thịKhông phải file executableFile executable chạy trên DOSFile executable chạy trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv,....)Tin học đại cương - Chương 710IndexFieldDiễn giải0MagicChuỗi 2 ký tự magic "MZ".......Các file khác (không quan tâm)18hOffsetOffset tới bảng tái định chương trình stubVí dụ truy xuất Binary fileGiao diện đề nghị cho ứng dụng kiểm tra loại fileTin học đại cương - Chương 711Ví dụ: Chi tiết hàm kiểm tra phân loại fileTin học đại cương - Chương 7127.5. Truy xuất Sequence fileMở file text bằng lệnh Open như sau :Open pathname [Input | Output | Append] As filenumber [Len=buffersize]Nếu file được mở ở chế độ Input & chưa tồn tại thì lỗi sai tên file xảy ra. Nếu file được mở ở chế độ Output | Append & chưa tồn tại thì hệ thống sẽ tạo ra file mới.Dùng lệnh Line Input để đọc 1 hàng từ text fileLine Input #filenumber, varnameQuy ước 1 hàng kết thúc bởi CR - Carriage Return hay CRLFTin học đại cương - Chương 7137.5. Truy xuất Sequence file (tt)Dùng lệnh Input #filenumber, varlist để đọc các chuỗi hay số từ file (được trình bày chi tiết trong slide kế).Dùng hàm Input (number, [#]filenumber) để đọc1 chuỗi từ file (được trình bày chi tiết trong slide kế).Dùng lệnh Write #filenumber, [outputlist] để ghi các chuỗi hay số ra file (được trình bày chi tiết trong slide kế).Sau khi đãxử lý xong file, ta dùng lệnh Close [#]filenum để đóng file lại.Tin học đại cương - Chương 714Chi tiết về lệnh Input #Cú pháp : Input #filenumber, varlisttrong đó varlist là danh sách các biến chứa giá trị chuỗi hay số cần đọc, các biến trong danh sách được ngăn cách bằng dấu ','. Cách thứcxử lý dữ liệu trên file nhập:Dạng dữ liệu trên file Giá trị nhận đượcdấu ',' hay dòng trống Empty#NULL# Null#TRUE# hay #FALSE# True hay False#yyyy-mm-dd hh:mm:ss# Ngày/giờ#ERROR errornumber# mã lỗi errornumber"abcdef" chuỗi abcdef1254.386 giá trị 1254.386Tin học đại cương - Chương 715Chi tiết về hàm Input Ngoài lệnh Input ở trên, VB cung cấp thêm hàm Input với cú pháp như sau: Input number, [#]filenumberTrong đó number là số ký tự ANSI cần đọc từ filenumber.Khác với lệnh Input, kết quả trả về của hàm Input gồm mọi kýtự thô trên file kể cả các ký tự điều khiển CR, LF, khoảng trắng, ",", nháy kép... Chỉ dùng hàm Input trên các file được mở ở chế độ Input | Binary.Tin học đại cương - Chương 716Chi tiết về lệnh Write#Cú pháp : Write#filenumber, [outputlist]trong đó outputlist là danh sách các biểu thức chứa giá trị chuỗi hay số cần ghi, các biểu thức trong danh sách được ngăn cách bằng dấu ',' Cách thứcxử lý ghi dữ liệu ra file :Kiểu dữ liệu Kết qủa ghi trên fileoutputlist chỉ có dấu ',' Dòng trống (CRLF)Null #NULL#Luận lý #TRUE# hay #FALSE#Date #yyyy-mm-dd hh:mm:ss#mã lỗi errornumber #ERROR errornumber# chuỗi abcdef "abcdef"Số Chuỗi miêu tả số dùng dấu ‘.’Tin học đại cương - Chương 717Ví dụ truy xuất sequence fileViết ứng dụng cho phép chọn đường dẫn tới 1 text file rồi đếm số từ được chứa trong file này(Mỗi từ là 1 chuỗi ký tự số a-z hoặc số 0-9)Tin học đại cương - Chương 718Ví dụ: Chi tiết hàm đếm từ trong fileTin học đại cương - Chương 7197.6. Các hàm xác định vị trí truy xuất file Hàm Loc (filenum) trả về vị trí truy xuất hiện tại trong file filenum.Mode Return ValueRandom chỉ số record đọc/ghi lầncuối cùngBinary chỉ số byte đọc/ghi lầncuối cùng.Output | Append | Input chỉ số byte đọc/ghi lầncuối cùng/128 (ít dùng kết quả này)Ví dụ Dim MyChar As Byte Open "TestFile" For Binary As #1 ' mở file để đọc/ghi. Do While Not EOF(1) ' lặpcho đếnhết file. MyChar = Input(1, #1) ' đọc byte kế tiếp. Debug.Print Loc(1) ' hiểnthị vị trí byte vừa được đọc Loop Close #1 ' đóng file.Tin học đại cương - Chương 7207.6. Các hàm xác định vị trí truy xuất file (tt) Hàm Seek(filenum) trả về vị trí truy xuất kế tiếp trong file filenum.Mode Return ValueRandom truy xuất lần kế tiếp ở vị trí record nàyBinary truy xuất lần kế tiếp ở vị trí byte nàyOutput | Append | Input vị trí byte đầu tiên là 1, byte kế là 2,....Ví dụ Dim MyChar As Byte Open "TestFile" For Binary As #1 ' mở file để đọc. Do While Not EOF(1) ' lặpcho đếnhết file. MyChar = Input(1, #1) ' đọc byte kế tiếp. Debug.Print Seek(1) ' hiển thị vị trí byte truy xuất lần kế tiếp Loop Close #1 ' đóng file.Tin học đại cương - Chương 7217.7. Các hàm truy xuất thuộc tính fileHàm FileDateTime(pathname)Trả về ngày giờ hiệu chỉnh file lần cuốiHàm GetAttr (pathname)Trả về byte thuộc thuộc tính của file. Các bit trong byte thuộc tính có ý nghĩa như sau:Tin học đại cương - Chương 722Giá trịTên hằng VB gợi nhớÝ nghĩa0vbNormalNormal1vbReadOnlyChỉ đọc2vbHiddenẨn4vbSystemFile hệ thống8vbVolumeNhãn đĩa16vbDirectoryThư mục32vbArchiveBị thay đổi từ lần backup cuối7.7. Các hàm truy xuất thuộc tính file (tt)Hàm SetAttr (pathname, attributes)Thiết lập thuộc tính attributes cho file pathnameVí dụIf GetAttr ("c:\windows\win.com") And vbReadOnly Then MsgBox "c:\windows\win.com là file chỉđọc"End If‘thiết lập thuộc tính read-only cho file win.comDim bytFileAttr As BytebytFileAttr = GetAttr ("c:\windows\win.com")bytFileAttr = bytFileAttr Or vbReadOnly ' phép Or bitwiseSetAttr "c:\windows\win.com", bytFileAttrTin học đại cương - Chương 7237.7. Các hàm truy xuất thuộc tính file (tt)Hàm FreeFile [(rangenumber)]Trả về số Integer ứng với chỉ số file chưa được dùng. Tham số rangenumber thường không được dùng trong hàm nàyHàm LOF (#filenumber)Trả về giá trị kiểu Long ứng với size của file được mở xác định bởi filenumberHàm FileLen (pathname)Trả về giá trị kiểu Long ứng với size của file được xác định bởi pathnameTin học đại cương - Chương 7247.8. Lệnh sao chép/Xóa fileLệnh sao chép fileCú pháp: FileCopy SourcePath, DestPath.Công dụng: Nhân bản file SourcePath tới DestPath. File được nhân bản không bị mở rồi mới nhân bản.Ví dụ : FileCopy "c:\autoexec.bat" "c:\backup\autoexec.bat"Lệnh xóa fileCú pháp: Kill patternCông dụng xóa từ 0 đến n file có tên thỏa mãn mẫu pattern (dùng ký tự * và ? để miêu tả).Ví dụ: Kill "c:\windows\*.tmp"Tin học đại cương - Chương 7257.9. Các lệnh xử lý thư mụcLệnh tạo thư mục mớiCú pháp: MkDir pathnameVí dụ: MkDir "D:\Temp\VB60"Lệnh xóa thư mục (rỗng)Cú pháp: RmDir pathnameVí dụ: RmDir "D:\Temp\VB60" Hàm lấy đường dẫn tới thư mục hiện hànhCú pháp: CurDir [(drive)]Lệnh chuyển thư mục hiện hànhCú pháp: ChDir pathnameLệnh chuyển ổ đĩa hiện hànhCú pháp: ChDrive driveHàm duyệt các phần tử trong 1 thư mụcCú pháp: Dir[(pattern [, attributes] ) ]Tin học đại cương - Chương 726Tin học đại cương - Chương 727Thực hành chương 7Xử lý tập tin với Visual Basic 6.0Lab 04 – Ứng dụng xóa fileHãy thử viết 1 ứng dụng cho phép user xác định mẫu các file cần xóa rồi tìm các file thỏa mãn mẫu qui định và xóa chúng, việc tìm và xóa nên đệ quy từ vị trí mẫu để xóa triệt để.Thí dụ nếu người dùng nhập pattern c:\*.tmp, ứng dụng sẽ tìm và xóa mọi file *.tmp từ thư mục gốc.Tin học đại cương - Chương 729Lab 04 – Ứng dụng xóa file (tt)Giao diện đề xuất của ứng dụngTin học đại cương - Chương 730Code của ứng dụng xóa file đệ quyTin học đại cương - Chương 731Code của ứng dụng (tt)Tin học đại cương - Chương 732Code của ứng dụng (tt)Tin học đại cương - Chương 733
Các file đính kèm theo tài liệu này:
- tin_hoc_dai_cuong_vbch7_4749.ppt