Giáo trình Tin học đại cương - Chương 7: Xử lý tập tin với Visual Basic 6.0 - Trần Quang Hải Bằng
Bạn đang xem tài liệu "Giáo trình Tin học đại cương - Chương 7: Xử lý tập tin với Visual Basic 6.0 - Trần Quang Hải Bằng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_trinh_tin_hoc_dai_cuong_chuong_7_xu_ly_tap_tin_voi_visu.pdf
Nội dung text: Giáo trình Tin học đại cương - Chương 7: Xử lý tập tin với Visual Basic 6.0 - Trần Quang Hải Bằng
- Dùng cho nhóm ngành: Công trình + C ơ khí TIN HỌC ĐẠI CƯƠNG Ch ươ ng 7: Xử lý t ập tin v ới Visual Basic 6.0 bangtqh@utc2.edu.vn Nội dung 1. Cấu trúc t ệp (file) 2. Tổng quát v ề file trong VB 3. Truy xu ất file trong VB (Các l ệnh/Các hàm) 4. Truy xu ất file nh ị phân (binary file) 5. Truy xu ất file tu ần t ự (sequence file/text file) 6. Các hàm xác đị nh v ị trí truy xu ất file 7. Các hàm truy xu ất thu ộc tính file 8. Lệnh sao chép và xóa file 9. Các l ệnh x ử lý th ư m ục bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 2
- 7.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ày VB 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 bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 3 7.2. Tổng quát về file trong VB VB 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 VB – Dù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ên FSO 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 random bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 4
- 7.3. Truy xuất file trong VB Quy trình truy xu ất 1 file trong VB g ồm 3 b ướ c – Mở/t ạo file : G ọi th ủ t ục Open – Lặ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 Close bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 5 7.3. Truy xuất file trong VB (tt) Bảng các l ệnh VB truy xu ất file Tên th ủ t ục Sequentialfile Random file Binaryfile Open XXX Close XXX Input # X Line Input # X Print # X Write # X Input() XX Type EndType X Put XX Get XX bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 6
- 7.3. Truy xuất file trong VB (tt) Bảng các function truy xu ất file trong VB – Dir : Duy ệt các ph ần t ử thu ộc th ư m ục – FileCopy : Sao chép 1 file thành file m ới – FileDateTime : Đọ c/hi ệu ch ỉnh ngày gi ờ s ửa file l ần cu ối – FileLen : 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àn – Loc : Xác đị nh v ị trí truy xu ất hi ện hành trong file – LOF : xác đị nh độ dài file đã m ở – Seek : Xác đị nh/thi ết l ập v ị trí truy xu ất file – GetAttr : độ c thu ộc tính file – SetAttr : ghi thu ộc tính file bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 7 7.4. Truy xuất Binary file Mở ( open ) file nh ị phân Open pathName For Binary As filenumber –Nế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ân –Nế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 file Dùng l ệnh Seek để d ời pointer tới v ị trí mong mu ốn Seek [#] filenumber , [ position ], AVariable Dờ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 AVariable bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 8
- 7.4. Truy xuất Binary file (tt) Dùng l ệnh Get để đọ c d ữ li ệu Get [#] filenumber, [position ], AVariable Đọ c d ữ li ệu t ừ v ị trí position rồi ch ứa vào bi ến AVariable Số byte đọ c đượ c = kích th ướ c bi ến Avariable Dùng l ệnh Put để ghi d ữ li ệu Put [#] filenumber, [position ], AVariable Ghi d ữ li ệu trong AVariable vào v ị trí position của file Số byte đượ c ghi vào file = kích th ướ c bi ến Avariable Dùng l ệnh Close để đóng file Close [#] filenumber bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 9 Ví dụ truy xuất Binary file Mỗi file th ực thi (*.EXE) đề u có 1 header dài 32 bytes v ới các field nh ư sau: Index Field Di ễn gi ải 0 Magic Chu ỗi 2 ký t ự magic "MZ" Các file khác (không quan tâm) 18h Offset Offsettới b ảng tái đị nh ch ươ ng trình stub –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 DOS Dự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 executable – File executable ch ạy trên DOS – File executable ch ạy trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv, ) bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 10
- Ví dụ truy xuất Binary file Giao di ện đề ngh ị cho ứng d ụng ki ểm tra lo ại file bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 11 Ví d ụ: Chi ti ết hàm ki ểm tra phân lo ại file bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 12
- 7.5. Truy xuất Sequence file Mở 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 file Line Input #filenumber, varname Quy ướ c 1 hàng k ết thúc b ởi CR - Carriage Return hay CRLF bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 13 7.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. bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 14
- Chi ti ết v ề l ệnh Input # Cú pháp : Input #filenumber , varlist trong đó 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 đượ c dấ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 abcdef 1254.386 giá tr ị 1254.386 bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 15 Chi 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, [#]filenumber Trong đó 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 . bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 16
- Chi 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 file outputlist 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 ‘.’ bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 17 Ví dụ truy xuất sequence file Vi ế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) bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 18
- Ví d ụ: Chi ti ết hàm đế m t ừ trong file bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 19 7.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 Value Random ch ỉ s ố record đọ c/ghi l ầncu ối cùng Binary 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. bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 20
- 7.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 Value Random truy xu ất l ần k ế ti ếp ở v ị trí record này Binary truy xu ất l ần k ế ti ếp ở v ị trí byte này Output | 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. bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 21 7.7. Các hàm truy xu ất thu ộc tính file Hàm FileDateTime( pathname ) – Tr ả v ề ngày gi ờ hi ệu ch ỉnh file l ần cu ối Hà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: Giá tr ị Tên hằng VB g ợi nh ớ Ý ngh ĩa 0 vbNormal Normal 1 vbReadOnly Ch ỉ đọ c 2 vbHidden Ẩn 4 vbSystem File h ệ th ống 8 vbVolume Nhãn đĩ a 16 vbDirectory Th ư mục 32 vbArchive Bị thay đổ i từ l ần backup cu ối bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 22
- 7.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 pathname Ví 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.com Dim bytFileAttr As Byte bytFileAttr = GetAttr ("c:\windows\win.com") bytFileAttr = bytFileAttr Or vbReadOnly ' phép Or bitwise SetAttr "c:\windows\win.com", bytFileAttr bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 23 7.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ày Hàm LOF (#filenumber) – Tr ả v ề giá tr ị ki ểu Long ứng v ới size c ủa file đượ c mở xác đị nh b ởi filenumber Hàm FileLen (pathname ) – Tr ả v ề giá tr ị ki ểu Long ứng v ới size c ủa file đượ c xác đị nh b ởi pathname bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 24
- 7.8. Lệnh sao chép/Xóa file Lệnh sao chép file – Cú 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 file – Cú pháp: Kill pattern – Cô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" bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 25 7.9. Các l ệnh x ử lý thư mục Lệnh t ạo th ư m ục m ới Cú pháp: MkDir pathname Ví d ụ: MkDir "D:\Temp\VB60" Lệnh xóa th ư m ục (r ỗng) Cú pháp: RmDir pathname Ví d ụ: RmDir "D:\Temp\VB60" Hàm l ấy đườ ng d ẫn t ới th ư m ục hi ện hành Cú pháp: CurDir [(drive) ] Lệnh chuy ển th ư m ục hi ện hành Cú pháp: ChDir pathname Lệnh chuy ển ổ đĩ a hi ện hành Cú pháp: ChDrive drive Hàm duy ệt các ph ần t ử trong 1 th ư m ục Cú pháp: Dir [( pattern [, attributes ] ) ] bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 26
- bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 27 Thực hành chương 7 Xử lý t ập tin v ới Visual Basic 6.0 bangtqh@utc2.edu.vn
- Lab 04 – Ứng dụng xóa file Hã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. bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 29 Lab 04 – Ứng dụng xóa file (tt) Giao di ện đề xu ất c ủa ứng d ụng bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 30
- Code c ủa ứng d ụng xóa file đệ quy bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 31 Code c ủa ứng dụng (tt) bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 32
- Code c ủa ứng dụng (tt) bangtqh@utc2.edu.vn Tin h ọc đạ i c ươ ng - Ch ươ ng 7 33