chgs2011
Goto Top

Zeichen in TXT Textdatei suchen und mehrzeiligen Text anhängen

Hallo,

leider benötige ich wieder etwas Hilfe, da dieser Anwendungsfall für mich noch etwas zu hoch ist.

Das Suchen und Ersetzen von Zeichen in Dateien würde ich hinbekommen, aber die Anforderung ist etwas komplexer.


- ALLE Dateien beinhalten einen individuellen Text
- ALLE Dateien besitzen eine leere letzte Zeile
- ALLE Dateien besitzen eine vorletzte Zeile mit einem Ausrufezeichen "!"


Aufgabe:
Es soll im Grunde die Zeile mit "!" ermittelt werden, aus Sicherheitsgründen.
Anschließend soll in der Zeile davor ein "\" hinzugefügt werden, sowie weitere 3 Zeilen Text.


Beispiel Textdatei:
mein Text;\
mein Text;\
mein Text;
!


Ergebnis sollte so aussehen:
mein Text;\
mein Text;\
mein Text;\
weitere Zeile Text;\
weitere Zeile Text;\
!

Danke für Hilfe

Content-ID: 422595

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

Ausgedruckt am: 08.11.2024 um 05:11 Uhr

138810
138810 27.02.2019 um 11:25:37 Uhr
Goto Top
PS
(gc 'c:\datei.txt' -raw) -replace '[\r\n]+!\Z',"\`r`nweitere Zeile;\`r`nund noch eine;\`r`n!" | sc 'c:\datei_neu.txt'  
chgs2011
chgs2011 27.02.2019 aktualisiert um 14:41:25 Uhr
Goto Top
Danke, ein typischer PowerShell Einzeiler face-big-smile

Ich darf leider nur Batch nutzen face-sad
138810
138810 27.02.2019 aktualisiert um 17:24:27 Uhr
Goto Top
Zitat von @chgs2011:
Ich darf leider nur Batch nutzen face-sad
Wow, rückständig hoch drei... Hindert dich doch keiner dran das inne Batch reinzupacken ...
@echo off
Powershell -Executionpolicy ByPass -Command "(gc 'c:\datei.txt' -raw) -replace '[\r\n]+!\Z',\"\`r`nweitere Zeile;\`r`nund noch eine;\`r`n!\" | sc 'c:\datei_neu.txt'"  

Gestellte Hausaufgaben der Berufsschule machst du in Zukunft bitte selber. Manohman ist das hier ein Verein...
chgs2011
chgs2011 27.02.2019 um 17:27:50 Uhr
Goto Top
Das ist alles richtig, aber bei uns ist PowerShell generell geblockt, aus Sicherheitsgründen!
138810
138810 27.02.2019 um 17:40:05 Uhr
Goto Top
Zitat von @chgs2011:

Das ist alles richtig, aber bei uns ist PowerShell generell geblockt, aus Sicherheitsgründen!
Der war gut 😀😀😀😀
chgs2011
chgs2011 27.02.2019 um 20:01:37 Uhr
Goto Top
Man sollte nicht urteilen, wenn man die Umgebung/Anforderung nicht kennt.

Vielleicht kann mir jemand in Sachen Batch helfen?
138810
138810 27.02.2019 aktualisiert um 23:30:45 Uhr
Goto Top
Du brauchst nur eine For-Schleife und findstr. Jetzt bist du dran.
chgs2011
chgs2011 28.02.2019 um 08:13:49 Uhr
Goto Top
Bitte künftig vorher die Frage vollständig lesen, danke.
138810
138810 28.02.2019 aktualisiert um 11:27:31 Uhr
Goto Top
Zitat von @chgs2011:

Bitte künftig vorher die Frage vollständig lesen, danke.
Ja nee ist klar. For Schleife und findstr ist Batch min Jung! Und wenn du nicht in der Lage bist mit den Hinweisen zumindest die Grundlagen dazu zu googlen bist du hier falsch.
Tutorial zur FOR-Schleife
Das ist ein Administrator-Forum kein Hausaufgabenforum.
Pedant
Pedant 28.02.2019 um 11:43:04 Uhr
Goto Top
Hallo chgs2011,

Wie wäre es mit einer For-Schleife und type?

Codeskizze:
For zeileninhalt (type datei) do (
	if zeileninhalt=="!" (
			echo zweitere Zeile Text;\>>neuedatei.txt
			echo zweitere Zeile Text;\>>neuedatei.txt
			echo !>>neuedatei.txt
			)
	else (
		if not zeileninhalt_letztesZeichen=="\" (echo zeileninhalt\>>neuedatei.txt)
		else (echo zeileninhalt>>neuedatei.txt)
		)
	)
echo(>>neuedatei.txt

Gruß Frank
chgs2011
chgs2011 06.03.2019 um 10:49:29 Uhr
Goto Top
Danke für den Ansatz Frank, woher weis aber das Batch nun, welche Zeilen und welcher individuelle Text bearbeitet werden muss?

Das Batch soll die Zeilennummer ermitteln, in dem kein "\" vorkommen, dort eines anfügen und 2 weitere Zeilen direkt anhängen.

Test läuft leider nicht durch, erhalte auch keine Fehlermeldung.
Pedant
Pedant 06.03.2019 um 11:28:12 Uhr
Goto Top
Hallo chgs2011,

Zitat von @chgs2011:
Das Batch soll die Zeilennummer ermitteln, in dem kein "\" vorkommen, dort eines anfügen und 2 weitere Zeilen direkt anhängen.
wozu sollte die Batch die Zeilennummer ermitteln?

Mein Ansatz ist etwas anders:
Es wird geprüft, ob eine Zeile mit einem Backslash endet und falls nicht wird ein Backslash angehängt.
Das wird für alle Zeilen ausgeführt, es sei denn die Zeile bestünde lediglich aus einem Ausrufezeichen.
In dem Fall wird ein Ausrufezeichen ausgegeben, aber zuvor werden zwei zusätzliche Zeilen ausgegeben.
Der Unterschied ist also:
Nicht zwei Zeilen nach "ohne Backslash", sondern zwei Zeilen vor "nur Ausrufezeichen" einfügen.
Im Ergebnis sollte das aber keinen Unterschied machen.

Zitat von @chgs2011:
Test läuft leider nicht durch, erhalte auch keine Fehlermeldung.
Bei mir läuft nicht mal ein Test, erhalte aber auch keinen Quellcode von Dir.

Gruß Frank
chgs2011
chgs2011 11.03.2019 um 13:34:08 Uhr
Goto Top
OK, wäre so natürlich eleganter ... wie gesagt läuft das Script bei mir leider nicht, um es zu testen.

Was meinst du mit Quellcode?
Oben habe ich diesen doch abgelegt "vorher" und "nachher" face-smile
Pedant
Pedant 11.03.2019 um 13:49:32 Uhr
Goto Top
Hallo chgs2011,

Zitat von @chgs2011:
Oben habe ich diesen doch abgelegt "vorher" und "nachher" face-smile
Das sind Beispiele für Deine Quell- und Zieldatei, nicht der Quellcode.

Zitat von @chgs2011:
OK, wäre so natürlich eleganter ... wie gesagt läuft das Script bei mir leider nicht, um es zu testen.

Was meinst du mit Quellcode?
Genau das Script meine ich, das bei Dir nicht läuft.
Wenn Du uns nicht zeigst was Du programmiert hast, wie sollen wir dann sehen können wo Deine Fehler liegen und was Du ändern musst, damit es läuft?

Gruß Frank