Frage zu VBA Code zum einlesen bestimmter Werte aus einem TXT File
Hallo ich versuche schon seit 2 Tagen eine Lösung für dieses ich denke mal kleines Problem zu finden....
Also erst mal ein Kleiner Auszug aus der 18Mb großen Datei die ich Auswerten möchte die eie Auswertung einer Großrechenanlage ist :
Es geht um die Rot markierten werte die ich Auslesen möchte habe folgenden VBA Code schon ausprobiert jedoch ohne nennswertes Ergebnis die Einträge wiederholen sich Natürlich.
(Nur ein Auszug aus dem kompletten Code)
If InStr(1, l, "STEPNAME") <> 0 Then
textbox4 = Mid(l + 1, 22, 9) ' der Zeichenabstand
End If
Sheets("Tabelle1").Cells(j + 1, 4).Value = textbox4 'Test zu auswertun der Steps
Wäre für Hilfe dankebar
Maddin
Also erst mal ein Kleiner Auszug aus der 18Mb großen Datei die ich Auswerten möchte die eie Auswertung einer Großrechenanlage ist :
15.03.40 JOB77211 - --TIMINGS (MINS.)-- -----PAGING COUNTS----
15.03.40 JOB77211 -STEPNAME PROCSTEP RC EXCP CONN TCB SRB CLOCK SERV WORKLOAD PAGE SWAP VIO SWAPS
15.03.40 JOB77211 -STIDCA 00 27 23 .00 .00 .3 496 BATCH 0 0 0 0
15.03.40 JOB77211 -RENAME 00 30 20 .00 .00 .0 607 BATCH 0 0 0 0
15.43.09 JOB77211 -LADEBBNR 00 179K 83184 3.98 .01 39.4 10816K BATCH 0 0 0 0
Es geht um die Rot markierten werte die ich Auslesen möchte habe folgenden VBA Code schon ausprobiert jedoch ohne nennswertes Ergebnis die Einträge wiederholen sich Natürlich.
(Nur ein Auszug aus dem kompletten Code)
If InStr(1, l, "STEPNAME") <> 0 Then
textbox4 = Mid(l + 1, 22, 9) ' der Zeichenabstand
End If
Sheets("Tabelle1").Cells(j + 1, 4).Value = textbox4 'Test zu auswertun der Steps
Wäre für Hilfe dankebar
Maddin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167764
Url: https://administrator.de/forum/frage-zu-vba-code-zum-einlesen-bestimmter-werte-aus-einem-txt-file-167764.html
Ausgedruckt am: 27.12.2024 um 04:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Headshot!
Wenn ich das richtig verstehe, gibt es mehrere Blöcke mit einer Zeile, die "STEPNAME" enthält. Aus jedem dieser Blöcke sollen aus der nächsten und übernächsten (nach der "STEPNAME" enthaltenden) Zeile Werte gelesen werden. Die Position dieser Werte ergibt sich bei einer Zerlegung anhand der Leerzeichen als 2. und 7. bzw 2. und 10. Element, wobei noch das "-" am Beginn des jeweils ersten Wertes zu eliminieren wäre. Wenn ja, würde ich das etwa so machen:
Da das mit "
Grüße
bastla
[Edit] Korrekturen vorgenommen [/Edit]
Wenn ich das richtig verstehe, gibt es mehrere Blöcke mit einer Zeile, die "STEPNAME" enthält. Aus jedem dieser Blöcke sollen aus der nächsten und übernächsten (nach der "STEPNAME" enthaltenden) Zeile Werte gelesen werden. Die Position dieser Werte ergibt sich bei einer Zerlegung anhand der Leerzeichen als 2. und 7. bzw 2. und 10. Element, wobei noch das "-" am Beginn des jeweils ersten Wertes zu eliminieren wäre. Wenn ja, würde ich das etwa so machen:
Datei = "D:\Deine große Datei.txt"
Zeilen = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei).ReadAll, vbCrLf)
For i = 0 To Ubound(Zeilen) - 2
If InStr(Zeilen(i), "STEPNAME") <> 0 Then
Werte = Split(Zeilen(i + 1))
Wert1 = Mid(Werte(2), 2)
Wert2 = Werte(6)
Werte = Split(Zeilen(i + 2))
Wert3 = Mid(Werte(2), 2)
Wert4 = Werte(11)
'Verarbeitung von Wert1 - Wert4
End If
Next
Split()
"erzeugte Array nullbasiert ist, müssen anstelle von 3 und 7 die Indizes 2 und 6 sowie anstelle von 3 und 12 2 und 11 verwendet werden.Grüße
bastla
[Edit] Korrekturen vorgenommen [/Edit]
Hallo Headshot!
Inzwischen habe ich das Script getestet und erforderliche Korrekturen angebracht; soferne, wie in Deinem geposteten Beispiel (das BTW unter "<
Grüße
bastla
Inzwischen habe ich das Script getestet und erforderliche Korrekturen angebracht; soferne, wie in Deinem geposteten Beispiel (das BTW unter "<
code
>" bzw "</code
>"-Tags gesetzt sein sollte, da die Daten damit von der Forensoftware nicht "interpretiert" und daher unverändert wiedergegeben werden) tatsächlich das Leerzeichen als Trennzeichen dient, sollte das jetzt so passen ...Grüße
bastla
Hallo Headshot!
Die Textboxen 4 und 5 werden jedesmal, wenn "STEPNAME" gefunden wurde, geleert und dann darin alle entsprechenden Einträge, mit "_" als Trennzeichen (Delim), zusammengefasst. Da so als erstes Zeichen immer "_" in der Textbox steht, wird dieses beim Eintragen in die Tabelle mittels "
Stilistische Anmerkungen:
Grüße
bastla
ich möchte aber alle haben die auftauchen kann mir da jemand helfen??
In welcher Form? Im einfachsten Fall könnte das (ungetestet) so aussehen:'...
Const Delim As String = "_"
j = 1
Do While Not f.AtEndOfStream
l = f.ReadLine
If InStr(l, "----") <> 0 Then textbox3 = Mid(l, 25, 22)
If InStr(l, "STEPNAME") <> 0 Then
S = True
Textbox4 = ""
Textbox5 = ""
End If
If InStr(l, "ENDED") <> 0 Then S = False
If InStr(l, "-") <> 0 And S = True Then
Textbox4 = Textbox4 & Delim & Mid(l, 22, 9) 'an den bisherigen Inhalt mit "Delim" getrennt anfügen
Textbox5 = Textbox5 & Delim & Mid(l, 60, 5)
End If
If InStr(l, "$HASP373") <> 0 Then
textbox1 = Mid(l, 30, 8)
textbox2 = Mid(l, 11, 8)
j = j + 1
With Sheets("Tabelle1")
.Cells(j, 2).Value = textbox1
.Cells(j, 1).Value = textbox2
.Cells(j, 3).Value = textbox3
.Cells(j, 4).Value = Mid(Textbox4, Len(Delim) + 1)
.Cells(j, 5).Value = Mid(Textbox5, Len(Delim) + 1)
End With
End If
Loop
End Sub
Mid()
" übersprungen.Stilistische Anmerkungen:
- Da die Zeilennummern in Excel mit 1 beginnen, sehe ich keinen Sinn darin, mit "
j = 0
" zu starten und dann bei jedem Bezug auf die Zeile "j + 1
" verwenden zu müssen ... - "
InStr
" sucht defaultmäßig ab dem ersten Zeichen - eine Angabe der Anfangsposition ist nur erforderlich, wenn die Suche ohne Berücksichtigung von Groß-/Kleinschreibung (mit "vbTextCompare
" als 4. Parameter) erfolgen soll. - Einzeilige "
If
" und der "With
"-Block sind vermutlich Geschmackssache, Einrückungen im Code eigentlich nicht ...
Grüße
bastla