Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  VBA und Unicode...

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 03. Jun. 2013 14:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


AP2.txt

 
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



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 03. Jun. 2013 16:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hi Klaus,

ein einfaches Komma könnte dein Problem lösen

Code:
Set tStream = fs.opentextfile(ParametersFile, ForReading, ,TristateTrue)
oder auch
Code:
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



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

erstellt am: 04. Jun. 2013 09:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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 Explicit

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



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz