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-Key: 43771

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

Printed on: April 25, 2024 at 13:04 o'clock

Member: AxelHahn
AxelHahn Nov 06, 2006 at 11:19:33 (UTC)
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 =-
Member: Escobar
Escobar Nov 06, 2006 at 11:34:05 (UTC)
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
Member: Ruebezahl
Ruebezahl Nov 06, 2006 at 15:25:18 (UTC)
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
Member: Biber
Biber Nov 06, 2006 at 17:34:54 (UTC)
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.
Member: Ruebezahl
Ruebezahl Nov 08, 2006 at 10:08:30 (UTC)
Goto Top
Hallo Biber,


ich habe Deine Änderungen getestet - es funktioniert prima.

Vielen Dank für Deine Mühe!


Herzlich Grüße
Ruebezahl
Member: Biber
Biber Nov 08, 2006 at 10:13:31 (UTC)
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