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

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.

 

doc20 trang | Chuyên mục: Visual Basic 6.0 | Chia sẻ: dkS00TYs | Lượt xem: 3479 | Lượt tải: 2download
Tóm tắt nội dung 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trê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].
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] 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:
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:
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
 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ã:
	 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:
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
 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:
	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:

  • docHướ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.doc
Tài liệu liên quan