Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Problem beim Textfile per Makro einlesen





Frage

Hallo, ich bin gerade dabei mir ein Makro zu schreiben, das mir spezielle Text-Files einliest. Per: [code] ... Open Dateiname For Input As #1 ... Do While Not EOF(1) ... Input #1, TMP ...[/code] Nun ist dieses Textfile jedoch offensichtlich mittels Tabulatoren formatiert, beim Einlesen werden diese Tabulatoren jedoch innerhalb des Strings als Quadrate dargestellt. Wie kann ich diese Tabulatoren innerhalb eines Strings (dort als Quadrat dargestellt) entsprechend zB per Mid - Fkt. abfragen? Erstaunlicherweise werden Kommas gar nicht eingelesen sondern als Zeichen bzw. Zeilentrennung Interpretiert. Läßt sich das umgehen? Besten Dank [list] Primut[/list]

Antwort 1 von CaroS

Hallo Primut,

ich denke, was Du da verwendest ist die Input #-Anweisung. Schau Dir mal als Alternative die Input-Funktion und auch die Hilfe dazu an. Die funktioniert etwas anders. Man kann damit sehr gut Zeichen einzeln einlesen und ist von den Zeilen oder sonstigen Strukturen der einzulesenden Datei unabhängig.

Sub Datei_zeichenweise_einlesen()
Dim c1 As String, s As String, dateiname As String
dateiname = "D:\Daten\Dokumente und Einstellungen\...\Text.txt"
s = ""
Open dateiname For Input As #1
Do While Not EOF(1)
Rem ein einzelnes Zeichen in c1 einlesen
c1 = Input(1, #1)
Rem Prüfung und Verarbeitung von c1, z. B.
s = s & c1
Loop
Close #1
Rem MsgBox s, , "Fertig!"
End Sub

Hoffe es hilft.

Gruß,
CaroS

Antwort 2 von Primut

Hey,

wird wohl wie üblich wieder darauf hinauslaufen:
Probieren, Probieren, Probieren...

@CaroS , besten Dank, gute Probier-Idee! ;-))))


Gruß
    Primut


Antwort 3 von coros

Hallo Primut,

ich weiß jetzt nicht, ob ich mit meiner Lösungvorschlag in die richtige Richtung ziele,
aber bei den Quadraten wird es sich um Zeilenvorschubzeichen oder Wagenrücklaufzeichen handeln. Diese kannst Du z.B. mit der Inst-Anweisung abfragen. Also mit z.B. mit der Anweisung

InStr(Dein_Text, vbLf)

oder mit

InStr(Dein_Text, vbCr)


wird Dir der Wert zurückgegeben, an der sich dieses Zeichen befindet. Wenn man das Ganze in eine Schleife einbindet, kann man dann die Zeichen herauslöschen lassen. Anstelle der Konstanten "vbLf" und "vbCr" kannst Du auch die Chr-Funktion (Chr(10) oder Chr(13)) benutzen.

Eventuell hilft Dir das ja weiter.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Primut

Hi Oliver,

auch wenn ich noch nicht fertig bin, war von der Sache her schon das, was ich suchte, die Abfrage dann allerdings mit der Variable
vBTab, die werden ja alle als Quadrat dargestellt.
Und mit dieser Variable funktioniert nur der binäre Vergleich, du hast also Recht gehabt.

Besten Gruß

    Primut


Antwort 5 von CaroS

Hallo, hier noch was zum ausprobieren und erweitern:

Sub Primuts_Datei_zeichenweise_einlesen()
Dim c1 As String, s As String, dateiname As String, Zeile() As String
Dim crlf As Boolean, z As Long
dateiname = "D:\Daten\ ... \Text.txt"
s = ""
z = 0
crlf = True
Open dateiname For Input As #1
Do While Not EOF(1)
c1 = Input(1, #1)
If Asc(c1) = 13 Or Asc(c1) = 10 Then
If Not crlf Then
crlf = True
z = z + 1
ReDim Preserve Zeile(z)
Zeile(z) = s & Chr(13)
s = ""
Else
crlf = False
End If
Else
If crlf Then
crlf = False
If Asc(c1) > 31 And Asc(c1) <= 128 Then s = s & c1
Else
If Asc(c1) > 31 And Asc(c1) <= 128 Then s = s & c1
End If
End If
Loop
Close #1
z = z + 1
ReDim Preserve Zeile(z)
Zeile(z) = s
For z = LBound(Zeile()) To UBound(Zeile())
MsgBox Zeile(z), , "Zeile(" & CStr(z) & ")"
Next z
End Sub

Dazu am besten eine relativ kleine Textdatei verwenden, das Prinzip ist ja nach wenigen Zeichen/Zeilen klar. Der Code ist im Moment speziell darauf zugeschnitten, dass die Zeilen der Datei mit vbCR und vbLF (=Chr(13)&Chr(10)) enden. Lässt nur Zeichen zwischen ASCII-32 und ASCII-128 durch, aber das kann man ja leicht erweitern.

Gute-Nacht-Gruß,
CaroS

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: