Lưu file TXT Unicode

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Lưu file TXT Unicode

Gửi bài by truongphu »

Thủ thuật: Lưu file TXT Unicode
Tác giả: truongphu
Mô tả: Bài viết sau đây với code rất đơn giản, xứng đáng là Mẹo vặt
Nội dung: Nhờ hàm SendKeys paste nội dung Unicode từ clipboard vào notepad và lưu dưới file định dạng Unicode
Tuy đơn giản nhưng tiện ích nó không thể phủ nhận. Bài viết nầy trên forum mình chưa có.

Mã: Chọn tất cả

Private Sub Command1_Click()Dim TxtUniTxtUni = Shell("notepad", vbNormalFocus)  ' Goi NotepadAppActivate TxtUni ' Activate NotepadSendKeys "^{v}", True ' Dán Clipboard vào NotepadSendKeys "^{s}", True ' Goi Dialog.SaveSendKeys "C:\1.txt", True ' Tên file saveSendKeys "{TAB}{TAB}{TAB}{TAB}", True ' Nhay Ðên chon kiêu MãSendKeys "{DOWN}", True ' chon UnicodeSendKeys "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}", True ' Nhay Ðên SaveSendKeys "{ENTER}", True ' EnterSendKeys "%{F4}", True ' Thoát NotepadEnd Sub
Sửa lần cuối bởi 1 vào ngày truongphu với 0 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
PhuongThanh37
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 87
Ngày tham gia: Thứ 6 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Tiếp xúc:

Re: Lưu file TXT Unicode

Gửi bài by PhuongThanh37 »

Đâu cần như vậy đâu chú.
  1. Open "tenfile" For Binary As #1    Put #1, , Trim$(StrConv("Nội dung Unicode", vbUnicode))Close #1

Nói chung tất cả những chủ đề về Unicode với VB6 là chủ đề luôn có nhiều tranh luận. Rất hay
Uống Chanh & nghe Chanh hát
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Re: Lưu file TXT Unicode

Gửi bài by truongphu »

Bài viết của tôi nhằm 'tránh né' phần xử lý Unicode trong Clipboard. (Xem VBLib, mục Mẹo vặt, đề: Lấy text (mã Unicode) trong Clipboard)


Nhờ anh PhuongThanh37 xem lại, tôi đã test nhưng không hiệu quả:

Mã: Chọn tất cả

Private Sub Command2_Click()Open "C:\1.txt" For Binary As #1    Put #1, , Trim$(StrConv(Clipboard.GetText, vbUnicode))Close #1End Sub


Nói chung tất cả những chủ đề về Unicode với VB6 là chủ đề luôn có nhiều tranh luận. Rất hay
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
PhuongThanh37
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 87
Ngày tham gia: Thứ 6 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Tiếp xúc:

Re: Lưu file TXT Unicode

Gửi bài by PhuongThanh37 »

Hi Function GetText hay đại loại là những function trong object Clipboard đều bị không hỗ trợ unicode thì đương nhiên không được rồi.
Ví dụ thế này nhé. Chúng ta có 1 chuỗi unicode là "Tiếng Việt" chuỗi này khi ta gán qua lại với các control TEXT hay CAPTION hay LABEL và cả CLIPBOARD của VB6 thì nó sẽ đều bị thành "Ti?ng Vi?t".
Trong VB chỉ có String và ChrW là vẫn hỗ trợ Unicode.
Trong trường hợp với ví dụ bên trên kia của chú là chú sử dụng Ctrl+V Và cái đó là clipboard của WINDOWS chứ không phải là Class CLIPBOARD của VB. Nếu ở ví dụ đó của chú thay dòng SendKeys, "^{v}" thành dòng SendKeys, Clipboard.GetText thì sẽ có kết quả không được Unicode thôi. Vì Class CLIPBOARD của VB6 không hỗ trợ unicode

Ở trên đang nói về cách để ghi được nội dung UNICODE vào file TextUnicode thì sẽ sử dụng luôn lệnh Open của VB bình thường cũng có thể ghi được không cần phải sử dụng notepad như cách của chú.
Nói chung là cháu không có trình độ về sư phạm nên chẳng biết giải thích như kia chú và mọi người hiểu không. Đại loại nói ngắn gọn là:
  1. Open "tenfile" For Binary As #1    Put #1, , Trim$(StrConv("Nội dung Unicode thì sẽ được unicode; y nguyên nội dung ký tự đưa vào", vbUnicode))Close #1
