Messwerte aus mehreren .txt Dateien in eine Exceltabelle einlesen
Ich quäle mich seit Tagen mit gefährlichem Halbwissen um Codes die hier bereitgestellt wurden so abzuändern, dass ich zwei simple Zahlen aus mehreren Dateien in eine Excel Tabelle einlesen kann.
Bei der Textdatei handelt es sich um ein, von einem Messgerät automatisch erzeugtes Protokoll.
In diesem Protokoll sind lediglich zwei Werte interessant. Sie stehen aber in einer langen Reihe von Zahlen und ich bekomme Sie nicht rausgefiltert.
So sieht die Textdatei aus:
XL2 STIPA Reporting: MyProject\XXXXX_STIPA_000_Report.txt
Mic Type: NTi Audio M2230, S/N: 5049, User calibrated 2015-04-22 16:21
Mic Sensitivity: 38,6 mV/Pa
Append mode: OFF
IEC 60268-16: ed4.0 2011
Set Time: 2015-05-05, 17:46
Band [Hz] 125,0 250,0 500,0 1000,0 2000,0 4000,0 8000,0
LZeq [dB] 33,9 30,7 24,7 19,6 14,5 12,7 12,5
LZeq, mr1 and mr2 results are the purely measured values.
Start Stop Band [Hz] 125,0 250,0 500,0 1000,0 2000,0 4000,0 8000,0
Date Time Date Time STIPA CYCLE LAeq Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status
[YYYY-MM-DD] [hh:mm:ss] [YYYY-MM-DD] [hh:mm:ss] [STI] [STI] [dB] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1]
2015-05-05 17:47:20 2015-05-05 17:47:35 0,65 58,7 OK 48,1 0,96 0,58 OK 63,9 1,03 0,66 OK 56,9 0,96 0,78 OK 51,2 0,83 0,30 OK 43,5 0,95 0,50 OK 34,8 1,02 0,68 OK 18,7 0,46 0,07 OK
Die Werte nach den Datums und Zeitangaben 0,65 und 58,7 sind die, die ich außer dem eigentlichen Dateinamen gerne in der Tabelle hätte:
Also A:B:C
Projektname_STIPA_000_Report.txt : 0,65 : 58,7
Super wäre es wenn ich vorher die Dateien die ich benötige auswählen könnte.
Kann mir jemand von Euch dazu helfen? Habe hier viele ähnliche Routinen gesehen, aber ich bekomm das leider nicht hin.
Bei der Textdatei handelt es sich um ein, von einem Messgerät automatisch erzeugtes Protokoll.
In diesem Protokoll sind lediglich zwei Werte interessant. Sie stehen aber in einer langen Reihe von Zahlen und ich bekomme Sie nicht rausgefiltert.
So sieht die Textdatei aus:
XL2 STIPA Reporting: MyProject\XXXXX_STIPA_000_Report.txt
- Hardware Configuration
Mic Type: NTi Audio M2230, S/N: 5049, User calibrated 2015-04-22 16:21
Mic Sensitivity: 38,6 mV/Pa
- Measurement Setup
Append mode: OFF
IEC 60268-16: ed4.0 2011
- Ambient Noise to add
Set Time: 2015-05-05, 17:46
Band [Hz] 125,0 250,0 500,0 1000,0 2000,0 4000,0 8000,0
LZeq [dB] 33,9 30,7 24,7 19,6 14,5 12,7 12,5
- STIPA Results
LZeq, mr1 and mr2 results are the purely measured values.
Start Stop Band [Hz] 125,0 250,0 500,0 1000,0 2000,0 4000,0 8000,0
Date Time Date Time STIPA CYCLE LAeq Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status LZeq mr1 mr2 Status
[YYYY-MM-DD] [hh:mm:ss] [YYYY-MM-DD] [hh:mm:ss] [STI] [STI] [dB] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1] [dB] [x1] [x1]
2015-05-05 17:47:20 2015-05-05 17:47:35 0,65 58,7 OK 48,1 0,96 0,58 OK 63,9 1,03 0,66 OK 56,9 0,96 0,78 OK 51,2 0,83 0,30 OK 43,5 0,95 0,50 OK 34,8 1,02 0,68 OK 18,7 0,46 0,07 OK
Die Werte nach den Datums und Zeitangaben 0,65 und 58,7 sind die, die ich außer dem eigentlichen Dateinamen gerne in der Tabelle hätte:
Also A:B:C
Projektname_STIPA_000_Report.txt : 0,65 : 58,7
Super wäre es wenn ich vorher die Dateien die ich benötige auswählen könnte.
Kann mir jemand von Euch dazu helfen? Habe hier viele ähnliche Routinen gesehen, aber ich bekomm das leider nicht hin.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 271910
Url: https://administrator.de/forum/messwerte-aus-mehreren-txt-dateien-in-eine-exceltabelle-einlesen-271910.html
Ausgedruckt am: 17.05.2025 um 18:05 Uhr
6 Kommentare
Neuester Kommentar

Moin,
bitte nutze Code-Tags für den Text der Textdatei:
So ist dieser nicht zu gebrauchen da unterschiedlich zum Original, und weil das für eine Extrahierung extrem wichtig ist!...
Danke.
Gruß jodel32
bitte nutze Code-Tags für den Text der Textdatei:
<code> Text </code>
.So ist dieser nicht zu gebrauchen da unterschiedlich zum Original, und weil das für eine Extrahierung extrem wichtig ist!...
Danke.
Gruß jodel32

VBA Code für die Verwendung in Excel: (Im erscheinenden Dateiauswahldialog alle zum Import gewünschten Dateien auswählen, feddich)
Viel Spaß 
-edit- Kommentare hinzugefügt
Sub ImportData()
Dim fd As FileDialog, fso As Object, regex As Object, rngCurrent As Range, content As String, file As Variant, matches as Object
' Objekte erzeugen
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
'Regular Expression Eigenschaften festlegen
regex.Global = False: regex.IgnoreCase = True
'Regex-Pattern zur Extrahierung der gewünschten Stellen
regex.Pattern = "Reporting:\s*([^\r\n]+)[\s\S]*\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2}\s*([\d,]+)\s*([\d,]+)"
'nächste freie Zeile ermitteln
Set rngCurrent = Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
With fd
' erlaube eine Mehrfachauswahl
.AllowMultiSelect = True
' wurde der Dialog mit OK verlassen
If .Show = -1 Then
' Für jede ausgewählte Datei ...
For Each file In .SelectedItems
' speichere den Text der Datei
content = fso.OpenTextFile(file, 1).ReadAll()
' Suche mit dem Regex-Pattern in der Datei
Set matches = regex.Execute(content)
' wurden die Einträge gefunden ...
If matches.Count > 0 Then
' setze die aktuelle Zeile (Spalte A-C) mit den extrahierten Werten aus der Datei
rngCurrent.Resize(1, 3).Value = Array(matches(0).submatches(0), CDbl(matches(0).submatches(1)), CDbl(matches(0).submatches(2)))
' Formatiere Spalte B und C als Zahlen
rngCurrent.Offset(0, 1).Resize(1, 2).NumberFormat = "0.00"
' Verschiebe die aktuelle Zeile 1 weiter nach unten
Set rngCurrent = rngCurrent.Offset(1, 0)
End If
Next
End If
End With
set fso = Nothing
set regex = Nothing
set fd = Nothing
End Sub
-edit- Kommentare hinzugefügt

Zitat von @arotciv:
Funktioniert einwandfrei! Wie macht man so etwas nur in so kurzer Zeit. Schade das ich es nicht verstehe, aber tausend Dank!
Das hier ist die halbe Miete für die Erklärung des Strings in Zeile 7, und ist in jeder Programmiersprache ein absolutes Muss Funktioniert einwandfrei! Wie macht man so etwas nur in so kurzer Zeit. Schade das ich es nicht verstehe, aber tausend Dank!
Ich kommentiere den Code noch nachträglich.