n4426
Goto Top

UTF-8-Textdatei mit VBS einlesen

Hallo zusammen,

ich versuch heute schon den ganzen Tag ein UTF-8 Formatierte Textdatei mit VBS einzulesen.

Das funktioniert auch soweit, bis auf Sonderzeichen wie z.B. ß, ä, ö ü ... Ich hab leider nichts gefunden, was funktioniert hat um eine UTF-8-Datei mit VBS zu verarbeiten.

Hier mein VBS-Code.

file = "textdatei.txt"  

dim Ausgabe, varText, varAusgabeListe
Set wshShell = WScript.CreateObject( "WScript.Shell" )  

Set fso = CreateObject("Scripting.FileSystemObject")  

If fso.FileExists(file) Then
Set fi = fso.OpenTextFile(file)

Do While Not (fi.atEndOfStream)
	varText = fi.Readline

	Ausgabe = split(varText, vbTab)
	
	msgbox Ausgabe(3) 

Loop

End if

Hat da einer von euch vieleicht eine Idee/Lösung für mich?

Vielen Dank im voraus.

mfg
n4426

Content-Key: 156893

Url: https://administrator.de/contentid/156893

Printed on: April 23, 2024 at 06:04 o'clock

Member: MrTrebron
MrTrebron Dec 13, 2010 at 14:57:40 (UTC)
Goto Top
Hi n4426

also was ich dir schon mal sagen kann, das du nicht einfach nur die Textdatei angeben kannst, sondern auch den Pfad zur Datei setzen musst.

Zudem wäre es hilfreich wenn du deine Fehlermeldung mit postest.

Gruß
Norbert
Member: bastla
bastla Dec 13, 2010 at 15:02:53 (UTC)
Goto Top
Hallo n4426!

Hast Du es schon mit
Set fi = fso.OpenTextFile(file, 1, False, True)
versucht?

Grüße
bastla
Member: n4426
n4426 Dec 13, 2010 at 15:30:07 (UTC)
Goto Top
Hallo,

@norbert: Hab den Pfad nur hier im Posting weggelassen.

Das Problem besteht eigentlich nur darin, das die Sonderzeichen falsch ausgegeben werden (soll hier z.B. ein ß sein).

b660a8e05ba8564b7ae841f97648aa93


@bastla: ja, hab ich, da kommt das hier raus face-smile.

ac7cea6d782a4abb674809d4115d150c

mfg
n4426
Member: bastla
bastla Dec 13, 2010, updated at Oct 18, 2012 at 16:44:23 (UTC)
Goto Top
Hallo n4426!

Stimmt - ich seh' da auch kein einziges ß, ä, ö oder ü face-wink (sieht ansonsten aber nicht uninteressant aus) ...

[Edit] Das hat jetzt aber gedauert, bis ich jenen face-wink) gefunden habe ... [/Edit]
[Edit2] Sollte sich mit Dieters Kurzfassung unten erledigt haben ... [/Edit2]

Grüße
bastla
Mitglied: 76109
76109 Dec 13, 2010 at 16:10:39 (UTC)
Goto Top
Hallo n4426!

Versuchs mal so:
Const UTF8Path = "E:\Test\UTF8.txt"  

Const adTypeText = 2

Dim UTF8Stream, Text
    
Set UTF8Stream = CreateObject("ADODB.Stream")  
        
With UTF8Stream
    .Type = adTypeText
    .Charset = "UTF-8"  
    .Open
    .LoadFromFile UTF8Path
     Text = .ReadText
    .Close
End With

Gruß Dieter
Member: n4426
n4426 Dec 13, 2010 at 16:36:42 (UTC)
Goto Top
Hallo Dieter,

das Sonderzeichen werden jetzt richtig ausgegeben. Danke.

Allerdings wird jetzt das ganze Textfile in einem rutsch eingelesen. Ich brauchs aber Zeile für Zeile und dann die Zeile wieder am TabStop Trennen, damit ich das ganze weiter verarbeiten kann.

Hast du da was zur hand?

mfg
n4426
Member: bastla
bastla Dec 13, 2010 at 16:46:47 (UTC)
Goto Top
Hallo n4426!

Wenn Du alles in der Variablen "Text" hast, kannst Du ja diese zeilenweise splitten:
For Each varText In Split(Text, vbCrLf)
    MsgBox Split(varText, vbTab)(3)
Next
Grüße
bastla
Member: n4426
n4426 Dec 13, 2010 at 17:02:21 (UTC)
Goto Top
Hallo Bastla,

danke funktioniert fast einwandfrei. Jetzt ist nur noch das Problem, das nach der letzte Zeile der UTF-8-Datei nicht verarbeitet werden kann/darf, da diese eine leerzeile ist (da schmiert das Script ab). Kann man das noch abfangen?

mfg
n4426
Member: bastla
bastla Dec 13, 2010 at 17:07:40 (UTC)
Goto Top
Hallo n4426!

Entweder direkt abfragen:
If Trim(varText) <> "" Then MsgBox Split(varText, vbTab)(3)
bzw
arrText = Split(varText, vbTab)
If UBound(arrText) >= 3 Then MsgBox arrText(3)
oder, wenn Du immer die letzte Zeile weg lassen willst:
arrLines = Split(Text, vbCrLf)
For i = 0 To UBound(arrLines)-1
    MsgBox Split(arrLines(i), vbTab)(3)
Next
[Edit] Variablenname auf "arrLines" geändert [/Edit]

Grüße
bastla
Member: n4426
n4426 Dec 13, 2010 at 17:13:56 (UTC)
Goto Top
Super.
Vielen Dank an Bastla und Dieter.

Ich werds warscheinlich die erste Variante mit dem Direkten abfragen nehmen, dann dürfte es auch gehen, wenn mal zwischendrin eine Zeile leer sein sollte.

mfg
n4426