Uống Chanh & nghe Chanh hát
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Re: Lưu file TXT Unicode

Gửi bài by truongphu »

Thôi thì ghi nhận đóng góp của PhuongThanh37.
Để hoàn thiện phần chuyển từ ClipBoard Unicode save file TXT Unicode, tôi viết lại như sau:

Code Lưu Clipboard Unicode vào File TXT Unicode

Mã: Chọn tất cả

''''''''''''''''''''' Phâ`n Code trong VBLib ''''''''''''''''''''''''''''''''''''''Private Const CF_UNICODETEXT As Long = 13Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hWnd As Long) As LongPrivate Declare Function CloseClipboard Lib "user32.dll" () As LongPrivate Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As LongPrivate Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As LongPrivate Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As LongPrivate Declare Function GlobalLock Lib "kernel32.dll" (ByVal hMem As Long) As LongPrivate Declare Function GlobalUnlock Lib "kernel32.dll" (ByVal hMem As Long) As LongPrivate Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long Private Function Get_clipboard() As String    Dim myStrPtr As Long, myLen As Long, myLock As Long, myData As String     OpenClipboard 0&     If IsClipboardFormatAvailable(CF_UNICODETEXT) = 0 Then MsgBox "Clipboard Text is not available now": Exit Function     myStrPtr = GetClipboardData(CF_UNICODETEXT)     If myStrPtr = 0 Then        MsgBox "Failed to get Clipboard Text"    Else        myLock = GlobalLock(myStrPtr)        myLen = GlobalSize(myStrPtr)        myData = String$(myLen \ 2 - 1, vbNullChar)        lstrcpy StrPtr(myData), myLock        GlobalUnlock myStrPtr    End If     CloseClipboard     Get_clipboard = myDataEnd Function Private Sub Command3_Click() ''''''''''''''PhuongThanh37 bô sung''''''''''''''''''Open "C:\1.txt" For Binary As #1    Put #1, , Trim$(StrConv(Get_clipboard, vbUnicode))Close #1End Sub
Tùy các bạn chọn, muốn code gọn thì chọn SendKeys (bài đầu) nhờ Windows xử lý
Muốn Advance thì chọn bài nầy
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
PhuongThanh37
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 87
Ngày tham gia: Thứ 6 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Tiếp xúc:

Re: Lưu file TXT Unicode

Gửi bài by PhuongThanh37 »

Hi đó là cách giải thích nên nó lòng vòng khó hiểu.
Còn thực tế thì khi họ dùng control TEXTBOX có hỗ trợ unicode (ví dụ form2.0 hoặc các usercontrol hỗ trợ unicode mà mã nguồn mở rất nhiều) đều ghi trực tiếp vào được đâu cứ dùng clipboard. Khi mình xoáy sâu vào clipboard thì các em kia sẽ có thể hiểu là cứ phải qua clipboard mới có thể.
Trên thực tế cháu thấy cậu hỏi câu này đang sử dụng control textbox có hỗ trợ unicode rồi. Chỉ có điều khi cậu ấy save vào file với lệnh print thì sẽ không được. Nên cậu ta chỉ cần thay vào bằng lệnh put là sẽ OK.
Uống Chanh & nghe Chanh hát
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 528 times

Re: Lưu file TXT Unicode

Gửi bài by truongphu »

Mời anh PhuongThanh37 đọc tiếp bài:

Tổng quan về đọc và ghi file TXT Unicode (VB6)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
PhuongThanh37
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 87
Ngày tham gia: Thứ 6 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Tiếp xúc:

Re: Lưu file TXT Unicode

Gửi bài by PhuongThanh37 »

Bài đó cháu cũng đọc rồi mà.
bài đó và bài cháu trả lời kia là 2 vấn đề không liên quan.
Bài kia chú viết là các cách viết. Còn cái đoạn trả lời kia của cháu chốt lại mỗi vấn đề là chẳng có gì phải bàn nữa cả. Hay cháu nói có gì sai :D
Uống Chanh & nghe Chanh hát
Đăng trả lời

Quay về