Automatische Datenextraktion nach Excel

Hallo,

ich habe folgendes Problem und würde es gerne mit Excel lösen.
Ich habe umfangreiche Logdateien und würde gerne diverse Elemente automatisch nach Excel (kann auch anderes Programmm sein) exportieren. Die Logdatei ist dabei nicht nach einem Standard formatiert (z.B. csv oder tab-seperated). Die interessierenden Infos stehen in Datenblöcken von 5 Zeilen, die interessierenden Infos stehen dann z.B. in Zeile 2 Zeichen 90 (und ist 4 Zeichen lang). Die nächste Info in Zeile 4, Zeichen 77 (9 Zeichen lang), der letzte benötigte Wert in Zeile 5, Zeichen 73 (ebenfalls 9 Zeichen lang). Danach beginnt ein neuer Datenblock, die Infos stehen in den Gleichen Zeilen und Zeichen (also für den 2. Datenblock Zeile 5+2 Zeichen 90, Zeile 9, Zeichen 77, Zeile 10, Zeichen 73 etc.) Wie kann ich die Daten exportierten, ohne alle Werte manuell extrahieren zu müssen? Für eine Hilfe wäre ich wirklich dankbar.

MfG, Titus

Eine Programmiersprache .

Da du gerade bei Excel bist, VBA heisst die Sprache.
Womit du genau angeben kannst welche Zeichen wohin sollen.

Textdateien lassen sich auch sehr fein mit Perl Script
extrahieren.

Eigentlich ist deine Aufgabenstellung schon so gut beschrieben, das ein tool schreiben eigentlich nur einfach ist. vorrausgesetzt du verräts noch wie die Daten danach aussehen sollen. Also z.b. wieder Textdatei mit tabs :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

habe ein VBA-Makro geschrieben, welches die Datenblöcke aus der Log-Datei einliest, die gewünschten Werte extrahiert und in eine neue Arbeitsmappe schreibt. Hatte leider keine Musterlogdatei zum testen.

Auf eine Fehlerprüfung habe ich der Einfachheit halber verzichtet. Bitte achte daher darauf, dass die ausgewählte Datei wirklich dem beschriebenen Aufbau entspricht (durch 5 teilbare Anzahl von Datenzeilen).

nun der Code und viel Spaß beim Importieren:

Sub ImportLog()
Dim Datenblock(4) As Variant
Dim Wert1 As String
Dim Wert2 As String
Dim Wert3 As String
Dim Ausgabedatei As Workbook
Dim Blatt As Worksheet

Dim logdat As Object
Dim zähler As Integer
Dim zeilenzähler As Integer
Dim datei As Variant

datei = Application.GetOpenFilename(Title:="Bitte Log-Datei auswählen")
If datei = False Then Exit Sub

Set Ausgabedatei = Workbooks.Add
Set Blatt = Ausgabedatei.Worksheets(1)
zeilenzähler = 1

Set logdat = CreateObject("Scripting.FileSystemObject").opentextfile(datei, 1, False, 0)
While (Not logdat.atendofstream) 'alle Zeilen einer Datei durchlaufen
 For zähler = 0 To 4
 Datenblock(zähler) = logdat.readline
 Next zähler
 Wert1 = Mid(Datenblock(1), 90, 4)
 Wert2 = Mid(Datenblock(3), 77, 9)
 Wert3 = Mid(Datenblock(4), 73, 9)
 With Blatt
 .Cells(zeilenzähler, 1).Value = Wert1
 .Cells(zeilenzähler, 2).Value = Wert2
 .Cells(zeilenzähler, 3).Value = Wert3
 End With
 zeilenzähler = zeilenzähler + 1
Wend
logdat.Close
Set logdat = Nothing
Set Ausgabedatei = Nothing
Set Blatt = Nothing
End Sub

Gruß tester!

Hallo Tester, hallo RakonDark,

vielen Dank für eure Hilfe, die Ausgabe sollte genauso sein, wie es das VBA-Makro exportiert. Import hat auch geklappt, musste lediglich nochmal die betreffenden Zeichen anpassen (war mein Fehler). Komischerweise wurden beim ersten Wert nur die ersten drei Zeichen und beim dritten Wert auch zu wenige Zeichen exportiert. Ich habe einfach beim ersten Wert 5 draus gemacht und es klappt. Beim dritten Wert ebenfalls. Soweit so gut, leider werden ab Zeile 10 nicht mehr ab dem 75 Zeichen, sondern ab dem 73 Zeichen exportiert, damit sieht die Exportzeile dann so aus:
[3828] [: 1.7876449] [: 1.8201231] //die Klammern sind von mir
Mit suchen und ersetzen bekomme ich die beiden überflüssigen Zeichen schnell weg und da ich einige Zeichen mehr als nötig exportiere, habe ich auch den ganzen Wert. Mich würde nur interessieren, wieso sich das Makro so verhält. Ich sollte mich echt mal mehr mit VBA beschäftigen. Auf jeden Fall ist mir schonmal sehr geholfen. Vielen Dank euch beiden!

Viele Grüße,
Titus