|
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. |
|
|