Anzeige
Archiv - Navigation
668to672
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
668to672
668to672
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

nochmal Textdatei einlesen und Separator

nochmal Textdatei einlesen und Separator
18.09.2005 19:22:50
Axel
Hallo Leute,
ich habe ein Problem, bei dem mir Josepf Ehrensberger vor einigen Tagen schon super weiterhelfen konnte.
Ich muss eine Textdatei einlesen und daraus gezielt Daten auslesen. Im ersten Fall sind die Daten in der
Textdatei durch "Tabstopp`s" von einander getrennt.
Dazu habe ich den nachstehenden Code von Joseph noch einmal aufgeführt.
'---------------------------------------------------------------------------------------------------

Sub Daten_Holen()
Dim iRow As Integer, iCol As Integer
Dim sFile As String, sTxt As String
Dim iFile As Integer
Dim tmp As Variant
Dim lRow As Long
lRow = 5			'Startzeile der Einträge der Textdatei
sFile = Range("A1").Value	'Name der Testdatei, die geöffnet werden soll, hier "event.txt"
iFile = FreeFile
fileToOpen = Application _
.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen <> False Then	'mitteilen welche Datei geöffnet wird, nicht zwingend erforderlich
MsgBox "Open " & fileToOpen
End If
If Dir(sFile) = "" Then
Beep
MsgBox "Die Textdatei wurde nicht gefunden !!!"
Exit Sub
End If
sSearch = "Name"	'Name steht im 7.Block der Textdatei
Open sFile For Input As iFile
Do Until EOF(1)
Input #iFile, sTxt
MsgBox sTxt 'aber mit Vorsicht einsetzen, da die gesamte Textdatei feldweise angezeigt wird!!!
If InStr(sTxt, sSearch) Then
tmp = Split(sTxt, Chr(9))		'Feldtrenner "Tabstopp"
Cells(lRow, 1) = tmp(0)		'Eventname im 7.Datenfeld, tmp(7)
Cells(lRow, 2) = tmp(14) & " / " & tmp(8)	'Alarm-Unit tmp(14) / Alarm-Text tmp(8)
lRow = lRow + 1	'Zeilenzähler hochzählen für nächsten Eintrag
End If
Loop
Close iFile
End Sub

'---------------------------------------------------------------------------------------------------
... nun aber zu meinem eigentlichen Problem. In einem zweiten Fall muss ich ein Textdatei verarbeiten
in der als Feldseparator ein "Komma" verwendet wird. Das wäre dann das Zeichen "Chr(44)" für Komma.
Jedoch verzweifle ich daran, wenn ich versuche die Zeilen ...
....
tmp = Split(sTxt, Chr(44))
Cells(lRow, 1) = tmp(7) 'Datenfeld 7
....
zu verwenden. Ich bekomme dann immer den Laufzeitfehler "9" gezeigt. Trage ich in der zweiten Zeile
anstatt tmp(7) eine tmp(0) ein, wird mir das Datenfeld angezeigt in dem der Suchbegriff "Name" enthalten
ist. Das ist aber das Datenfeld 6. Ich benötige aber immer das folgende Datenfeld 7 mit den sich ständig
verändernden Inhalten.
Was mache ich denn falsch? Trotz Onlinehilfe und ASCII-Zeichensatz, ich komme nicht weiter.
Kann mir jemand weiterhelfen?
Gruß Axel

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:14:44
Ramses
Hallo
Das deutet eigentlich darauf hin, dass zusätzliche "Kommas" drin sind.¨
Kanst du mal ein ORIGINAL Beispiel (allenfalls die Texte geändert) deiner Textdatei hochladen ?
Gruss RAiner
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:23:09
Axel
Hallo RAiner,
hier mal die "Testdatei". Die ersten Zeilen habe ich ein wenig angepasst.
https://www.herber.de/bbs/user/26711.txt
Gruß Axel
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:15:22
Josef
Hallo Axel!
Bei Kommaseparierten Textdateien, musst du auf "Line Input" umsteigen!
Bei "Input" bekommst du immer nur den Eitrag vor dem ersten Komma.
Siehe dazu auch die OH zur Input-Methode!
Sub Daten_Holen()
Dim iRow As Integer, iCol As Integer
Dim sFile As String, sTxt As String, sSearch As String
Dim iFile As Integer
Dim tmp As Variant
Dim lRow As Long
'
lRow = 5 'Startzeile der Einträge der Textdatei
iFile = FreeFile
'
sFile = Application _
  .GetOpenFilename("Text Files (*.txt), *.txt")

sSearch = "Name" 'Name steht im 7.Block der Textdatei
Open sFile For Input As iFile

Do Until EOF(iFile)
  Line Input #iFile, sTxt
  
  If InStr(sTxt, sSearch) Then
    tmp = Split(sTxt, Chr(44)) 'Feldtrenner "Komma" , es gaht aber auch - Split(sTxt, ",")
    Cells(lRow, 1) = tmp(0) 'Eventname im 7.Datenfeld, tmp(7)
    Cells(lRow, 2) = tmp(14) & " / " & tmp(8) 'Alarm-Unit tmp(14) / Alarm-Text tmp(8)
    
    lRow = lRow + 1 'Zeilenzähler hochzählen für nächsten Eintrag
  End If
Loop

Close iFile

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
Details :-)
18.09.2005 20:23:52
Ramses
Hallo Josef
Stimmt, hab ich nicht gesehen weil ich das so nicht verwende.
Dann wäre es aber wichtig vorher zu wissen, ob die Daten mit WRITE oder PRINT geschrieben wurden.
Wenn sie mit INPUT richtig getrennt wurden, könnte dass es mit LINE INPUT Probleme geben.
Warten wir es ab.
Gruss Rainer
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:27:16
Axel
Hallo Sepp,
Deine Antwort kam gerade rein als ich den Upload für Ramses machte. Beim Spöbern in der OH habe die Möglichkeit mit "Line Input" auch gelesen, sie aber nicht richtig umsetzen können. Daher meine Versuche mit dem Chr(34) für "Komma" irgendwie weiterzukommen.
Ich werde gleich mal das Script testen. Melde mich gleich noch mal.
Gruß Axel
Anzeige
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:39:09
Axel
Hallo Sepp,
das Script läuft gut, jedoch sind die Datenfelder zwischen den Kommas immer noch zusätzlich mit einen Anführungsstrichelchen " gekennzeichnet, so in der Art ...
12435,Blabla,"Name","MeinGesuchterInhalt","Text1","Text2",...
usw.. Die sollen aber nicht angezeigt werden. Das erste Strichelchen bekomme ich ja weg mit der Left-Funktion, aber das letzte Strichelchen nicht, da die Inhalte ja immer unterschiedlich lang sind.
Ansonsten schnalle ich langsam die Funktion "Line Input", Danke Dir.
Gruß Axel
AW: nochmal Textdatei einlesen und Separator
18.09.2005 20:47:54
Josef
Hallo Alex!
Die Felder des Datenfeldes "tmp" sind vom Inhalt her Strings!
Deshalb werden sie im Lokalfenster in "" angezeigt.
Wenn du sie in die Zelle schreibst dann sollten die "" nicht mehr vorhanden sein!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
und sonst kannst du mit...
18.09.2005 20:55:45
Josef
...
Cells(lRow, 1) = Replace(tmp(0), """", "")
Cells(lRow, 2) = Replace(tmp(14) & " / " & tmp(8), """", "")

die überflüssigen "" wegbekommen!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: und sonst kannst du mit...
18.09.2005 21:03:24
Axel
Hallo Sepp,
Dein Tipp war wieder einmal Gold wert. Ich danke Dir für Deine wertvollen Tipp`s zu später Stunde. Mit der "Replace"- Funktion geht`s super.
Danke noch mal und bis nächsten Mal.
Grüße, Axel

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige