Passagen-Extraktion aus einer Textdatei via Batch-CMD
Moin,
ich hänge ein wenig.
Ich habe folgendes Problem.
Ich habe eine Textdatei die 3 Zeilen enthält in folgendem Format :
(0010,0010) PN [nachname, vorname] # 18, 1 text1
(0010,0020) LO [123456] # 6, 1 text2
(0008,1030) LO [Der Text] # 10, 1 text3
Ich würde gerne via CMD-Batch die Inhalte zwischen den eckigen Klammen (nachname, vorname - 123456 - Der Text) in eine externe Textdatei ausleiten.
Die externe Textdatei sollte dann folgenden Inhalt haben :
nachname_vorname
123456
Der Text
Wobei bei dem Namen das Komma durch einen Unterstrich ersetzt werden soll und ein ev. Leerzeichen entfernt werden soll.
findstr arbeitet nur zeilenweise, glaub da komme ich nicht weiter.
Die Daten in den Klammern sind nie die gleichen, also suchen nach (Inhalt in der Klammer) funktioniert nicht, auch die Anzahl der Zeichen zwischen den eckigen Klammern sind nie gleich in der Anzahl.
Später wird aus der Kombination nachname_vorname_123456 ein Verzeichnisordner erstellt in dem dann gezielt weitere Daten abgelegt werden.
Ich danke schonmal für Infos, Feedbacks oder Anschubser ;)
ich hänge ein wenig.
Ich habe folgendes Problem.
Ich habe eine Textdatei die 3 Zeilen enthält in folgendem Format :
(0010,0010) PN [nachname, vorname] # 18, 1 text1
(0010,0020) LO [123456] # 6, 1 text2
(0008,1030) LO [Der Text] # 10, 1 text3
Ich würde gerne via CMD-Batch die Inhalte zwischen den eckigen Klammen (nachname, vorname - 123456 - Der Text) in eine externe Textdatei ausleiten.
Die externe Textdatei sollte dann folgenden Inhalt haben :
nachname_vorname
123456
Der Text
Wobei bei dem Namen das Komma durch einen Unterstrich ersetzt werden soll und ein ev. Leerzeichen entfernt werden soll.
findstr arbeitet nur zeilenweise, glaub da komme ich nicht weiter.
Die Daten in den Klammern sind nie die gleichen, also suchen nach (Inhalt in der Klammer) funktioniert nicht, auch die Anzahl der Zeichen zwischen den eckigen Klammern sind nie gleich in der Anzahl.
Später wird aus der Kombination nachname_vorname_123456 ein Verzeichnisordner erstellt in dem dann gezielt weitere Daten abgelegt werden.
Ich danke schonmal für Infos, Feedbacks oder Anschubser ;)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1602143423
Url: https://administrator.de/contentid/1602143423
Ausgedruckt am: 17.11.2024 um 03:11 Uhr
6 Kommentare
Neuester Kommentar
Wieso heutzutage noch Batch?
Besser gleich die Powershell mit Regex-Power nehmen ...
bzw. alternativ mit Select-String
@echo off
>"D:\datei_neu.txt" (for /f "usebackq tokens=2 delims=" %%a in ("D:\datei.txt") do (
set "txt=%%a"
set "txt=!txt:, =_!"
echo.!txt!
))
Get-Content "D:\datei.txt" | %{($_ -split '[\[\]]')[1] -replace ',\s*','_'} | set-content "D:\datei_neu.txt"
Select-String "D:\datei.txt" -Pattern '\[(.*)\]' | %{$_.Matches.Groups[1].Value -replace ',\s*','_'} | Set-Content "D:\datei_neu.txt"
Später wird aus der Kombination nachname_vorname_123456 ein Verzeichnisordner erstellt in dem dann gezielt weitere Daten abgelegt werden.
Wozu das ganze dann noch extra in eine weitere Textdatei schreiben?? Lässt sich doch direkt ohne so einen Zwischenschritt weiterverwenden, sowas hat man vielleicht 1980 gemacht aber heutzutage ehrlich gesagt Blödsinn.
Einfach "joinen"
(Get-Content "daten.dat" | %{($_ -split '[\[\]]')[1] -replace ',\s*','_'}) -join '_' | set-content "daten_neu.dat"