Bài giảng Hướng dẫn lập trình VB.NET - Chương 12: Khám phá cách xử lý file TEXT và chuỗi - Phạm Đức Lập

Nội dung thảo luận:

- Hiển thị nội dung file text bằng đối tượng TextBox

- Lưu các thông tin trong file text

- Sử dụng kỹ thuật xử lý chuỗi để sắp xếp và mã hóa file Text

Trong chương này chúng ta học cách xử lý file text đơn giản với các thao tác như mở file,

hiển thị nội dung, lưu và các thao tác khác như xử lý chuỗi trong chương trình thông qua

lớp chuỗi String. Bạn có thể sắp xếp, ghép nối mã hóa hiển thị từng từ, từng dòng và toàn

bộ nội dung văn bản trong file text.

Chú ý:

- Đối tượng FileSystem cung cấp các hàm như FileOpen, LineInput, PrintLine,

FileClose để thao tác với tập tin. Đối tượng này nằm trong không gian tên

Microsoft.VisualBasic.

- Ngoài ra một số hàm trong không gian System.IO cũng có thể dùng bổ sung.

1. Hiển thị nội dung file Text bằng đối tượng TextBox

Cách đơn giản nhất để hiển thị một file text là dùng điều khiển textbox. Để nạp nội dung

file text vào textbox ta dùng 4 hàm sau: FileOpen – Mở file để dọc hay ghi, LineInput –

Đọc một dòng văn bản từ file, EOF – Kiểm tra xem con trỏ đã đến cuối file chưa,

FileClose – Đóng file.

1.1. Mở file Text để đọc nội dung

Bạn có thể cho phép người dùng mở file text bằng cách hiển thị hộp thoại OpenfileDialog.

Sau khi người dùng đã chọn file, hộp thoại sẽ trả về đường dẫn file đầy đủ thông qua thuộc

tính filename.

1.2. Hàm FileOpen

Sau khi đã có tên file, bạn có thể dùng hàm FileOpen mở file để đọc hay ghi. Cú pháp hàm

FileOpen như sau:

FileOpen(filenumber, pathname, mode)

Trong đó:

- filenumber: số nguyên từ 1 đến 255

- pathname: đường dẫn hợp lệ trỏ đến file cần mở

pdf 19 trang yennguyen 3940
Bạn đang xem tài liệu "Bài giảng Hướng dẫn lập trình VB.NET - Chương 12: Khám phá cách xử lý file TEXT và chuỗi - Phạm Đức Lập", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Hướng dẫn lập trình VB.NET - Chương 12: Khám phá cách xử lý file TEXT và chuỗi - Phạm Đức Lập

Bài giảng Hướng dẫn lập trình VB.NET - Chương 12: Khám phá cách xử lý file TEXT và chuỗi - Phạm Đức Lập
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 1 - Add: cnt-44-dh, VIMARU 
Chương 12: 
Khám phá cách xử lý file TEXT và chuỗi 
--------oOo-------- 
Nội dung thảo luận: 
- Hiển thị nội dung file text bằng đối tượng TextBox 
- Lưu các thông tin trong file text 
- Sử dụng kỹ thuật xử lý chuỗi để sắp xếp và mã hóa file Text 
Trong chương này chúng ta học cách xử lý file text đơn giản với các thao tác như mở file, 
hiển thị nội dung, lưu và các thao tác khác như xử lý chuỗi trong chương trình thông qua 
lớp chuỗi String. Bạn có thể sắp xếp, ghép nối mã hóa hiển thị từng từ, từng dòng và toàn 
bộ nội dung văn bản trong file text. 
Chú ý: 
- Đối tượng FileSystem cung cấp các hàm như FileOpen, LineInput, PrintLine, 
FileClose để thao tác với tập tin. Đối tượng này nằm trong không gian tên 
Microsoft.VisualBasic. 
- Ngoài ra một số hàm trong không gian System.IO cũng có thể dùng bổ sung. 
1. Hiển thị nội dung file Text bằng đối tượng TextBox 
Cách đơn giản nhất để hiển thị một file text là dùng điều khiển textbox. Để nạp nội dung 
file text vào textbox ta dùng 4 hàm sau: FileOpen – Mở file để dọc hay ghi, LineInput – 
Đọc một dòng văn bản từ file, EOF – Kiểm tra xem con trỏ đã đến cuối file chưa, 
FileClose – Đóng file. 
1.1. Mở file Text để đọc nội dung 
Bạn có thể cho phép người dùng mở file text bằng cách hiển thị hộp thoại OpenfileDialog. 
Sau khi người dùng đã chọn file, hộp thoại sẽ trả về đường dẫn file đầy đủ thông qua thuộc 
tính filename. 
1.2. Hàm FileOpen 
Sau khi đã có tên file, bạn có thể dùng hàm FileOpen mở file để đọc hay ghi. Cú pháp hàm 
FileOpen như sau: 
 FileOpen(filenumber, pathname, mode) 
Trong đó: 
- filenumber: số nguyên từ 1 đến 255 
- pathname: đường dẫn hợp lệ trỏ đến file cần mở 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 2 - Add: cnt-44-dh, VIMARU 
- mode: từ khóa cho biết chế độ mở (ví dụ OpenMode.Input là mở file để đọc và 
OpenMode.Output là mở file để ghi) 
Số nguyên filenumber dùng để kết hợp với file khi nó được mở cho mục đích đọc ghi. Bạn 
dùng nó để tham chiếu đến file trong quá trình xử lý. Lưu ý là các số filenumber trong hàm 
FileOpen, LineInput, FileClose và EOF phải trùng nhau thì khi mở file mới không gây ra 
lỗi. 
Ví dụ: 
Chương trình TextBrowser sau sẽ minh họa cách mở một file text và cho hiển thị nó lên 
một ô textbox. 
Tìm hiểu chương trình: 
Chương trình bao gồm một menu File với hai mục chọn là Open cho phép mở file rồi hiển 
thị nội dung file text đó vào một textbox và mục Close để đóng file. 
Thiết kế giao diện: 
Bạn tạo một giải pháp mới và thêm vào dự án có tên TextBrowser và thiết kế giao diện như 
sau: 
Trong đó các điều khiển có thuộc tính như sau: 
- Textbox1: Enable – False, Multiline – True. 
- OpenToolStripMenuItem: Enable – True 
- CloseToolStripMenuItem: Enable – False 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 3 - Add: cnt-44-dh, VIMARU 
- Các điều khiển và thuộc tính khác như hình. 
Viết mã: 
Tạo thủ tục OpenToolStripMenuItem_Click như sau: 
 'Khai báo hai biến, một biến lưu toàn bộ văn bản 
 'một biến lưu từng dòng văn bản 
 Dim AllText, LineOfText As String 
 'Tạo bộ lọc file *.txt 
 OpenFileDialog1.Filter = "Text files (*.txt)| *.txt" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 'Mở file để đọc 
 FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input) 
 Do Until EOF(1) 
 'Đọc từng dòng đến hết 
 LineOfText = LineInput(1) 
 'Nối vào biến Alltext 
 AllText = AllText & LineOfText & vbCrLf 
 Loop 
 'Cập nhật nội dung textbox 
 Label1.Text = OpenFileDialog1.FileName 
 TextBox1.Text = AllText 
 ' Loại bỏ đánh dấu chọn cho văn bản 
 TextBox1.Select(1, 0) 
 'Cho phép soạn thảo 
 TextBox1.Enabled = True 
 'Cho phép chọn mục Close trên menu 
 CloseToolStripMenuItem.Enabled = True 
 'Vô hiệu hóa mục Open trên menu 
 OpenToolStripMenuItem.Enabled = False 
 Catch ex As Exception 
 MsgBox("Lỗi mở file") 
 Finally 
 'Đóng file 
 FileClose(1) 
 End Try 
 End If 
Tiếp theo tạo thủ tục CloseToolStripMenuItem_Click như sau: 
 Label1.Text = "Mở file văn bản bằng mục Open từ menu File" 
 TextBox1.Text = "" 
 OpenToolStripMenuItem.Enabled = True 
 CloseToolStripMenuItem.Enabled = False 
Các bạn có thể đọc các dòng ghi chú màu xanh lá cây để biết công dụng của từng phát biểu 
của chương trình. 
Chạy chương trình: 
Các bạn ấn F5 để chạy chương trình và mở một file text bất kỳ để xem chương trình chạy. 
Sử dụng lớp StreamReader để mở file Text 
Ngoài các hàm mở đọc file như đã biết, chúng ta cũng có thể sử dụng lớp StreamReader 
của VB.NET để thực hiện chức năng tương tự. Để sử dụng lớp này ta cần đặt thêm khai 
báo Imports System.IO ở đầu chương trình. 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 4 - Add: cnt-44-dh, VIMARU 
Sau đây là thủ tục OpenToolStripMenuItem_Click đã được viết lại sử dụng lớp 
StreamReader: 
 Dim StreamReaderToDisPlay As StreamReader 
 OpenFileDialog1.Filter = "TEXT FILES (*TXT) | *.TXT" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 StreamReaderToDisPlay = New StreamReader _ 
 (OpenFileDialog1.FileName) 
 Label1.Text = OpenFileDialog1.FileName 
 TextBox1.Text = StreamReaderToDisPlay.ReadToEnd 
 TextBox1.Enabled = True 
 OpenToolStripMenuItem.Enabled = False 
 CloseToolStripMenuItem.Enabled = True 
 Catch ex As Exception 
 MsgBox("Lỗi mở file") 
 Finally 
 StreamReaderToDisPlay.Close() 
 End Try 
 End If 
Bạn có thể xem toàn bộ mã chương trình trong giải pháp TextBrowser1 của phần bài tập 
chương 12. 
2. Tạo một file text mới 
Tạo file text rất hữu ích khi bạn muốn ghi ra file .log, .ini hay readme. Các bước tổng quát 
để ghi một file text có thể như sau: 
- Nhận dl nhập từ người dùng hay do chương trình tính ra 
- Gán dl cho một hay nhiều biến. Ví dụ như gán nội dung textbox1 ra một biến 
- Yêu cầu nhập tên file sẽ ghi ra bằng hộp thoại SaveFileDialog 
- Sử dụng đường dẫn và tên file do hộp thoại SaveFileDialog trả về và gọi hàm ghi 
file 
- Sử dụng hàm PrintLine để lưu nội dung biến xuống file 
- Đóng file khi ghi xong 
Ví dụ QuickNote sau đây sẽ minh họa việc tạo file text. 
Tìm hiểu chương trình: 
Chương trình gồm một ô textbox để chế dộ multiline hiện scrollbars cả hai chiều (thuộc 
tính scrollbar – giá trị both), menu File gồm ba mục chọn Insert Date cho phép chèn ngày 
tháng vào đầu văn bản, mục chọn Save cho phép ghi lại nội dung ô textbox vào một file 
text với tên do người dùng nhập vào, mục Close đóng chương trình. 
Thiết kế giao diện: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 5 - Add: cnt-44-dh, VIMARU 
Bạn tạo một giải pháp mới và thêm vào một dự án có cùng tên là QuickNote rồi thiết kế 
giao diện như hình: 
Viết mã: 
Tạo thủ tục InsertDateToolStripMenuItem_Click như sau: 
 TextBox1.Text = DateString & vbCrLf & TextBox1.Text 
 TextBox1.Select(1, 0) 
Tạo thủ tục SaveToolStripMenuItem_Click như sau: 
 SaveFileDialog1.Filter = "Text File (*.txt) | *.txt" 
 SaveFileDialog1.ShowDialog() 
 If SaveFileDialog1.FileName "" Then 
 Try 
 FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output) 
 PrintLine(1, TextBox1.Text) 
 Catch ex As Exception 
 MsgBox("Lỗi khi ghi") 
 Finally 
 FileClose(1) 
 End Try 
 End If 
Chạy chương trình: 
Bạn hãy chạy chương trình, ghi vào textbox những đoạn văn bản tùy ý hay có thể sao chép 
từ một file khác, chèn thêm ngày tháng và lưu vào một file nào đó (phải nhập tên file). 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 6 - Add: cnt-44-dh, VIMARU 
3. Xử lý chuỗi trong chương trình 
Chuỗi là thông tin cần xử lý nhiều nhất trong mọi ngôn ngữ lập trình. Các thao tác xử lý sẽ 
học trong chương này bao gồm cắt chuỗi, nối chuỗi, tìm kiếm, sắp xếp, so sánh chuỗi, 
Việc nối chuỗi ta có toán tử & hay có thể dùng phương thức Concat của VB ví dụ: 
 Dim loichao as String 
 loichao = String.Concat(“Hello ”, “World, ”, “Hi Everyone!”) 
Bạn có thể dùng các phương thức cũ như Mid, Ucase, Lcasehay dùng các phương thức 
mới mà lớp String cung cấp như SubString, ToUpper, ToLower. Thường ta dùng các 
phương thức mới này hơn. 
Bảng sau liệt kê các hàm xử lý chuỗi trong cả .NET và VB truyền thống: 
.NET VB cũ Chức năng 
ToUpper UCase Đổi toàn bộ chuỗi sang chữ hoa 
ToLower LCase Đổi toàn bộ chuỗi sang chữ thường 
Length Len Trả về chiều dài chuỗi 
SubString Mid Cắt chuỗi con trong chuỗi cha 
IndexOf InStr Xác định vị trí chuỗi con trong chuỗi cha 
Trim Trim Cắt bỏ khoảng trắng trong chuỗi 
Remove Loại bỏ khoảng trắng ở giữa chuỗi 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 7 - Add: cnt-44-dh, VIMARU 
Insert Chèn chuỗi con vào chuỗi cha 
StrComp So sánh chuỗi 
3.1. Sắp xếp chuỗi 
Các ký tự ghép lại tạo thành chuỗi. Mỗi ký tự có một mã trong bảng mã ASCII. Bảng mã 
này có 255 mã. Sau này trong các hệ điều hành như WinXP, NT, 2000 thì chuẩn quốc tế 
qui định các bảng mã ký tự khác như Unicode. Trong bảng mã này mỗi mã ký tự chiếm 2 
byte chứ không phải là 1 byte như trong ASCII. Việc sắp xếp các ký tự là dựa vào mã của 
ký tự đó. Chữ A mã 65 sẽ đứng trước chữ B có mã 66. 
3.2. Làm việc với ký tự ASCII 
Để xem một ký tự có mã ASCII là bao nhiêu có thể dùng hàm Asc, ví dụ: 
 Dim AscCode As Short 
 AscCode = Asc("A") 
 MsgBox(AscCode) 
Ngược lại bạn có thể dùng hàm Chr() để biết ký tự nào tương ứng với một mã ASCII cho 
trước, ví dụ: 
 Dim letter As Char 
 letter = Chr(65) 
 MsgBox(letter) 
Để so sánh chuỗi, bạn có thể dùng các toán tử sau: , =, >, =, <=. 
Một ký tự coi là lớn hơn nếu mã ASCII của nó lớn hơn, ví dụ “A” < “B” vì mã của “A” là 
65 nhỏ hơn 66 là mã của “B”. 
Khi so sánh hai chuỗi, VB sẽ so sánh lần lượt các ký tự từ đầu tiên đến tiếp theo cho đến 
khi gặp ký tự khác nhau. Nếu không có ký tự khác nhau thì chuỗi nào dài hơn, chuỗi đó 
lớn hơn. 
3.3. Sắp xếp chuỗi trong ô TextBox 
Chương trình SortText sau đây sẽ minh họa việc sắp xếp chuỗi bằng các toán tử so sánh 
chuỗi trong một ô textbox. Đây là chương trình được nâng cấp từ chương trình QuickNote. 
Tìm hiểu chương trình: 
Chương trình SortText này có một form chính. Form này có một menu File với 4 mục 
chọn. Mục chọn Open cho phép mở một file text, mục chọn Sort Text cho phép sắp xếp 
các dòng trong textbox theo thứ tự tăng dần, mục chọn Save cho phép lưu lại những thao 
tác đã thực hiện, mục chọn Close để đóng file. 
Thiết kế giao diện: 
Giao diện nó tương tự như chương trình QuickNote nhưng có thêm các mục chọn như đã 
liệt kê. Giao diện như hình: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 8 - Add: cnt-44-dh, VIMARU 
Thuộc tính enable của textbox có giá trị là True để cho phép người dùng nhập văn bản cho 
chương trình sắp xếp. Nghĩa là chương trình có thể sắp xếp nội dung của một file text được 
chỉ định hay là người dùng trực tiếp nhập liệu vào. 
Viết mã: 
Trước hết ta thêm vào dự án một module có tên SortModule. Module này sẽ khai báo một 
mảng có tên strArr chứa các dòng của văn bản và chứa một hàm Sapxep() để sắp xếp các 
phần tử trong mảng theo thứ tự giảm dần. Nội dung module như sau: 
 Public strArr() As String 
 Sub Sapxep(ByRef mang() As String, ByVal sophantumang As Short) 
 Dim tam As String 
 Dim i, j, trungbinh As Short 
 'Sắp xếp các phần tử trong mảng mang() 
 'Mảng sắp xếp nhị phân theo thứ tự giảm dần 
 trungbinh = sophantumang \ 2 
 Do While trungbinh > 0 
 For i = trungbinh To sophantumang - 1 
 j = i - trungbinh + 1 
 For j = (i - trungbinh + 1) To 1 Step -trungbinh 
 If mang(j) <= mang(j + trungbinh) Then Exit For 
 tam = mang(j) 
 mang(j) = mang(j + trungbinh) 
 mang(j + trungbinh) = tam 
 Next j 
 Next i 
 trungbinh = trungbinh \ 2 
 Loop 
 End Sub 
Ta có thể lưu lại nội dung module này để sử dụng trong các ví dụ sau. 
Tiếp theo ta tạo thủ tục OpenToolStripMenuItem_Click như sau: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 9 - Add: cnt-44-dh, VIMARU 
 Dim All, line As String 
 OpenFileDialog1.Filter = "TEXT FILES (*.TXT) | *.TXT" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input) 
 Do Until EOF(1) 
 line = LineInput(1) 
 All = All & line & vbCrLf 
 Loop 
 TextBox1.Text = All 
 TextBox1.Select(1, 0) 
 TextBox1.Enabled = True 
 OpenToolStripMenuItem.Enabled = False 
 CloseToolStripMenuItem.Enabled = True 
 SaveToolStripMenuItem.Enabled = True 
 Catch ex As Exception 
 MsgBox("Lỗi mở File!") 
 Finally 
 FileClose(1) 
 End Try 
 End If 
Thủ tục CloseToolStripMenuItem_Click như sau: 
 TextBox1.Text = "" 
 CloseToolStripMenuItem.Enabled = False 
 OpenToolStripMenuItem.Enabled = True 
 SaveToolStripMenuItem.Enabled = False 
 TextBox1.Enabled = False 
Thủ tục SaveToolStripMenuItem_Click : 
 OpenFileDialog1.Filter = "TEXT FILES (*.TXT) | *.TXT" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 FileOpen(1, OpenFileDialog1.FileName, OpenMode.Output) 
 PrintLine(1, TextBox1.Text) 
 OpenToolStripMenuItem.Enabled = True 
 SaveToolStripMenuItem.Enabled = False 
 Catch ex As Exception 
 MsgBox("Lỗi ghi file!") 
 Finally 
 FileClose(1) 
 End Try 
 End If 
Bây giờ ta tạo thủ tục SortTextToolStripMenuItem_Click: 
 Dim ln, curline, letter As String 
 Dim i, charsInFile, lineCount As Short 
 'Kiểm tra số dòng trong chuỗi 
 lineCount = 0 
 charsInFile = TextBox1.Text.Length 'Lấy chiều dài chuỗi 
 For i = 0 To charsInFile - 1 'Đếm từng ký tự 
 'Lấy nội dung 
 letter = TextBox1.Text.Substring(i, 1) 
 'Nếu là ký tự xuống dòng 
 If letter = Chr(13) Then 
 lineCount += 1 
 i += 1 'Bỏ qua ký tự 10 (10, 13 thường đi kèm) 
 End If 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 10 - Add: cnt-44-dh, 
VIMARU 
 Next i 
 'Tạo mảng chứa các dòng văn bản 
 ReDim strArr(lineCount) 
 curline = 1 
 ln = "" 
 'Duyệt qua ký tự trong chuỗi 
 For i = 0 To charsInFile - 1 
 letter = TextBox1.Text.Substring(i, 1) 
 If letter = Chr(13) Then 
 curline += 1 
 i += 1 
 ln = "" 
 Else 
 'Đưa nội dòng vào mảng 
 ln = ln & letter 
 strArr(curline) = ln 
 End If 
 Next i 
 'Sắp xếp mảng 
 Sapxep(strArr, lineCount) 
 'Hiển thị mảng đã sắp xếp trở lại TextBox 
 TextBox1.Text = "" 
 curline = 1 
 For i = 1 To lineCount 
 TextBox1.Text = TextBox1.Text & _ 
 strArr(curline) & vbCrLf 
 curline += 1 
 Next i 
Chạy chương trình: 
Bạn có thể chạy chương trình, mở một file text có sẵn hay tự mình nhập vào nội dung văn 
bản và tiến hành lưu lại. 
Bạn có thể thấy chương trình vẫn còn một lỗi nhỏ. Bạn thử tìm ra và khắc phục xem sao. 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 11 - Add: cnt-44-dh, 
VIMARU 
Trong module trên, với thủ tục sapxep bạn có thể dùng giải thuật sắp xếp khác nếu muốn. 
Các thủ tục sắp xếp hay tìm kiếm đều có thể tìm thấy trong môn cấu trúc dữ liệu và giải 
thuật, các bạn có thể tham khảo thêm. 
Mở rộng: 
Bây giờ nhằm phục vụ các bạn ôn lại các thuật toán trong môn cấu trúc dữ liệu và giải 
thuật phần sắp xếp, mình sẽ cài đặt các thủ tục sắp xếp khác nhau như sắp xếp chọn 
(SelectionSort), sắp xếp chèn trực tiếp (Insertion Sort), sắp xếp nổi bọt (Bubble Sort) 
Sắp xếp chọn: 
Sắp xếp chọn trong một mảng là chạy một vòng lặp từ đầu đến cuối mảng, chọn ra phần tử 
nhỏ nhất tiến hành đổi vị trí hai phần tử đó (thứ k) và phần tử thứ nhất. Vòng lặp lại tiếp 
tục như vậy từ phần tử thứ hai trở đi. 
Thủ tục SelectionSort được cài đặt trong module sortmodule như sau: 
 'Sap xep theo phuong phap sap xep chon 
 Sub SelectionSort(ByRef mang() As String, _ 
 ByVal sophantumang As Short) 
 Dim i, j, k As Short 
 For i = 1 To sophantumang - 1 
 k = i 
 For j = i + 1 To sophantumang 
 If (mang(j) < mang(k)) Then k = j 
 Next j 
 doicho(mang(i), mang(k)) 
 Next i 
 End Sub 
Trong đó thủ tục doicho() cài đặt: 
 'Thu tuc doi cho hai phan tu 
 Sub doicho(ByRef x As String, ByRef y As String) 
 Dim tam As String 
 tam = x 
 x = y 
 y = tam 
 End Sub 
Để thực thi thủ tục sắp xếp theo phương pháp chọn này, trong chương trình thay vì câu gọi 
Sapxep(strArr, lineCount) thì bạn gọi SelectionSort(strArr, lineCount) và 
chạy chương trình. Kết quả không có gì thay đổi. 
Sắp xếp chèn trực tiếp: 
Sắp xếp chèn trực tiếp dựa trên ý tưởng như sau: coi mảng đó có đoạn đầu (i-1 phần tử) đã 
sắp xếp. Ta chạy vòng lặp từ phần tử tiếp theo (phần tử thứ i) và chèn các phần tử tiếp theo 
đó vào đoạn đầu sao cho theo trật tự qui định (tăng hay giảm). Vậy nếu muốn sắp xếp một 
mảng thì đoạn đầu tiên sẽ gồm một phần tử duy nhất a[0] và tiến hành chèn các phần tử từ 
a[1]. 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 12 - Add: cnt-44-dh, 
VIMARU 
Việc chèn tiến hành như sau: lưu a[i] vào biến x. Cho biến j chạy từ đầu mảng (từ 1) và xét 
xem x < a[j]. Nếu đúng thì đẩy a[j] ra sau một vị trí và giảm j đi 1. Quá trình tiếp tục khi 
x>=a[j] hay j = 0 và đặt x vào vị trí j+1. 
Thủ tục InsertionSort() được cài đặt trong SortModule như sau: 
 'Sap xep theo phuong phap chen truc tiep 
 Sub InsertionSort(ByRef mang() As String, _ 
 ByVal sophantumang As Short) 
 Dim i, j As Short 
 Dim tam As String 
 For i = 1 To sophantumang 
 tam = mang(i) 
 j = i - 1 
 Do While ((tam 0)) 
 mang(j + 1) = mang(j) 
 j -= 1 
 Loop 
 mang(j + 1) = tam 
 Next 
 End Sub 
Lúc này cũng tương tự như cách gọi trên, bạn gọi thủ tục này thay cho lời gọi thủ tục sắp 
xếp SelectionSort.Và kết quả không có gì thay đổi. 
Sắp xếp nổi bọt: 
Sắp xếp nổi bọt là sắp xếp bằng cách đi từ trái qua phải, nếu thấy hai phần tử liền kề nhau 
không đúng trật tự thì đổi chỗ. Quá trình đó cứ lặp đi lặp lại như vậy cho đến khi thu được 
dãy có trật tự tăng hay giảm theo ý muốn. 
Thủ tục BubbleSort() được cài đặt trong SortModule như sau: 
 'Sap xep theo phuong phap noi bot 
 Sub BubbleSort(ByRef mang() As String, _ 
 ByVal sophantumang As Short) 
 Dim i, j As Short 
 i = sophantumang 
 Do While i > 0 
 For j = 1 To i - 1 
 If mang(j) > mang(j + 1) Then 
 doicho(mang(j), mang(j + 1)) 
 End If 
 Next j 
 i -= 1 
 Loop 
 End Sub 
Thủ tục đổi chỗ đã được khai báo trong module và trình bày trong phần trên. Bạn cũng 
thay lời gọi InsertiontSort bằng lời gọi thủ tục BubbleSort và xem kết quả có gì thay đổi 
không. 
Sắp xếp nhanh QuickSort: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 13 - Add: cnt-44-dh, 
VIMARU 
Sắp xếp trộn MergeSort: 
4. Bảo vệ nội dung văn bản bằng cách mã hóa 
Bây giờ chúng ta thử mã hóa những gì có trong ô textbox để chỉ mình bạn là người có thể 
đọc được. Ta dùng một giải thuật mã hóa làm xáo trộn văn bản và một thuật toán giải mã 
để đưa văn bản trở về trạng thái ban đầu. 
4.1. Mã hóa tài liệu bằng cách thay đổi mã ASCII của các ký tự 
Bây giờ chúng ta tạo chương trình mã hóa và tiến hành giải mã một file văn bản. Ta làm ví 
dụ EncriptionText. 
4.2. Chương trình EncriptionText 
Tìm hiểu chương trình: 
Chương trình gồm một ô textbox để hiển thị nội dung văn bản. Một menu File với các mục 
chọn: Open Encription File dùng để mở các file đã mã hóa; Encript File dùng để mã hóa 
nội dung văn bản có trong ô textbox; Decription File giải mã nội dung văn bản đã bị mã 
hóa; Save Encription lưu lại nội dung văn bản đã mã hóa vào một file; Close để đóng file 
và đưa ô textbox về trạng thái trắng. 
Thiết kế giao diện: 
Giao diện thiết kế như hình: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 14 - Add: cnt-44-dh, 
VIMARU 
Các bạn tạo các điều khiển như hình và kéo các điều khiển khác gồm OpenFileDialog1 để 
mở file, MenuStrip1, SaveFileDialog1 để lưu file. 
Các thuộc tính thay đổi như sau: 
- Open Encription File: name là mnuOpenEncriptionFile 
- Encript File: name là mnuEncriptionFile 
- Decription File: name là mnuDecription 
- Save Encription: name là mnuSaveEncription 
- &Close: name là mnuClose 
- TextBox: name là txtDocument 
Viết mã: 
Tạo thủ tục mở file: 
 Private Sub mnuOpenEncriptionFile_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuOpenEncriptionFile.Click 
 Dim all, line As String 
 OpenFileDialog1.Filter = "TEXT FILES (*.TXT) | *.TXT" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input) 
 Do Until EOF(1) 
 line = LineInput(1) 
 all = all & line 
 Loop 
 txtDocument.Text = all 
 mnuClose.Enabled = True 
 mnuDecription.Enabled = True 
 mnuOpenEncriptionFile.Enabled = False 
 Catch ex As Exception 
 MsgBox("Lỗi mở File!") 
 Finally 
 FileClose(1) 
 End Try 
 End If 
 End Sub 
Thủ tục lưu file: 
 Private Sub mnuSaveEncription_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuSaveEncription.Click 
 SaveFileDialog1.Filter = "TEXT FILES (*.TXT) | *.TXT" 
 SaveFileDialog1.ShowDialog() 
 If SaveFileDialog1.FileName "" Then 
 Try 
 FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output) 
 PrintLine(1, txtDocument.Text) 
 Catch ex As Exception 
 MsgBox("Lỗi mở file!") 
 Finally 
 FileClose(1) 
 End Try 
 mnuClose.Enabled = True 
 mnuSaveEncription.Enabled = False 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 15 - Add: cnt-44-dh, 
VIMARU 
 End If 
 End Sub 
Thủ tục đóng file: 
 Private Sub mnuClose_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuClose.Click 
 txtDocument.Text = "" 
 mnuOpenEncriptionFile.Enabled = True 
 mnuClose.Enabled = False 
 mnuDecription.Enabled = False 
 mnuEncriptionFile.Enabled = False 
 mnuSaveEncription.Enabled = False 
 End Sub 
Thủ tục mã hóa: 
 Private Sub mnuEncriptionFile_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuEncriptionFile.Click 
 Dim Encript As String = "" 
 Dim letter As Char 
 Dim i, charsInFile As Short 
 charsInFile = txtDocument.Text.Length 
 For i = 0 To charsInFile - 1 
 letter = txtDocument.Text.Substring(i, 1) 
 Encript = Encript & Chr(Asc(letter) + 1) 
 Next 
 txtDocument.Text = Encript 
 mnuClose.Enabled = True 
 mnuSaveEncription.Enabled = True 
 mnuDecription.Enabled = True 
 End Sub 
Trong thủ tục trên ta mã hóa bằng cách tăng mã của ký tự trong bảng mã ASCII lên một 
bằng dòng lệnh: 
 Encript = Encript & Chr(Asc(letter) + 1) 
Thủ tục giải mã: 
 Private Sub mnuDecription_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuDecription.Click 
 Dim i, charsInFile As Short 
 Dim letter As Char 
 Dim Decript As String = "" 
 charsInFile = txtDocument.Text.Length 
 For i = 0 To charsInFile - 1 
 letter = txtDocument.Text.Substring(i, 1) 
 Decript = Decript & Chr(Asc(letter) - 1) 
 Next 
 txtDocument.Text = Decript 
 mnuClose.Enabled = True 
 mnuSaveEncription.Enabled = False 
 mnuEncriptionFile.Enabled = True 
 mnuDecription.Enabled = True 
 End Sub 
Việc giải mã là tiến hành trừ mã của ký tự trong bảng mã ASCII đi 1 với dòng mã: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 16 - Add: cnt-44-dh, 
VIMARU 
 Decript = Decript & Chr(Asc(letter) - 1) 
Chạy chương trình: 
Bạn ấn F5 chạy chương trình và có thể mở file văn bản hay gõ nội dung vào textbox để mã 
hóa và giải mã. Điều này thật thú vị. 
5. Sử dụng toán tử XOR trong mã hóa 
Với cách mã hóa trên đây có rất nhiều hạn chế. Hạn chế đầu tiên đó là mã ASCII chỉ giới 
hạn từ 0-255, nếu cộng ra ngoài khoảng này thì chương tình sẽ gặp lỗi ngay. 
Cách khắc phục là ta dùng toán tử XOR, khi XOR một số với một giá trị nào đó hai lần thì 
bạn sẽ nhận lại chính số đó. 
Chúng ta hãy làm rõ điều này thông qua ví dụ XorEccriptionTextFile: 
Tìm hiểu chương trình: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 17 - Add: cnt-44-dh, 
VIMARU 
Chương trình có một textbox cho phép hiển thị cũng như nhập liệu văn bản; một menu File 
với ba mục chọn là Open Encription File cho phép mở file đã mã hóa. Khi mở file này 
chương trình sẽ yêu cầu người dùng nhập chính xác khóa đã dùng để mã hóa khi mã hóa. 
Mục chọn thứ hai là Save Encription File. Mục này cho phép người dùng mã hóa nội dung 
văn bản gõ vào trong ô textbox. Chương trình sẽ đưa ra thông báo yêu cầu người dùng 
nhập vào một khóa dùng để mã hóa. Người dùng cần nhớ chính xác từ khóa này để giải mã 
file sau này. 
Mục chọn Close sẽ đưa textbox về dạng trắng và hiện mục Open Encription File lên cho 
người dùng mở file, hoặc gõ văn bản vào ô textbox để làm sáng mục chọn Save. 
Thiết kế giao diện: 
Giao diện của chương trình như hình: 
Bạn tạo giải pháp và thêm vào dự án cùng tên rồi thiết kế giao diện như hình. 
Viết mã: 
Tạo thủ tục mnuSaveEncriptionFile_Click mã hóa văn bản và lưu vào file: 
 Private Sub mnuSaveEncriptionFile_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuSaveEncriptionFile.Click 
 Dim letter As Char 
 Dim key As String 
 Dim i, charsInFile, code As Short 
 SaveFileDialog1.Filter = "TEXT FILES (*.TXT) | *.TXT" 
 SaveFileDialog1.ShowDialog() 
 If SaveFileDialog1.FileName "" Then 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 18 - Add: cnt-44-dh, 
VIMARU 
 key = InputBox("Nhap khoa ma hoa:") 
 If key = "" Then Exit Sub 
 code = CShort(key) 
 charsInFile = txtDocument.Text.Length 
 FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output) 
 For i = 0 To charsInFile - 1 
 letter = txtDocument.Text.Substring(i, 1) 
 Print(1, Asc(letter) Xor code) 
 Next 
 FileClose(1) 
 mnuClose.Enabled = True 
 End If 
 End Sub 
Trước hết, chương trình sẽ yêu cầu nhập vào một khóa bằng phát biểu: 
 key = InputBox("Nhap khoa ma hoa:") 
Sau đó nó tiến hành XOR mã ASCII của ký tự với khóa và ghi vào file bằng phát biểu: 
 Print(1, Asc(letter) Xor code) 
Thủ tục mnuOpenEncriptionFile_Click giải mã: 
 Private Sub mnuOpenEncriptionFile_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles mnuOpenEncriptionFile.Click 
 Dim ch As Char 
 Dim key As String 
 Dim code, number As Short 
 Dim DeEncript As String = "" 
 OpenFileDialog1.Filter = "TEXT FILE (*.TXT) | *.TXT" 
 OpenFileDialog1.ShowDialog() 
 If OpenFileDialog1.FileName "" Then 
 Try 
 key = InputBox("Nhap dung khoa da ma hoa:") 
 If key = "" Then Exit Sub 
 code = CShort(key) 
 FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input) 
 Do Until EOF(1) 
 Input(1, number) 
 ch = Chr(number Xor code) 
 DeEncript = DeEncript & ch 
 Loop 
 txtDocument.Text = DeEncript 
 txtDocument.Enabled = True 
 mnuClose.Enabled = True 
 mnuOpenEncriptionFile.Enabled = False 
 Catch ex As Exception 
 MsgBox("Loi mo File!") 
 Finally 
 FileClose(1) 
 End Try 
 End If 
 End Sub 
Thủ tục này cũng tương tự. Trước hết yêu cầu nhập vào khóa đã dùng để mã hóa và sau đó 
tiến hành giải mã bằng cách XOR lại một lần nữa để thu được mã ASCII ban đầu và 
chuyển trở lại ký tự bằng hàm Chr: 
Hướng dẫn lập trình VB.NET Chương 12: Khám phá cách xử lý file văn bản và chuỗi 
Biên soạn: Phạm Đức Lập - 19 - Add: cnt-44-dh, 
VIMARU 
 ch = Chr(number Xor code) 
Vậy là chương trình đã hoàn thành. 
Chạy chương trình: 
Bạn chạy chương trình, nhập vào textbox một đoạn văn bản bất kỳ: 
Tiến hành mã hóa và lưu lại vào file có tên mahoa.txt với từ khóa là 123. File đó sẽ có nội 
dung như sau: 
Bây giờ bạn đóng lại bằng cách chọn mục Close và mở lại file trên xem sao. 
6. Tổng kết chương 
Bạn có thể làm lại các bài tập đã thực hiện trong chương này. 

File đính kèm:

  • pdfbai_giang_huong_dan_lap_trinh_vb_net_chuong_12_kham_pha_cach.pdf