andreas72
Goto Top

In vielen Textfiles bestimmte Zeile kopieren, verändern und doppelt an den Anfang stellen

Hallo zusammen,

bei einer Datenmigration habe ich ca. 2000 Textfiles, die ich für den Import bearbeiten muß nach folgendem Muster: Eine Zeile innerhalb der Datei mit "date: " am Anfang muß kopiert werden und dann mit "date1: " die erste und zweite Zeile der Datei darstellen. Also:
vorher:
(...)
date Sun, 25.08.13
(...)
nachher:
date1: Sun, 25.08.13
date1: Sun, 25.08.13
(...)
date: Sun, 25.08.13
(...)

Die Zeile "date" ist immer in einer unterschiedlichen Zeile, aber nur einmal innerhalb einer Datei.

Mit den beantworteten Fragen in dem Forum habe ich es bis zu:
date1: date1:
(...)
date: Sun, 25.08.13
(...)
gebracht. Da ich aber keine Batch oder VB Kenntnisse habe, komme ich jetzt nicht weiter.

Könnt Ihr mir bitte helfen ?
Danke
Andreas

Content-Key: 215176

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

Printed on: April 18, 2024 at 23:04 o'clock

Member: bastla
bastla Aug 24, 2013 updated at 22:51:20 (UTC)
Goto Top
Hallo Andreas72 und willkommen im Forum!

Das könnte etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Dein Ordner"  
set "Suche=date"  

set "T=%temp%\tmp.txt"  
for /f "delims=" %%i in ('dir /b/a-d "%Ordner%\*.txt"') do call :ProcessFile "%Ordner%\%%i"  
del "%T%"  
goto :eof

:ProcessFile
set "Zeile="  
for /f "delims=" %%a in ('findstr /ib "%Suche%" %1') do set "Zeile=%%a"  
if not defined Zeile (
    echo "%Suche%" in Datei %1 nicht gefunden  
    goto :eof
)
move %1 "%T%"  
 >%1 echo(%Zeile%
>>%1 echo(%Zeile%
>>%1 type "%T%"  
goto :eof
Bitte zunächst nur auf Testdaten loslassen ... face-wink

Grüße
bastla
Member: Andreas72
Andreas72 Aug 25, 2013 at 18:40:49 (UTC)
Goto Top
Hallo bastla,
danke für die schnelle Antwort, hatte sie auch vergangene Nacht noch ausprobiert. Ich hatte dabei festgestellt, daß meine Daten etwas anders ausschauen als gedacht, den Suchstring angepaßt und es läuft prima. Allerdings müssen die beiden "date", die dann am Dateianfang zu stehen kommen, noch in "Datum" umbenannt werden. Ich hatte zwar aus anderen Ersetzen-Fragen Quelltext ausprobiert (hinter Zeile 19 einkopiert), und dann kam nur heraus:

Datum: Datum:
(...)
date: Sun, 25.08.13
(...)

Wie muß ich eine Ersetzen-Funktion machen ?
Zusatzfrage: Welche Funktion hat die offene Klammer in den Zeilen 18 und 19 ? Ohne diese lief es auch (ich habe mit dem Quelltext ein wenig experimentiert face-wink ).

Viele Grüße.

Andreas
Member: bastla
bastla Aug 25, 2013, updated at Aug 26, 2013 at 05:37:23 (UTC)
Goto Top
Hallo Andreas72!

Wenn sich nach dem "date" am Zeilenanfang ein Leerzeichen befinden sollte, wäre das ganz einfach so zu lösen:

Zeile 12
for /f "tokens=1*" %%a in ('findstr /ib "%Suche%" %1') do set "Zeile=%%b"
Zeile 18 (Zeile 19 analog):
 >%1 echo Datum: %Zeile%
Ansonsten kannst Du in der Variablen %Zeile% "date" so durch "Datum" ersetzen (allerdings bei mehrfachem Auftreten dann jedes Vorkommen):
set "Zeile=%Zeile:date=Datum%"
Zusatzfrage: Welche Funktion hat die offene Klammer in den Zeilen 18 und 19 ? Ohne diese lief es auch
Die Klammer (könnte auch zB "." oder "\" sein) nach dem "echo" stammt noch aus einem ersten Ansatz und hatte nur den Zweck, die Ausgabe einer Leerzeile zu ermöglichen, falls die gesuchte Zeile nicht gefunden worden wäre - sie schadet zwar weiterhin nicht, kann aber, wenn ohnehin sichergestellt ist, dass es die "date"-Zeile in der Datei gibt, genauso wie die Zeilen 11 und 13 - 16 entfallen ...

Grüße
bastla
Member: Andreas72
Andreas72 Aug 25, 2013 updated at 21:47:59 (UTC)
Goto Top
Hallo bastla,
vielen Dank, es klappt nun damit. Einfacher als gedacht face-smile . Ich spiele mich mal mit der Lösung kommende Woche und falls ich noch Nachfragen habe, melde ich mich nochmal. Diese Frage markiere ich mit "gelöst".

Grüße.

Andreas