| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: VBA und Unicode... (10502 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 03. Jun. 2013 14:13 <-- editieren / zitieren --> Unities abgeben:         
VBA und Unicode machen mich gerade wahnsinnig. Mein Problem: Ich muss eine Textdatei einlesen und auswerten. Auf die Erstellung der Textdatei habe ich keinen Einfluss. Beim Anzeigen in Notepad und anderen Windows-Editoren ist alles ok, beim Einlesen der Datei per VBA machen mir die Sonderzeichen u. Umlaute Probleme. Laut meinem Lieblingseditor EditPad handelt es sich um eine Unicode-8-Datei, beim Umwandeln in "Windows 1252:Western European" im Editor treten die beobachteten Effekte ebenfalls auf, genauso wie beim Einlesen in VBA. So wird z.B. aus "STÄNDER" ein "STÄNDER". Mit dem einfachen "open" und anschließenden "read" geht eine Umwandlung meines Wissens eh nicht, darum verwende ich ein Filesystem-Object und öffne die Datei mit der Methode opentextfile, hier kann ich ja angeben, ob es sich um eine Unicode- oder ASCII-Datei handelt. Nur- das Ergebnis ändert sich nicht. Egal, was ich da als Parameter verwende, "STÄNDER" wird immer zu "STÄNDER"  Hier ist mal der relevante Code, in der Hoffnung, dass jemand meinen Fehler oder eine Lösung findet: Code: Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs As Object Dim tStream As Object Dim f As Object... ParametersFile = FilePath(Drw.GetPathName) & "AP2.txt" ... Set fs = CreateObject("Scripting.FileSystemObject") Set tStream = fs.opentextfile(ParametersFile, ForReading, TristateTrue)
With tStream Do While tStream.AtEndOfStream <> True strDummy = tStream.ReadLine Debug.Print strDummy Loop .Close End With
Einen Auszug aus der Textdatei "AP2.txt" habe ich angehängt.
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | 
[Diese Nachricht wurde von KMassler am 03. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
 
 Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 03. Jun. 2013 16:09 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hi Klaus, ein einfaches Komma könnte dein Problem lösen Code: Set tStream = fs.opentextfile(ParametersFile, ForReading, ,TristateTrue)
oder auchCode: Set tStream = fs.opentextfile(Filename:=ParametersFile, iomode:=ForReading, Format:=TristateTrue)
Der Dritte Parameter von Opentextfile ist nämlich 'create', dieser steuert ob die Datei angelegt werden soll falls sie nicht existert. Da alle Parameter, bis auf den Filename, optional sind gabs kein Sytaxfehler. kugst du hier Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bst Mitglied
 
 Beiträge: 192 Registriert: 31.08.2004
|
erstellt am: 04. Jun. 2013 09:22 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Morgen, M.E. kann das FSO nur mit UTF-16 LE umgehen, nicht aber mit UTF-8. Nimm - ADODB.Stream: http://www.tutorials.de/visual-basic-6-0/259494-filesystemobject-mit-utf-8-charset.html oder - die Win-API: http://www.activevb.de/rubriken/faq/faq0155.html oder - kodiere das selber um, s.u. HTH, Bernd --
Code: Option ExplicitSub x() Dim strAll As String strAll = ReadFile("e:\test\utf.txt") Debug.Print FromUTF8String(Mid(strAll, 4)) End Sub ' ' codiert einen UTF-8 String in UTF-16BE um ' frei nach: http://www.vovisoft.com/unicode/UniFunctions.htm#UTF8ToUniStr ' Function FromUTF8String(ByVal s As String) As String Dim i As Integer, b(2) As Byte i = 1 s = s & Chr(0) & Chr(0) Do While i <= Len(s) - 2 b(0) = Asc(Mid(s, i, 1)) b(1) = Asc(Mid(s, i + 1, 1)) b(2) = Asc(Mid(s, i + 2, 1)) If (b(0) And &HE0) = &HE0 Then FromUTF8String = FromUTF8String & ChrW((b(0) And &HF) * CLng(&H1000) + (b(1) And &H3F) * CLng(&H40) + (b(2) And &H3F)) i = i + 3 ElseIf (b(0) And &HC0) = &HC0 Then FromUTF8String = FromUTF8String & ChrW((b(0) And &H1F) * &H40 + (b(1) And &H3F)) i = i + 2 Else FromUTF8String = FromUTF8String & Chr(b(0)) i = i + 1 End If Loop End Function Public Function ReadFile(ByVal strFileName As String) As String Dim intHandle As Integer intHandle = FreeFile Open strFileName For Input As #intHandle ReadFile = Input(LOF(intHandle), #intHandle) Close #intHandle End Function
[Diese Nachricht wurde von bst am 04. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 04. Jun. 2013 13:11 <-- editieren / zitieren --> Unities abgeben:         
Herzlichen Dank für die prompte Hilfe!! @Peter: Hat leider nicht funktioniert. Den fehlenden Parameter hatte ich inzwischen auch entdeckt, funktioniert aber leider trotzdem nicht. Mit Format:=TristateUseDefault wird alles in viele Fragezeichen umgewandelt, die anderen beiden Werte TristateTrue und TristateFalse ändern nichts am Ergebnis. Schade aber trotzdem danke ! @Bernd: - Dein Code hat auch nur Fragezeichen produziert,
- den ADODB.Stream kann ich nicht nutzen, ich vermute, da brauche ich Access auf dem Rechner, was ich aber nicht habe.
- der Link mit der Win-API hat mir aber dann weiter geholften
Die Funktion "ConvertFromUTF8" erledigt hier gute Arbeit.
Vielen Dank euch beiden, mein Problem ist damit gelöst [Edit]Richtigstellung: Wie ich hier bemerkt habe, funktioniert der Code von Bernd doch! (Das ist kein Cross- oder Doppelposting, es sind zwei verschiedene Probleme, die sich nacheinander ergeben haben)[/Edit] ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | 
[Diese Nachricht wurde von KMassler am 26. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |