florianhh
Goto Top

Inhalt einer .txt-Datei kopieren und dazu 8 Zeilen umbenennen

Hallo,
ich bin absoluter Neuling bei der Batch-Programmierung und hoffe ihr könnt mir helfen face-smile.
Ich möchte folgendes realisieren:

Ich habe eine .txt-Datei (test.txt) welche ungefähr 1,5 MB groß ist und um die 3000 Zeilen hat.

In dieser Datei sind 8 Zeilen die ich umbenennen muss.
Diese 8 Zeilen sind aber nicht immer an der gleichen Position in der Datei. (Mal in Zeile 5-12, mal 8-15 usw.)

In der Ausgangsdatei (test.txt) haben sie immer den gleichen Namen.
In der neuen Datei (neu.txt) ist der Name auch fest definiert.


So sieht z.B. ein Ausschnitt der Text-Datei aus, die ich bearbeitet haben möchte:

# DE0000101010100000000000000001101 DE0000101010100000000000000001101 1-1:2.9.1 Standort1
# DE0010101010100000000000011001916 DE0010101010100000000000011001916 1-1:1.9.1 Standort2
# DE0002020202000000000000000000798 Kabel 630, Eingang 1 1-1:3.9.1 Standort3.1
# DE0000202020200000000000000000798 Kabel 630, Eingang 1 1-1:4.9.1 Standort3.2
# DE0003030303000000000000000000798 Kabel 630, Eingang 1 Standort3.3
# DE0000303030300000000000000000798 Kabel 630, Eingang 1 Standort3.4
# DE0004040404000000000000000000799 Kabel 631, Eingang 2 1-1:3.9.1 Standort4.1
# DE0000404040400000000000000000799 Kabel 631, Eingang 2 1-1:4.9.1 Standort4.2
# DE0005050505000000000000000000799 Kabel 631, Eingang 2 Standort4.3
# DE0000505050500000000000000000799 Kabel 631, Eingang 2 Standort4.4
# DE0006060606000000000000011004973 DE0006060606000000000000011004973 1-1:1.9.1 Standort5
# DE0000606060600000000000011047601 DE0000606060600000000000011047601 1-1:1.9.1 Standort6
# DE0007070707000000000000011048154 DE0007070707000000000000011048154 1-1:1.9.1 Standort7


Und so soll die Text-Datei nach dem durchlaufen der Batch-Datei aussehen:
# DE0000101010100000000000000001101 DE0000101010100000000000000001101 1-1:2.9.1 Standort1
# DE0010101010100000000000011001916 DE0010101010100000000000011001916 1-1:1.9.1 Standort2
# DE0002020202000000000000000000798 DE0002020202000000000000000000798 1-1:3.9.1 Standort3.1
# DE0000202020200000000000000000798 DE0000202020200000000000000000798 1-1:4.9.1 Standort3.2
# DE0003030303000000000000000000798 DE0003030303000000000000000000798 Standort3.3
# DE0000303030300000000000000000798 DE0000303030300000000000000000798 Standort3.4
# DE0004040404000000000000000000799 DE0004040404000000000000000000799 1-1:3.9.1 Standort4.1
# DE0000404040400000000000000000799 DE0000404040400000000000000000799 1-1:4.9.1 Standort4.2
# DE0005050505000000000000000000799 DE0005050505000000000000000000799 Standort4.3
# DE0000505050500000000000000000799 DE0000505050500000000000000000799 Standort4.4
# DE0006060606000000000000011004973 DE0006060606000000000000011004973 1-1:1.9.1 Standort5
# DE0000606060600000000000011047601 DE0000606060600000000000011047601 1-1:1.9.1 Standort6
# DE0007070707000000000000011048154 DE0007070707000000000000011048154 1-1:1.9.1 Standort7


Dort wo im oberen Ausschnitt Kabel 630/631 Eingang 1/2 steht muss stattdessen der Code der direkt davor steht nochmal stehen.

IST:
# DE0002020202000000000000000000798 Kabel 630, Eingang 1 1-1:3.9.1 Standort3.1

SOLL:
# DE0002020202000000000000000000798 DE0002020202000000000000000000798 1-1:3.9.1 Standort3.1


Der gesamte Rest der Datei ist aber auch wichtig und muss komplett mit kopiert werden, so dass die neue Datei genau den gleichen Inhalt darstellt wie die alte, aber mit den 8 geänderten Zeilen.


Ich habe leider noch keinen genauen Ansatz und hoffe ich habe mich verständlich ausgedrückt und dass ihr mir helfen könnt!

Vielen Dank schonmal im Voraus!

Content-Key: 162583

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: Edi.Pfisterer
Edi.Pfisterer Mar 14, 2011 at 11:52:05 (UTC)
Goto Top
Hallo!
Nachdem Dir nach einigen Stunden immer noch niemand geantwortet hat, vermute ich mal, dass es daran liegt, dass Deine Fragestellung etwas unklar ist...

evtl könntest Du (evtl. vernünftig formatiert mit < code > bzw. nach dem Ende < / code > - nat. ohne lerrzeichen) einige Zeilen deiner test.txt posten und anschließend daran, wie das Teil nach der bearbeitung aussehen soll...
bzw.: woran erkennt man die von Dir gesuchten Zeilen???

lg
Member: FlorianHH
FlorianHH Mar 14, 2011 at 12:18:43 (UTC)
Goto Top
Hallo,

Erstmal danke für die Antwort und den Tipp!

Habe meinen Beitrag editiert und erweitert.

Hoffe es ist jetzt verständlicher was ich erreichen möchte face-smile

lg
Member: FlorianHH
FlorianHH Mar 14, 2011 at 13:16:26 (UTC)
Goto Top
Keiner eine Idee oder einen Tipp?

Oder ist meine Fragestellung immernoch zu unklar vielleicht?

Ich hoffe doch sowas ist überhaupt möglich mit einer Batch was ich da vor habe zu realisieren...
Member: pieh-ejdsch
pieh-ejdsch Mar 14, 2011 at 13:25:36 (UTC)
Goto Top
moin FlorianHH,

klar ham wir nen Tipp oder noch besser gleich die passende Batch.

@echo off&setlocal disabledelayedexpansion

set "Datei=Datei.txt"  
set "Ausgabe=Datei2.txt"  

set "Suche=Eingang"  
set "Suche2=Kabel"  
set "Ersetzen=!line:~0,36!!line:~2,33!!line:~56!"  

findstr /n "%Suche%" "%Datei%"|findstr "%Suche2%">"%temp%\Suche"  
findstr /n "^" "%Datei%">"%temp%\Numbered"  
for /f "usebackq delims=:" %%i in ("%temp%\Suche") do (  
	if defined Firstline for /f %%j in ('set /a "A = %%i - BeforeLine"') do (  
		if %%j equ 1 (
			for /f %%k in ('set /a "A = %%i - Firstline"') do (  
				if %%k equ 7 set "Lastline=%%i"  
				if %%k equ 8 set "Firstline="&set "Lastline="  
			)
		) else if not defined Lastline set "Firstline="  
	)
	if not defined FirstLine set "Firstline=%%i"  
	set "BeforeLine=%%i"  
)
(
for /f "usebackq delims=" %%i in ("%temp%\Numbered") do (  
	set "Line=%%i"  
	setlocal enabledelayedexpansion
	for /f "delims=:" %%j in ("%%i") do (  
		if %%j geq %Firstline% if %%j leq %lastline% (
			set "Line=!Line:*:=!  
			set "Line=%Ersetzen%"  
			echo.!Line!
			set "OK=1"  
		)
		if not defined OK (
			set "Line=!Line:*:=!  
			echo.!Line!
	)	)
	endlocal

)
)>"%Ausgabe%"  

Gruß Phil
Member: FlorianHH
FlorianHH Mar 14, 2011 at 13:30:23 (UTC)
Goto Top
wow....

Das war mein erster Gedanke eben :D

Habs direkt ausprobiert und es funktioniert einwandfrei !!!

Vielen, vielen Dank Phil !!!
Member: pieh-ejdsch
pieh-ejdsch Mar 14, 2011 at 13:35:22 (UTC)
Goto Top
setzt Du dann Bitte noch die Frage auf gelöst mit dem grünen Hacken

Danke

Gruß Phil