Bestimmte Daten aus einer Textdatei in Excel importieren
Ich habe von einem Kollegen viele Textdateien mit automatisch aufgenommen Messwerten erhalten und soll nun ganz bestimmte Werte für ihn in eine Excel-Datei übertragen.
Vorweg,
die Messdaten sehen wie folgt aus:
Die einzelnen Daten sind durch ein Tabulator getrennt.
Ich soll jetzt die Punkte durch Komma ersetzen (das wäre mit einem Texteditor mit suchen und ersetzen ja gar kein Problem.)
und Ich soll das jetzt wie Folgt in Excel übertragen.
L10kHz | L125kHz | Q10kHz | Q125kHz |
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 1)
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 2)
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 99)
Also aus der Spalte "Data Trace Real"...
Die |-Striche sind immer ein neues Excel Feld.
Und das ganze mit ca. 100 Dateien. Wenn ich das von Hand mache bin ich da ja ewig beschäftigt. Deshalb hat mir ein Kollege aus der IT geraten hier nachzufragen... Ach ja die Dateinamen sind einigermaßen logisch aufgebaut. Es kommt immer S + fortlaufende Zahl + NH.txt
Beispiel: S00NH.TXT dann S01NH.TXT, ... , S99NH.TXT
Wäre echt super wenn jemand ein Programm kennt mit dem man so was automatisch machen kann.
Grüße
Maria
Vorweg,
die Messdaten sehen wie folgt aus:
4294A REV1.04
"DATE: Apr 2 2012"
"MEASURE PARAMETER: Ls - Q"
"ADAPTER: 4TP 1M"
"SWEEP TYPE: LIN FREQ"
"NUMBER of POINTS: 201"
"POINT DELAY TIME: 0 Sec"
"SWEEP DELAY TIME: 0 Sec"
"OSC LEVEL: 500 mVolt"
"DC BIAS: OFF"
"BW: 1"
"SWEEP AVERAGING: OFF"
"POINT AVERAGING: OFF"
"TRACE: A"
"FORMAT: LINEAR"
"Frequency" "Data Trace Real" "Data Trace Imag"
1.00000000000e+04 8.121696e-03 0.000000e+00
1.49500000000e+04 8.122306e-03 0.000000e+00
[snip]
9.95050000000e+05 -1.021725e-03 0.000000e+00
1.00000000000e+06 -1.010053e-03 0.000000e+00
"TRACE: B"
"FORMAT: LINEAR"
"Frequency" "Data Trace Real" "Data Trace Imag"
1.00000000000e+04 9.817833e+00 0.000000e+00
1.49500000000e+04 9.107464e+00 0.000000e+00
[snip]
9.95050000000e+05 8.461501e+01 0.000000e+00
1.00000000000e+06 7.351902e+01 0.000000e+00
Die einzelnen Daten sind durch ein Tabulator getrennt.
Ich soll jetzt die Punkte durch Komma ersetzen (das wäre mit einem Texteditor mit suchen und ersetzen ja gar kein Problem.)
und Ich soll das jetzt wie Folgt in Excel übertragen.
L10kHz | L125kHz | Q10kHz | Q125kHz |
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 1)
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 2)
zweiter Wert aus Zeile 22 | zweiter Wert aus Zeile 45 | zweiter Wert aus Zeile 229 | zweiter Wert aus Zeile 252 | (aus Datei 99)
Also aus der Spalte "Data Trace Real"...
Die |-Striche sind immer ein neues Excel Feld.
Und das ganze mit ca. 100 Dateien. Wenn ich das von Hand mache bin ich da ja ewig beschäftigt. Deshalb hat mir ein Kollege aus der IT geraten hier nachzufragen... Ach ja die Dateinamen sind einigermaßen logisch aufgebaut. Es kommt immer S + fortlaufende Zahl + NH.txt
Beispiel: S00NH.TXT dann S01NH.TXT, ... , S99NH.TXT
Wäre echt super wenn jemand ein Programm kennt mit dem man so was automatisch machen kann.
Grüße
Maria
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183190
Url: https://administrator.de/forum/bestimmte-daten-aus-einer-textdatei-in-excel-importieren-183190.html
Ausgedruckt am: 08.04.2025 um 12:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo phiamabi und willkommen im Forum!
Auf die Schnelle könntest Du folgendes VBScript (auch in Excel als VBA möglich) verwenden, um die entsprechenden Daten in einer CSV-Datei (die sich dann in Excel importieren lässt) zu sammeln:
Grüße
bastla
[Edit] Dateiname wird jetzt als Feld 1 in die CSV-Datei geschrieben [/Edit]
Auf die Schnelle könntest Du folgendes VBScript (auch in Excel als VBA möglich) verwenden, um die entsprechenden Daten in einer CSV-Datei (die sich dann in Excel importieren lässt) zu sammeln:
Quelle = "D:\Messdaten" 'Ordner, der nur die S??NH.TXT-Dateien enthält
Ziel = "D:\Messdaten.csv"
Zeilen = Array(22,45,229,252) 'Zeilennummern in den Quelldateien
Feld = 2 'FeldNummer in den Quelldaten
Delim = ";" 'Trennzeichen in der Zieldatei
Set fso = CreateObject("Scripting.FileSystemObject")
For Each File In fso.GetFolder(Quelle).Files
DatenEin = Split(File.OpenAsTextStream.ReadAll, vbCrLf)
DatenSatz = fso.GetBaseName(File.Name)
For Each Zeile In Zeilen
DatenSatz = DatenSatz & Delim & Split(DatenEin(Zeile - 1), vbTab)(Feld - 1)
Next
DatenAus = DatenAus & vbCrLf & DatenSatz
Next
fso.CreateTextFile(Ziel).Write Replace(Mid(DatenAus, 3), ".", ",") 'Punkt durch Komma ersetzen und in Datei schreiben
bastla
[Edit] Dateiname wird jetzt als Feld 1 in die CSV-Datei geschrieben [/Edit]

Hallo und willkommen im Forum.
Da hätte ich als Alternative zu bastlas Vorschlag eine Batchlösung anzubieten, das soll keine Wertung sein!
Gruß
Da hätte ich als Alternative zu bastlas Vorschlag eine Batchlösung anzubieten, das soll keine Wertung sein!
@echo off
Set ExcelLine=
Set "OutputFile=output.csv"
Set "Trenner=;"
del %Outputfile% 2>nul
Set "Line1=22"
Set "Line2=45"
Set "Line3=229"
Set "Line4=252"
for /f %%a in ('dir /b S??NH.TXT') do set /a Count=0 & for /F "tokens=2" %%b in (%%a) do call :process %%a %%b
goto :eof
:Process
set /a count+=1
for %%x in (%line1% %line2% %line3% %line4%) do if %%x EQU %count% call :put %1 %2
goto :eof
:put
Set "Filename=%1"
Set wert=%2
set "wert=%wert:.=,%"
if [%count%]==[%Line1%] (set "ExcelLine=%1%trenner%%wert%") else (set "ExcelLine=%ExcelLine%%trenner%%wert%")
if [%count%]==[%Line4%] @echo %ExcelLine% >> %OutputFile%
goto :eof
Gruß
@106009
Als Alternative zum "selber zählen" böte sich ein "
Grüße
bastla
Als Alternative zum "selber zählen" böte sich ein "
findstr /n"
an - schematisch etwa (da nur 4 Zeilen betroffen gleich ohne zusätzliche Schleife):for /f %%a in ('dir /b S??NH.TXT') do call :process "%%a"
...
:process
set "ExcelLine="
for /f "tokens=1* delims=:" %%b in ('findstr /n "^" %1^|findstr /b "22: 45: 229: 252:) do call :put "%%c"
...
bastla

@bastla
danke für den Tipp, ich muss mich wohl etwas mehr mit findstr beschäftigen.
Hast du keinen Tipp, wie man das Brett vor dem Kopf bzw. die Knöpfe vor den Augen dauerhaft entfernen kann? Fast eine Stunde habe ich zu obigen Zeilen nach einem Fehler gesucht und immer wieder einen Buchstabendreher überlesen. Und dann noch an der falschen Stelle @echos eingefügt, um dem auf die Spur zu kommen *grrrr*
Gruß
danke für den Tipp, ich muss mich wohl etwas mehr mit findstr beschäftigen.
Hast du keinen Tipp, wie man das Brett vor dem Kopf bzw. die Knöpfe vor den Augen dauerhaft entfernen kann? Fast eine Stunde habe ich zu obigen Zeilen nach einem Fehler gesucht und immer wieder einen Buchstabendreher überlesen. Und dann noch an der falschen Stelle @echos eingefügt, um dem auf die Spur zu kommen *grrrr*
Gruß
Hallo phiamabi!
Du musst doch nur:
Grüße
bastla
Könntest du mir das einbauen?
Was soll ich wo einbauen?Du musst doch nur:
- alle Textdateien in einen Ordner legen
- den Pfad zu diesem Ordner in Zeile 1 anstelle von "D:\Messdaten" eintragen
- in Zeile 2 einen Dateinamen (inkl Pfad) für die zu erstellende CSV-Datei angeben
- das Script (mit dem Dateityp .vbs) speichern
- das gespeicherte Script doppelklicken
- die entstandene CSV-Datei doppelklicken (sollte dann mit Excel geöffnet werden) oder selbst von Excel aus öffnen
Grüße
bastla
... bzw als weitere Alternative (setzt aber voraus, dass es tatsächlich alle Dateien von "00" bis "99" gibt):
Auch hier werden zusätzlich die Dateinamen (ohne Typ) in die CSV-Datei geschrieben. Außerdem wird jetzt auch die Kopfzeile erzeugt.
Grüße
bastla
Quelle = "D:\Messdaten" 'Ordner, der die S??NH.TXT-Dateien enthält
Ziel = "D:\Messdaten.csv"
Zeilen = Array(22,45,229,252) 'Zeilennummern in den Quelldateien
Feld = 2 'FeldNummer in den Quelldaten
Delim = ";" 'Trennzeichen in der Zieldatei
Set fso = CreateObject("Scripting.FileSystemObject")
DatenAus = "Dateiname" & Delim & "L10kHz" & Delim & "L125kHz" & "Q10kHz" & "Q125kHz" 'Kopfzeile
If Right(Quelle, 1) <> "\" Then Quelle = Quelle & "\"
For i = 100 To 199
FileName = "S" & Right(i, 2) & "NH" 'Dateinamen mit laufender Nr erstellen
DatenSatz = FileName
DatenEin = Split(fso.OpenTextFile(Quelle & FileName & ".TXT").ReadAll, vbCrLf)
For Each Zeile In Zeilen
DatenSatz = DatenSatz & Delim & Split(DatenEin(Zeile - 1), vbTab)(Feld - 1)
Next
DatenAus = DatenAus & vbCrLf & DatenSatz
Next
fso.CreateTextFile(Ziel).Write Replace(DatenAus, ".", ",") 'Punkt durch Komma ersetzen und in Datei schreiben
Grüße
bastla