• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Lưu file TXT Unicode

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4763
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 518 time

Lưu file TXT Unicode

Gửi bàigửi bởi truongphu » T.Tư 04/03/2009 10:52 am

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 hết

  1. Private Sub Command1_Click()
  2. Dim TxtUni
  3. TxtUni = Shell("notepad", vbNormalFocus)  ' Goi Notepad
  4. AppActivate TxtUni ' Activate Notepad
  5. SendKeys "^{v}", True ' Dán Clipboard vào Notepad
  6. SendKeys "^{s}", True ' Goi Dialog.Save
  7. SendKeys "C:\1.txt", True ' Tên file save
  8. SendKeys "{TAB}{TAB}{TAB}{TAB}", True ' Nhay Ðên chon kiêu Mã
  9. SendKeys "{DOWN}", True ' chon Unicode
  10. SendKeys "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}", True ' Nhay Ðên Save
  11. SendKeys "{ENTER}", True ' Enter
  12. SendKeys "%{F4}", True ' Thoát Notepad
  13. End Sub
Sửa lần cuối bởi truongphu vào ngày T.Tư 04/03/2009 3:45 pm với 1 lần sửa.


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: T.Sáu 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Liên hệ:

Re: Lưu file TXT Unicode

Gửi bàigửi bởi PhuongThanh37 » T.Tư 04/03/2009 11:46 am

Đâu cần như vậy đâu chú.
[vb]
  1. Open "tenfile" For Binary As #1
  2.     Put #1, , Trim$(StrConv("Nội dung Unicode", vbUnicode))
  3. Close #1
[/vb]
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 người dùng
truongphu
VIP
VIP
Bài viết: 4763
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 518 time

Re: Lưu file TXT Unicode

Gửi bàigửi bởi truongphu » T.Tư 04/03/2009 12:22 pm

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 hết

  1. Private Sub Command2_Click()
  2. Open "C:\1.txt" For Binary As #1
  3.     Put #1, , Trim$(StrConv(Clipboard.GetText, vbUnicode))
  4. Close #1
  5. End 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: T.Sáu 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Liên hệ:

Re: Lưu file TXT Unicode

Gửi bàigửi bởi PhuongThanh37 » T.Tư 04/03/2009 2:59 pm

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à:
[vb]
  1. Open "tenfile" For Binary As #1
  2.     Put #1, , Trim$(StrConv("Nội dung Unicode thì sẽ được unicode; y nguyên nội dung ký tự đưa vào", vbUnicode))
  3. Close #1
[/vb]
Uống Chanh & nghe Chanh hát

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4763
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 518 time

Re: Lưu file TXT Unicode

Gửi bàigửi bởi truongphu » T.Tư 04/03/2009 3:43 pm

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 hết

  1. ''''''''''''''''''''' Phâ`n Code trong VBLib ''''''''''''''''''''''''''''''''''''''
  2. Private Const CF_UNICODETEXT As Long = 13
  3. Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hWnd As Long) As Long
  4. Private Declare Function CloseClipboard Lib "user32.dll" () As Long
  5. Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
  6. Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
  7. Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
  8. Private Declare Function GlobalLock Lib "kernel32.dll" (ByVal hMem As Long) As Long
  9. Private Declare Function GlobalUnlock Lib "kernel32.dll" (ByVal hMem As Long) As Long
  10. Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
  11.  
  12. Private Function Get_clipboard() As String
  13.     Dim myStrPtr As Long, myLen As Long, myLock As Long, myData As String
  14.  
  15.     OpenClipboard 0&
  16.  
  17.     If IsClipboardFormatAvailable(CF_UNICODETEXT) = 0 Then MsgBox "Clipboard Text is not available now": Exit Function
  18.  
  19.     myStrPtr = GetClipboardData(CF_UNICODETEXT)
  20.  
  21.     If myStrPtr = 0 Then
  22.         MsgBox "Failed to get Clipboard Text"
  23.     Else
  24.         myLock = GlobalLock(myStrPtr)
  25.         myLen = GlobalSize(myStrPtr)
  26.         myData = String$(myLen \ 2 - 1, vbNullChar)
  27.         lstrcpy StrPtr(myData), myLock
  28.         GlobalUnlock myStrPtr
  29.     End If
  30.  
  31.     CloseClipboard
  32.  
  33.     Get_clipboard = myData
  34. End Function
  35.  
  36. Private Sub Command3_Click() ''''''''''''''PhuongThanh37 bô sung''''''''''''''''''
  37. Open "C:\1.txt" For Binary As #1
  38.     Put #1, , Trim$(StrConv(Get_clipboard, vbUnicode))
  39. Close #1
  40. End 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: T.Sáu 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Liên hệ:

Re: Lưu file TXT Unicode

Gửi bàigửi bởi PhuongThanh37 » T.Sáu 13/03/2009 10:57 pm

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 người dùng
truongphu
VIP
VIP
Bài viết: 4763
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 518 time

Re: Lưu file TXT Unicode

Gửi bàigửi bởi truongphu » CN 15/03/2009 5:54 am

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: T.Sáu 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Liên hệ:

Re: Lưu file TXT Unicode

Gửi bàigửi bởi PhuongThanh37 » T.Năm 19/03/2009 10:05 pm

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


Quay về “[VB] Hệ thống - Tập tin - Thư mục và Mạng”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách