Textfile sortieren
Hallo Zusammen,
ich habe ein Batch Problem und mich hier schon umgesehen, aber immernoch keine Lösung gefunden.
Deswegen wollte ich jetzt mal in einem neuen Beitrag euch um Hilfe bitten.
Ich habe ein Textfile der von einer Steuerungsmaschiene entsteht. Dieses möchte ich in ein CSV Format konvertieren um dann gewisse Berechnungen zu machen.
Mein Problem ist das der Textfile in unterstehenden Linien aufgelistet wird. Ich müsste diese in horizontalen Format bringen und mit Beistriche getrennt.
Beispiel :
*
--
zsrun
205
CalibrationExeronUPC_Low_0
CalibrationProbe_0
Referenzsystem
Referenzsystem
Referenzsystem
--
zsrun
204
10044-09012-FS-4-N1_0
09012_EL-ZB_FS-EI-001-N-020_3
--
zsrun
25888
10044-09012-FS-4-N1_0
09012_EL-ZB_FS-EI-001-N-020_1
--
zsrun
190
CalibrationExeronUPC_Low_0
CalibrationProbe_0
Referenzsystem
Referenzsystem
Referenzsystem
Ergebnis sollte so aussehen:
zsrun ,205,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem
zsrun ,204,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_3
zsrun ,25888,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_1
zsrun ,190,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem
*
Kann mir jemand behilflich sein??
ich habe ein Batch Problem und mich hier schon umgesehen, aber immernoch keine Lösung gefunden.
Deswegen wollte ich jetzt mal in einem neuen Beitrag euch um Hilfe bitten.
Ich habe ein Textfile der von einer Steuerungsmaschiene entsteht. Dieses möchte ich in ein CSV Format konvertieren um dann gewisse Berechnungen zu machen.
Mein Problem ist das der Textfile in unterstehenden Linien aufgelistet wird. Ich müsste diese in horizontalen Format bringen und mit Beistriche getrennt.
Beispiel :
*
--
zsrun
205
CalibrationExeronUPC_Low_0
CalibrationProbe_0
Referenzsystem
Referenzsystem
Referenzsystem
--
zsrun
204
10044-09012-FS-4-N1_0
09012_EL-ZB_FS-EI-001-N-020_3
--
zsrun
25888
10044-09012-FS-4-N1_0
09012_EL-ZB_FS-EI-001-N-020_1
--
zsrun
190
CalibrationExeronUPC_Low_0
CalibrationProbe_0
Referenzsystem
Referenzsystem
Referenzsystem
Ergebnis sollte so aussehen:
zsrun ,205,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem
zsrun ,204,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_3
zsrun ,25888,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_1
zsrun ,190,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem
*
Kann mir jemand behilflich sein??
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204888
Url: https://administrator.de/forum/textfile-sortieren-204888.html
Ausgedruckt am: 17.04.2025 um 21:04 Uhr
11 Kommentare
Neuester Kommentar

Hallo,
von Batch hab ich keine Ahnung. Aber Du musst einfach die Zeilenumbrüche durch ',' (Komma) ersetzen und dann '--' durch einen Zeilenumbruch (in der Reihenfolge). Dann hast Du das gewünschte Ergebnis.
Markus
von Batch hab ich keine Ahnung. Aber Du musst einfach die Zeilenumbrüche durch ',' (Komma) ersetzen und dann '--' durch einen Zeilenumbruch (in der Reihenfolge). Dann hast Du das gewünschte Ergebnis.
Markus

Hi @Superjota,
warum einfach, wenn´s kompliziert geht
öffne diese Log im Texteditor, klicke oben auf Bearbeiten -> Ersetzen
dann machst du in deiner Textfile einen Zeilenumbruch, markierst diesen und kopierst den.
Dann fügst du ihn beim Feld "Suchen nach:" und bei "Ersetzen mit:" schreibst du "," (ohne Anführungszeichen).
Dann trägst du als Nächstes "--" in "Suchen nach:" ein und bei "Ersetzen mit:" wieder den Zeilenumbruch einfügen
Fertig :D
Grüße
Exze
PS: ich denke das war das was @64748 meinte :D
warum einfach, wenn´s kompliziert geht
öffne diese Log im Texteditor, klicke oben auf Bearbeiten -> Ersetzen
dann machst du in deiner Textfile einen Zeilenumbruch, markierst diesen und kopierst den.
Dann fügst du ihn beim Feld "Suchen nach:" und bei "Ersetzen mit:" schreibst du "," (ohne Anführungszeichen).
Dann trägst du als Nächstes "--" in "Suchen nach:" ein und bei "Ersetzen mit:" wieder den Zeilenumbruch einfügen
Fertig :D
Grüße
Exze
PS: ich denke das war das was @64748 meinte :D

Zitat von @106543:
...
PS: ich denke das war das was @64748 meinte :D
im Prinzip ja. Wenn ich sowas im Editor mache (Vim), dann benutze ich Reguläre Ausdrücke. Es sieht dann so aus...
PS: ich denke das war das was @64748 meinte :D
:%s/\n/ ,/
-- ,zsrun ,205 ,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem ,-- ,zsrun ,204 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_3 ,-- ,zsrun ,25888 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_1 ,-- ,zsrun ,190 ,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem , ,
:s/--/\r/g
,zsrun ,205 ,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem ,
,zsrun ,204 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_3 ,
,zsrun ,25888 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_1 ,
,zsrun ,190 ,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem , ,
Markus

Wenn das so ist, könnnte man (wenn´s nicht unbedingt Batch sein muss) mit Powershell arbeiten
da gibt´s einfache Replace-Befehle
Syntax (wenn ich´s noch richtig weiß) Replace(String,das was weg soll,das was hin soll)
Grüße
Exze
Syntax (wenn ich´s noch richtig weiß) Replace(String,das was weg soll,das was hin soll)
Grüße
Exze
Moin Supejota,
willkommen im Forum.
Meiner Meinung nach ist es nicht so furchtbar komplex, den Krams über einen Mini-Batch abzufackeln.
Allerdings wären noch zwei, drei Gegebenheiten zu klären, die für mich nicht klar aus deiner Beispieldatei hervorgehen.
1) in deinem Textauszug existieren auch Zeilen mit dem Zeileninhalt "--". Diese sind wirklich so in der Originaldatei vorhanden und sollen entsorgt werden?
2) die Strings in den jeweiligen Zeilen habe ich der Einfachheit halber angenommen as je ein "Wort" bzw. Token. D.h. es kommen keine eingebetteten Leerzeichen in einer Zeile vor?
3) je erzeugter Csv-Zeile ergeben sich unterschiedliche Anzahl "Spalten" - mal drei, mal fünf. Die nachverabeitung funktioniert damit oder sollen ggf. "Leerspalten" bzw. Kommata angefügt werden.
Ein einfacher Oneliner als proof of concept vom CMD-Prompt aus macht aus deinem Logfilegelumpe,
das ich bei mir zsrun_original.log genannt habe, nach kurzer Vorbereitung:
...dieses hier:
Grüße
Biber
willkommen im Forum.
Meiner Meinung nach ist es nicht so furchtbar komplex, den Krams über einen Mini-Batch abzufackeln.
Allerdings wären noch zwei, drei Gegebenheiten zu klären, die für mich nicht klar aus deiner Beispieldatei hervorgehen.
1) in deinem Textauszug existieren auch Zeilen mit dem Zeileninhalt "--". Diese sind wirklich so in der Originaldatei vorhanden und sollen entsorgt werden?
2) die Strings in den jeweiligen Zeilen habe ich der Einfachheit halber angenommen as je ein "Wort" bzw. Token. D.h. es kommen keine eingebetteten Leerzeichen in einer Zeile vor?
3) je erzeugter Csv-Zeile ergeben sich unterschiedliche Anzahl "Spalten" - mal drei, mal fünf. Die nachverabeitung funktioniert damit oder sollen ggf. "Leerspalten" bzw. Kommata angefügt werden.
Ein einfacher Oneliner als proof of concept vom CMD-Prompt aus macht aus deinem Logfilegelumpe,
das ich bei mir zsrun_original.log genannt habe, nach kurzer Vorbereitung:
D:\ein\Prompt>mode con cols=234 lines=45
...dieses hier:
D:\ein\Prompt>setlocal enableextension &for /f %i in (zsrun_original.log) do @if "%i"=="zsrun" (@if defined csvzeile ((@echo !csvzeile!) & @set "csvzeile=%i") else set "csvzeile=%i") else (if "%i" NEQ "--" set "csvzeile=!csvzeile!,%i")
zsrun,190,CalibrationExeronUPC_Low_0,CalibrationProbe_0,Referenzsystem,Referenzsystem,Referenzsystem
zsrun,205,CalibrationExeronUPC_Low_0,CalibrationProbe_0,Referenzsystem,Referenzsystem,Referenzsystem
zsrun,204,10044-09012-FS-4-N1_0,09012_EL-ZB_FS-EI-001-N-020_3
zsrun,25888,10044-09012-FS-4-N1_0,09012_EL-ZB_FS-EI-001-N-020_1
Grüße
Biber
Moin Superjota,
"Bieber" war ein ganz anderer Justin mit ganz anderen Frisurproblemen als ich sie habe - ich bin nur der "Biber". Ohne "ie" und auch ohne "Herr"
Ich hatte nur einen Schnellschuss vom CMD-Prompt aus gepostet.
Ja, besser is' das, wenn wir da ein paar wartbare Zeilen in einem Batch raus machen.
Ungetestet (weil das Wochenende ruft):
Ich habe jetzt nur eine neue Variable %inputlog% ergänzt, ein paar Zeilenumbrüche reingehäckt und alle Vorkommnisse von "%i" durch "%%i" ersetzt, weil ein Batch zwei Prozentzeichen statt einem braucht.
Wenn du bitte erstmal vom CMD-Prompt aus diesen Batch startest und dir das Ergebnis anguckst
-> also "zslog2csv.cmd" ohne Anführungszeichen eingeben dort, wo Batchschnipsel und deine Logdatei liegen
Wenn was Sinnvolles rauskommt, dann Umleiten mit "zslog2csv>d:\irgend\wohin\neueDatei.csv"
-oder natürlich diesen Basis-Schnipsel erstmal verfeinern (Logfilename als Parameter? Fehlerhandling? Direkt im Batch umleiten?)
Grüße
Biber
"Bieber" war ein ganz anderer Justin mit ganz anderen Frisurproblemen als ich sie habe - ich bin nur der "Biber". Ohne "ie" und auch ohne "Herr"
Ich hatte nur einen Schnellschuss vom CMD-Prompt aus gepostet.
Ja, besser is' das, wenn wir da ein paar wartbare Zeilen in einem Batch raus machen.
Ungetestet (weil das Wochenende ruft):
:: -- dieser Batch möge "zslog2csv.cmd" heissen
:: und im selben Verzeichnis wie deine Original-Logfile liegen.
@Echo off & setlocal enableDelayedExpansion
Set "inputlog=D:\ein\verzeichnis\zsrun_original.log" & REM hier den Namen ändern
FOR /f %%i in (%inputlog%) do if "%%i"=="zsrun" (
if defined csvzeile (
echo !csvzeile!
set "csvzeile=%%i"
) else set "csvzeile=%%i"
) else (
if "%%i" NEQ "--" set "csvzeile=!csvzeile!,%%i"
)
Ich habe jetzt nur eine neue Variable %inputlog% ergänzt, ein paar Zeilenumbrüche reingehäckt und alle Vorkommnisse von "%i" durch "%%i" ersetzt, weil ein Batch zwei Prozentzeichen statt einem braucht.
Wenn du bitte erstmal vom CMD-Prompt aus diesen Batch startest und dir das Ergebnis anguckst
-> also "zslog2csv.cmd" ohne Anführungszeichen eingeben dort, wo Batchschnipsel und deine Logdatei liegen
Wenn was Sinnvolles rauskommt, dann Umleiten mit "zslog2csv>d:\irgend\wohin\neueDatei.csv"
-oder natürlich diesen Basis-Schnipsel erstmal verfeinern (Logfilename als Parameter? Fehlerhandling? Direkt im Batch umleiten?)
Grüße
Biber

Hallo nochmal,
es war so eine interessante Aufgabe und ich lese gerade das Buch sed && awk von Arnold Robbins. Deswegen hab ich noch eine Lösung mit sed zusammengebastelt:
Man kann den Code auch in ein Skript schreiben
Wenn man das skript skript.sed nennt, dann gibt man es mit der -f Option an sed und der Aufruf erfolgtDie Ausgabe sieht dann so aus Markus
es war so eine interessante Aufgabe und ich lese gerade das Buch sed && awk von Arnold Robbins. Deswegen hab ich noch eine Lösung mit sed zusammengebastelt:
sed -n '/--/!H; /--/{x;s/\n/,/g;s/^--//;s/^,//;p;d;h}' < textfile.txt
/--/!H
/--/{
x
s/\n/,/g
s/^--//
s/^,//
p
d
h
}
sed -n -f skript.sed < textfile.txt
zsrun ,205 ,CalibrationExeronUPC_Low_0 ,CalibrationProbe_0 ,Referenzsystem ,Referenzsystem ,Referenzsystem
zsrun ,204 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_3
zsrun ,25888 ,10044-09012-FS-4-N1_0 ,09012_EL-ZB_FS-EI-001-N-020_1