arotciv
Goto Top

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


  1. Hardware Configuration
Device Info: XL2, SNo. A2A-08877-F3, FW2.72
Mic Type: NTi Audio M2230, S/N: 5049, User calibrated 2015-04-22 16:21
Mic Sensitivity: 38,6 mV/Pa

  1. Measurement Setup
Profile: Full mode
Append mode: OFF
IEC 60268-16: ed4.0 2011

  1. Ambient Noise to add
Set Method: measured
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

  1. STIPA Results
STIPA results are reported with noise added.
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.

Content-Key: 271910

Url: https://administrator.de/contentid/271910

Printed on: April 26, 2024 at 11:04 o'clock

Mitglied: 114757
Solution 114757 May 13, 2015 updated at 10:43:28 (UTC)
Goto Top
Moin,
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
Member: arotciv
arotciv May 13, 2015 at 10:47:07 (UTC)
Goto Top
XL2 STIPA Reporting:		MyProject\XXXXXX_STIPA_000_Report.txt
---------------------


# Hardware Configuration
	Device Info:    	XL2, SNo. A2A-08877-F0, FW2.72
	Mic Type:       	NTi Audio M2230, S/N: 5049, User calibrated 2015-04-22  16:21
	Mic Sensitivity:	38,6 mV/Pa

# Measurement Setup
	Profile:        	Full mode
	Append mode:    	OFF
	IEC 60268-16:   	ed4.0 2011

# Ambient Noise to add
	Set Method:     	measured
	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
	STIPA results are reported with noise added.
	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   
Member: arotciv
arotciv May 13, 2015 at 10:49:49 (UTC)
Goto Top
So sieht man es besser. Ich möchte gerne die Werte in Zeile 29 extrahieren. Und zwar den 0,65 und 58,7

Besten Dank an Jodel32 für den Hinweis zur Eingabe des Textes
Mitglied: 114757
Solution 114757 May 13, 2015 updated at 11:36:28 (UTC)
Goto Top
VBA Code für die Verwendung in Excel: (Im erscheinenden Dateiauswahldialog alle zum Import gewünschten Dateien auswählen, feddich)
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
Viel Spaß face-smile

-edit- Kommentare hinzugefügt
Member: arotciv
arotciv May 13, 2015 at 11:24:16 (UTC)
Goto Top
Funktioniert einwandfrei! Wie macht man so etwas nur in so kurzer Zeit. Schade das ich es nicht verstehe, aber tausend Dank!
Mitglied: 114757
114757 May 13, 2015 updated at 11:36:09 (UTC)
Goto Top
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 face-wink Regular Expressions Tutorial

Ich kommentiere den Code noch nachträglich.