Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: (File-)Open mit Unicode-Zeichen

(File-)Open mit Unicode-Zeichen
27.09.2021 15:17:40
Günther
Hallo,
nachfolgender (rudimentärer) Code öffnet eine Textdatei (Fullname aus Zelle A1, z.B. "C:\Daten\Max Mustermann.txt") und schreibt den Inhalt zeilenweise in das Direktfenster. Der darin enthaltene Open-Befehl funktioniert aber nur, solange im Fullname kein Unicode-Zeichen enthalten ist, anderenfalls (z.B. "C:\Daten\Maxi Műstermann.txt") bricht er mit dem Laufzwitfehler 53 "Datei nicht gefunden" ab, auch wenn es die Datei gibt.
Ich suche daher ein Unicode-Zeichen-taugliches Pendant zum Open-Befehl.
Der Umweg über ein Umbenennen der Datei oder das Anlegen einer temporären Kopie ist mir bekannt - ist aber nicht die Lösung, die ich suche.
Vielen Dank im Voraus für alle Rückmeldungen.
Günther

Sub TextImport()
Dim Fullname As String, TextZeile As String, FileNum As Long
FileNum = FreeFile()
Fullname = Range("A1")
Open Fullname For Input As #FileNum
Do Until EOF(FileNum)
Line Input #FileNum, TextZeile
Debug.Print TextZeile
Loop
Close #FileNum
End Sub
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FSO
27.09.2021 15:25:52
Fennek
Hallo,
FSO (FileSystemObjet) bietet als eine Variante Unicode-Dateien zu öffnen.
Der M$-Hilfetext zeigt es.
mfg
AW: FSO
27.09.2021 16:21:50
Günther
Danke Fennek für die Rückmeldung!
Du hast mich damit prompt entlarvt, dass ich meine Frage zwecks kurzer, knapper Darstellung zu stark vereinfacht habe - sorry 🙁.
Es geht mir im Endeffekt um das Öffnen von Binärdateien.
Sollte das auch per fso gehen? Wenn ja, wie?
Wenn nein, präzisiere ich hiermit meine Frage:
Ich suche ein Unicode-Zeichen-taugliches Pendant zum Open-Befehl für Binärdateien.
Grüße
Günther
FSO-Codebeispiel:

Sub TextImport_UNICODEDateiname()
Dim fso As New FileSystemObject, Fullname As String, TextZeile As String, TS As TextStream
Fullname = Range("E1")
Set TS = fso.OpenTextFile(Fullname, ForReading)
Do Until TS.AtEndOfStream
TextZeile = TS.ReadLine
Debug.Print TextZeile
Loop
TS.Close
Set TS = Nothing
Set fso = Nothing
End Sub

Anzeige
AW: Binärdaten
27.09.2021 16:49:18
Fennek
Hallo,
der OPEN-Befehl kann auch binary lesen. Vielleicht müssen die Binärdaten danach konvertiert werden.
Ist es möglich eine kleine Beipiel-Datei zu zeigen?
mfg
AW: Binärdaten
27.09.2021 20:43:20
Günther
Hallo Fenneck,
Danke nochmals für Deine Antwort.
Es scheint mir aber noch nicht gelungen zu sein, meine Frage klar genug zu formulieren.
Daher noch einmal ein Anlauf:
Ich will per VBA den Inhalt einer allgemeinen Datei als Binärdaten einlesen. Dies funktioniert üblicherweise mit dem Open-Befehl (z.B. siehe folgenden Beispielcode). Wenn jedoch der Dateiname der einzulesenden Datei (oder auch ein Ordnername des betroffenen Pfads) ein Unicode-Zeichen enthält, werden keine Daten eingelesen. Dafür suche ich eine Lösung, wobei ich ohne ein vorübergehendes Umbenennen oder Anlegen einer temporären Kopie der Datei (sodass der Fullname dann keine UNICODE-Zeichen mehr enthält) auskommen möchte.
Zum Testen z.B. den Dateinamen irgendeines JPG entsprechend anpassen und den Fullname in die Zelle A1 reinschreiben. Ich verwende gerne die Zeichen ≤ und ≥ (8804 ud 8805). In der Praxis sind es Personenfotos aus dem Balkanraum, deren Dateinamen den Personennamen entsprechen und somit die div. diakritischen Unicode-Zeichen enthalten.
Herzliche Grüße
Günther

Option Explicit
Const BlockSize = 32768
Public globfso As New FileSystemObject
Sub DatenImport()
Dim Fullname As String, TextZeile As String, FNr As Long, AnzBl As Long, Rest As Long, Daten() As Byte, i As Long, DateiGr As Long
FNr = FreeFile()
Fullname = Range("A1")
'DateiGr = FileLen(Fullname) 'geht nicht, wenn Fullname UNICODE-Zeichen enthält (Entweder DateiGr=0 oder Laufzeitfehler 53: Datei nicht gefunden)
DateiGr = globfso.GetFile(Fullname).Size 'geht auch, wenn Fullname UNICODE-Zeichen enthält
AnzBl = DateiGr \ BlockSize - 1
Rest = DateiGr Mod BlockSize - 1
Open Fullname For Binary Access Read As #FNr 'geht nicht, wenn Fullname UNICODE-Zeichen enthält (kein Laufzeitfehler, aber es wird kein Inhalt eingelesen)
If Rest > 0 Then
ReDim Daten(Rest)
Get #FNr, , Daten
Debug.Print Daten
End If
ReDim Daten(BlockSize)
For i = 1 To AnzBl
Get #FNr, , Daten
Debug.Print Daten
Next i
Close #FNr
End Sub

Anzeige
AW: FSO
28.09.2021 19:11:26
Günther
Danke Firmus für deinen Hinweis.
Ich habe das ausprobiert, war aber leider nicht erfolgreich:
Für das Auslesen der Daten im Binärformat braucht man z.B. folgende Zeile:

Open Fullname For Binary Access Read As #FNr
Der Binary-Modus bedingt aber auch folgendes Verhalten:
„Wenn die mit pathname angegebene Datei nicht vorhanden ist, wird sie erstellt, sobald eine Datei im Modus Append, Binary, Output oder Random geöffnet wird.“
Wenn man obige Zeile wie folgt adaptiert, passiert folgendes:

Open globfso.GetFile(Fullname).ShortPath For Binary Access Read As #FNr
Fall A:
Wenn nur der Dateiname ein UNICODE-Zeichen enthält, dann legt dieser Befehl im Ordner der Datei eine neue Datei mit dem Shortname und einer Dateigröße von 0 Bytes an.
Fall B:
Wenn einer der am Pfad beteiligten Ordnernamen ein UNICODE-Zeichen enthält, dann stürzt der Befehl mit dem Laufzeitfehler 76 „Pfad nicht gefunden“ ab.
Grüße
Günther
Anzeige
AW: FSO
29.09.2021 19:44:02
Yal
Hallo Günther,
keine Ahnung, aber versuchst die "Problem"-Zeichen nach dem Web-Methode umzuwandeln: Prozent gefolgt vom Ascii-Wert in Hexa.
So ist aus einem Leerzeichen (ascii 32) %20
und
ä (228) %E4
ö (246) %F6
ü (252) %FC
ß (223) %DF
Ä (196) %C4
Ö (214) %D6
Ü (220) %DC
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige