grisu84
Goto Top

Text in txt umformulieren

Hallo,

ich würde gerne mit einer Batch in einer *.txt eine Zeile automatisch umformulieren.

In der *.txt sind mehrer Zeilen enthalten. Die umzuformulierende Zeile sieht beispielhaft so aus:
einsatzschlagwort:#B1118#im Gebäude#Nachschau

Die Zeile fängt immer wie folgt an:
einsatzschlagwort:#

der nachfolgende Teil kann sich ändern.

nach dem Umformulieren soll Folgendes übrig bleiben:
einsatzschlagwort: B1118

Hat hier jemand einen Tipp für mich wie man das realisieren könnte?

Vielen Dank schon im Vorraus.

Viele Grüße

Content-Key: 665219

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: laster
laster Mar 29, 2021 at 06:44:45 (UTC)
Goto Top
Hallo,

ich würde dafür Python oder PowerShell nutzen, ansonsten gibt es dazu schon einige Beiträge, z.B. hier: Suchen ersetzen per batch in einer TXT

Wenn du nach "suchen und ersetzen" suchst wirst du auch x-fach fündig.

vG
LS
Member: colinardo
colinardo Mar 29, 2021 updated at 08:56:15 (UTC)
Goto Top
Servus @Grisu84,
wenn's plain Batch sein sollte
@echo off
chcp 1252 >nul
set "quelle=D:\quelle.txt"  
set "ziel=D:\ziel.txt"  
>"%ziel" (for /f "usebackq tokens=1,2 delims=#" %%a in ("%quelle%") do echo.%%a %%b)  
oder am besten gleich Powershell
$quelle = 'D:\quelle.txt'  
$ziel = 'D:\ziel.txt'  
(gc $quelle) -replace '^([^#]+)#([^#]+).*','$1 $2' | sc $ziel  
Kannst du übrigens auch gleich in Notepad++ leicht erledigen.

screenshot

screenshot

Grüße Uwe
Member: Grisu84
Grisu84 Mar 29, 2021 at 08:03:23 (UTC)
Goto Top
Hallo Uwe,
die Powershell funktioniert schon mal super.

Jetzt hätte ich noch zwei Änderungen, die vorgenommen werden sollen:

Im Laufe der *.txt kommt folgender Bereich dann noch

....
Einsatzmittel:16:15 FF ABC
16:15 FL ABC 40/1 Pressluftatmer (Gerät + Maske)
16:15 FL DEF 11/1 Pressluftatmer (Gerät + Maske)
16:15 FL GHI 21/1 Löschwasser
16:15 FL ABC 41/1 Schlauch (500m)
16:15 FL KLM 30/1 P
Einsatznummer:...

Hier sollen am Schluss nur die Zeilen übrig bleiben welche "FF ABC" oder "FL ABC". Noch dazu soll nach "Einsatzmittel" eine neue Zeile beginnen und die Uhrzeit verschwinden.

....
Einsatzmittel:
FF ABC
FL ABC 40/1 Pressluftatmer (Gerät + Maske)
FL ABC 41/1 Schlauch (500m)
Einsatznummer:...
Member: colinardo
colinardo Mar 29, 2021 updated at 08:54:17 (UTC)
Goto Top
$quelle = 'D:\quelle.txt'  
$ziel = 'D:\ziel.txt'  
$content = [regex]::replace((gc $quelle -raw),'(?ism)^(einsatzschlagwort:)#([^#]+)[^\r\n]*','$1 $2')  
[regex]::replace($content,'(?ism)(?<=^Einsatzmittel:)(.*?)(?=^Einsatznummer:)',{  
    param($m)
    "`r`n" + ((($m.Groups[1].Value -split "[\r\n]+") | ?{$_ -match 'F[LF] ABC'} | %{$_.split(' ',2)[1]}) -join "`r`n") + "`r`n"  
}) | sc $ziel
Kommt jetzt nochmal was? Salami-Taktik ... face-confused
Member: Grisu84
Grisu84 Mar 29, 2021 at 09:26:25 (UTC)
Goto Top
Das peinliche ist, ich finde immer mehr Sachen, die geändert werden müssten:

aus dem hier
einsatzort - hausnummer:7
einsatzort - hausnummer zusatz1:a
einsatzort - hausnummer zusatz2:1.OG

müsste das werden
einsatzort - hausnummer:7a, 1.OG

____

und in diesem Block
Schleifen Klartext: 28775 FF ABC Kleinalarm
28833 FF DEF (SIR)
13:44 28825 FF GHI
13:44 28826 FF GHI
13:44 28827 FF GHI
13:44 28710 KBM xy 3/3 (Info)
13:44 28703 KBI xy 3 (Info)
13:44 28701 KBR xy 1(Info)
28825 FF GHI (SIR)
28826 FF GHI
28827 FF GHI

soll das werden (sprich auch doppelte löschen
Schleifen Klartext:
FF ABC
FF DEF
FF GHI
KBM xy 3/3 (Info)
KBI xy 3 (Info)
KBR xy 1(Info)

wobei ich die den Block "Schleifen Klartext" auch noch in einer eigenen Datei gespeichert brauche.


Mein Problem ist, dass ich in PowerShell ganz und gar nicht durchblicke
Member: colinardo
colinardo Mar 29, 2021, updated at Apr 07, 2021 at 13:51:54 (UTC)
Goto Top
Das peinliche ist, ich finde immer mehr Sachen, die geändert werden müssten:
Dann sammle und prüfe erst mal alles und erteile dann einen Auftrag mit Lastenheft.

Irgendwann kommt der Zeitpunkt an dem man sich mal ein vernünftiges maschinenlesbares Ausgabeformat wie CSV oder XML überlegen sollte anstatt in einem wilden Mischmasch etwas vorhandenes zu ändern was hinterher doch wieder nur Kruscht wird.

Mein Problem ist, dass ich in PowerShell ganz und gar nicht durchblicke
Daran lässt sich jederzeit was ändern:

back-to-topPowershell Leitfaden für Anfänger

back-to-topPflichtlektüre
back-to-topErweiterte Grundlagen
back-to-topZusätzliche Ressourcen
Member: Grisu84
Grisu84 Mar 29, 2021 at 11:16:04 (UTC)
Goto Top
Ich verstehe deine Anmerkung.
Wir bekommen die Daten leider so von der Leitstelle übermittelt und müssen mit weiterarbeiten.

Eine letzte Sache käme zu den beiden anderen vorgenannten noch dazu, was ich aber nicht weiß, ob das überhaupt geht.

Dank deines Codes werden die Einsatzmittel bereits auf die FF ABC reduziert.

Jetzt kann es sein, dass hier zum Fahrzeug noch Gerätschaften aufgelistet sind (hier z.B. "Pressluftatmer (Gerät + Maske)" und "Schlauch (500m)"):
FL ABC 40/1 Pressluftatmer (Gerät + Maske)
FL ABC 41/1 Schlauch (500m)

Wenn ich diese in einer neuen Zeile zusammengefasst ausgegeben bekomme wäre genial. Hier ist es egal an welcher Position die Zeile eingefügt wird, kann also auch ganz am Schluss stehen.
 Geräte: Pressluftatmer (Gerät + Maske), Schlauch (500m)

Das wäre dann definitiv die letzte Umformung.