SỐ 205
KINH NGHIỆM LẬP TRÌNH

Lọc bỏ dấu tiếng Việt bằng VB.NET

Nếu bạn đang theo đuổi việc lập trình, hẳn bạn đã biết đến lượng mã nguồn to lớn trên Internet. Bạn rất thích nhưng khi chép đoạn mã VB6 hay C nào đó từ trang web vào cửa sổ soạn thảo, bạn sẽ rất mệt vì phải sửa chữa, thậm chí xóa toàn bộ lời chú thích tiếng Việt của tác giả. Trong các công cụ lập trình không hỗ trợ tiếng Việt, phần diễn giải tiếng Việt trong mã nguồn biến thành mớ hỗn độn, rối rắm.

Với sự hỗ trợ tiếng Việt Unicode của VB .NET, ta dễ dàng tạo một chương trình lọc bỏ dấu tiếng Việt, tự động chuyển mọi ký tự có dấu thành không dấu.

Bạn hãy mở Visual Studio .NET 2003, tạo một Windows Application mới. Trong cửa sổ thiết kế, bạn tạo lần lượt các điều khiển (control) với thuộc tính như bảng 1.

Loại điều khiển

Tên điều khiển

Thuộc tính

Giá trị

Textbox

TxtViết

.Text

""

 

 

.Multiline

True

 

 

.ScrollBars

ScrollBars.Both

 

TxtBỏdấu

.Text  

""

 

 

.Multiline

True

 

 

.ScrollBars

ScrollBars.Both

Button

NútBỏdấu

.Text

Bỏ dấu

 

NútĐóng

.Text

Đóng

Việc bỏ dấu được thực hiện như sau: nếu là “á” hay “à” hay “ạ”,... thì đổi thành “a”, nếu là “Á” hay “À” hay “Ạ”,... thì đổi thành “A”,... Để làm được như thế, ta có thể dùng vòng lặp For và câu lệnh If để xét từng ký tự trong TxtViết. Tuy nhiên, với văn bản dài, việc đọc từng ký tự từ đầu đến cuối kết hợp với việc xử lý lệnh If làm cho chương trình chạy rất chậm. Ta nên dùng hàm Replace của String, kết hợp với một mảng hai chiều để thay thế tất cả ký tự có dấu trong TxtViết bằng ký tự không dấu tương ứng.
Cụ thể, bạn tạo một mảng hai chiều với 14 hàng và 18 cột có dạng như bảng 2. Ta qui định việc phân bố giá trị trong mảng như sau:
1. Mỗi đầu hàng là nơi chứa các giá trị không dấu.
2. Trong từng hàng, các ô tiếp theo sẽ chứa các giá trị có dấu.
3. Các ô có nền đen là nơi chứa giá trị trả về (không dấu).
4. Các ô có nền trắng là nơi chứa giá trị tìm kiếm để thay thế.
5. Các ô có nền xám là các ô có giá trị bằng với ô đầu hàng (không thể để trống vì mọi giá trị của ô phải khác rỗng để cung cấp cho hàm Replace).

á

à

ã

â

ă

Á

À

Ã

Â

Ă

é

è

ê

ế

e

e

e

e

e

e

É

È

Ê

E

E

E

E

E

E

ó

ò

õ

ô

ơ

Ó

Ò

Õ

Ô

Ơ

ú

ù

ũ

ư

u

u

u

u

u

u

Ú

Ù

Ũ

Ư

U

U

U

U

U

U

í

ì

ĩ

i

i

i

i

i

i

i

i

i

i

i

i

Í

Ì

Ĩ

I

I

I

I

I

I

I

I

I

I

I

I

đ

d

d

d

d

d

d

d

d

d

d

d

d

d

d

d

d

Đ

D

D

D

D

D

D

D

D

D

D

D

D

D

D

D

D

ý

y

y

y

y

y

y

y

y

y

y

y

y

Ý

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Sau khi tạo Mảng(13,17) như bảng 2 trong thủ tục Form_Load, bạn thực hiện việc tìm và thay thế trong thủ tục NútBỏdấu_Click như đoạn mã 1. Bạn sẽ thấy chương trình chạy rất nhanh và chính xác. Bạn có thể tham khảo mã nguồn hoàn chỉnh của chương trình tại www.echip.com.vn.
Đoạn mã 1
Private Sub NútBỏdấu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles NútBỏdấu.Click
Dim Tạm1, Tạm2 As String
Dim i, j, n As Byte
Tạm1 = TxtViết.Text
For j = 0 To 13
For i = 1 To 17
Tạm2 = Tạm1.Replace(Mảng(j, i), Mảng(j, 0))
Tạm1 = Tạm2
Next
Next
TxtBỏdấu.Text = Tạm1
End Sub

Titan (TP.HCM)

Lời bàn của Chương Can Chíp
Tác giả xài Unicode và đề cập đến các mã nguồn có chú thích bằng Unicode. Bà con cẩn thận, vì hãy còn nhiều người xài VNI, ABC... Phần việc đọc tập tin mã nguồn, bỏ dấu rồi ghi lại lên đĩa là của bà con đó à nghen.
[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn