ruebezahl
Goto Top

Teil einer Textdatei in eine andere Datei schreiben

Liebe Leute,


wer kennt eine elegante Möglichkeit, in einer Textdatei_A ab einem bestimmten Suchbegriff_1 nach einem Suchbegriff_2 zu suchen? Wenn dieser Suchbegriff_2 vorkommt, soll alles ab dem Suchbegriff_1 bis zum Ende dieser Datei in eine neue Textdatei_B geschrieben werden.

Diese Batch-Datei soll keine externen Programme verwenden und unter
Windows 2000 / 2003 lauffähig sein.


Vielen Dank für Eure Mühe

Herzliche Grüße
Ruebezahl

Content-ID: 43771

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

Ausgedruckt am: 20.11.2024 um 13:11 Uhr

AxelHahn
AxelHahn 06.11.2006 um 12:19:33 Uhr
Goto Top
Hallo Ruebezahl


Ich würde in der Textdatei die Zeilennummer von Begriff1 als auch 2 suchen.
Wenn Zeilennummer2 > Zeilennummer1 dann Textdatei ab Zeile X anzeigen und in eine neue Textdatei umleiten.

Ich habe gerade nicht soviel Zeit zum Ausprobieren. Daher nur Codeschnipselchen, die du zum Zusammenbau bräuchtest:

Zeilennummer anzeigen: findstr /n "Suchbegriff" "[Dateiname]"
Textfile ab bestimmter Zeile anzeigen: more +"Zeilenanzahl" "[Dateiname]"


Viele Grüsse
-= Axel =-
Escobar
Escobar 06.11.2006 um 12:34:05 Uhr
Goto Top
hier mal ein script, welches eine section aus einer ini rausholt. du musst dieses script nur sinnvoll zusammenkuerzen, dann haste es.

@echo off

REM Param 1: Pfad zur IniDatei
REM Param 2: Pfad zur ErgDatei
REM Param 3: Name der gesuchten Section

set backupini=%1
set ErgFile=%2
set SectionName=%3
set TempFile=iniExtTemp.mbfr
set inGesHeader=0
set inGesSection=0
set inHeader=0
set Zeile=0

del %ErgFile% >NUL >NUL
del %TempFile% >NUL >NUL 

for /F "tokens=1 delims=" %%f in (%backupini%) DO (set Zeile=%%f & call:[BearbeiteZeile])  

:[BearbeiteZeile]
echo %Zeile%>%TempFile%
findstr "[" %TempFile% >NUL  
if %errorlevel%==0 set inHeader=1 & set inGesSection=0 & set inGesHeader=0
findstr "/C:%SectionName%" %TempFile% >NUL  
if %errorlevel%==0 set inGesHeader=1
findstr "REM " %TempFile% >NUL  
if %errorlevel%==0 set inGesSection=0
if %inGesSection%==1 echo %Zeile% >> %ErgFile%
if %inGesHeader%==1 set inGesSection=1

:EOF
del %TempFile% >NUL

Esco
Ruebezahl
Ruebezahl 06.11.2006 um 16:25:18 Uhr
Goto Top
Liebe Leute,

ausgehend von Axels Idee habe ich mal Folgendes zusammengebaut
und mit ein paar Erläuterungen versehen:

@ECHO off
SETLOCAL

REM Ersten Suchbegriff finden (dieser Begriff taucht immer irgendwo auf)
FOR /f  "delims=:" %%i IN ('FINDSTR /n /c:Suchbegriff_1 Textdatei_A') DO SET /a zahl=%%i  

REM Zeilenzahl um 1 zurücksetzen, damit Suchbegriff_1 in der Ausgabedatei erscheint
SET /a zahl=%zahl%-1
REM Textdatei_A ab Suchbegriff_1 in Textdatei_B schreiben
MORE +%zahl% Textdatei_A > Textdatei_B

REM Zweiten Suchbegriff finden
FOR /f %%i IN ('FINDSTR /c:Suchbegriff_2 Textdatei_B') DO GOTO weiter  

REM wenn zweiter Suchbegriff nicht gefunden, Textdatei_B löschen
DEL Textdatei_B /f > nul
GOTO eof

:weiter
REM weitere Verarbeitung

:eof

So funktioniert es... Wenn jemand andere Vorschläge hat, so sind diese herzlich willkommen.
Vielen Dank an Axel und Escobar für ihre Ideen.

Herzliche Grüße
Ruebezahl
Biber
Biber 06.11.2006 um 18:34:54 Uhr
Goto Top
Moin Bätchler,

ich setze einfach diesen Thread auf gelöst... da können höchstens noch Spitzfindigkeiten ergänzt werden.

Die einzige Spitzfindigkeit, die ich noch anzumerken hätte:
Wenn die Textdaten nun nicht gerade größer sind als die Hälfte des virtuellen Arbeitsspeichers, dann kann auf das Zwischenspeichern in einer Datei_B verzichtet werden.

@ECHO off
SETLOCAL

REM Ersten Suchbegriff finden (dieser Begriff taucht immer irgendwo auf)
FOR /f  "delims=:" %%i IN ('FINDSTR /n /c:Suchbegriff_1 Textdatei_A') DO SET /a "zahl=%%i - 1"  
REM Zeilenzahl um 1 zurücksetzen, damit Suchbegriff_1 in der Ausgabedatei erscheint
REM Zweiten Suchbegriff finden ... Textdatei_A ab Suchbegriff_1 an MORE und FINDSTR weiterreichen..
FOR /f %%i IN ('MORE +%zahl% Textdatei_A^|FINDSTR /c:Suchbegriff_2') DO GOTO weiter  
goto :eof

:weiter
REM weitere Verarbeitung

:eof ----------------- die Marke ":eof" braucht nicht unbedingt angegeben werden, die ist hart verdrahtet in der CMD.exe 

Aber das sind, wie geschrieben, nur kosmetische Anmerkungen.
Vielen Dank allen

Grüße
Biber
P.S. @Ruebezahl: Habe Deinen Code auf umformatiert.
Ruebezahl
Ruebezahl 08.11.2006 um 11:08:30 Uhr
Goto Top
Hallo Biber,


ich habe Deine Änderungen getestet - es funktioniert prima.

Vielen Dank für Deine Mühe!


Herzlich Grüße
Ruebezahl
Biber
Biber 08.11.2006 um 11:13:31 Uhr
Goto Top
Moin Rübezahl,

danke für die Rückmeldung.

Ich setze diese Gemeinschaftslösung mal auf geschlossen.

Herzliche Grüße zurück
Biber