syntax
Goto Top

Textdokument per BATCH-Datei trennen

Textdokument per BATCH-Datei trennen

Hallo,
ich bräuchte eine kleine Hilfe zum thema BATCH-Datei. Ich muss eine Textdatei in mehrere Dateien aufsplitten.
Meine textdokument sieht ungefähr so aus:

Anfang1 Datum_Zeit_ID
ID: DATEINAME.DAT
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
Ende1_Zeichenkette
Anfang2 Datum_Zeit_ID
ID: DATEINAME.DAT
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
DATA DATA DATA DATA DATA
Ende2_Zeichenkette
usw..... bis ca. 20

Meine Batchdatei soll nun von Anfang1 bis Ende1 jede Zeile in eine neue Textdatei schreiben.
Sobald man bei Ende1 angekommen ist, soll er die neu erstellte datei schließen und mit dem Dateinamen
der unter ID: steht abspeichern. Dannach soll er weitermachen (von Anfang2 bis Ende2...)
Es können mehr als 2 Dateien in einer stehen. Desshalb muss ich Sie auftrennen um an die
"ursprünglichen" Dateien mit dem richtigen Dateinamen (der unter ID: steht) zu kommen.
Das eigentliche auslesen der einzelnen zeilen konnte ich mit FOR/F realisieren.
Aber wie kann ich meiner Batchdatei sagen das er nach Ende1 eine neue Datei erstellen soll
(mit Inhalt von Anfang2-Ende2...usw.)

Ich hoffe Ihr könnt mir ein wenig helfen. Ich erwarte keine komplette Batchdatei als Hilfe,
nur einen kleinen Lösungsansatz;D

Ich danke euch

mfg
sYntaX

Content-Key: 29235

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

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: docsam
docsam 29.03.2006 um 13:55:00 Uhr
Goto Top
mit FOR kannst Du eine Datei zeilenweise auslesen.
Schau Dir mal die Hilfe mit for /? an.

Eine direkte Lösung hab ich jetzt nicht parrat.
Mitglied: sYntaX
sYntaX 29.03.2006 um 17:13:59 Uhr
Goto Top
Danke, aber das auslesen der einzelnen zeilen stellt ja kein problem dar.
Das ist mit FOR /F realisiert. den Dateinamen kann ich auch herrausfiltern.
Das Problem besteht darin das er am ende des ersten ausgelesenen
Datei-Teils eine neue Datei mit dem nächsten Dateinamen erstellen muss...

Oder besteht die Möglichkeit bestimmte zeilen aus einer Datei zu löschen? Mittels
einer Batchdatei meine ich natürlich?!!

Über weitere hilfen wäre ich sehr sehr dankbar....

mfg
sYntaX
Mitglied: Biber
Biber 29.03.2006 um 19:04:21 Uhr
Goto Top
Moin sYntaX,

wir hatten in "Batch & Shell" schon mal eine recht ähnliche Herausforderung hier Logfile letzten Zeilen in Txt File mit Batch

Ich denke, da sind ein paar Strategien drin - sonst poste bitte noch mal.

Gruß
Biber

P.S. Öhm...ist es denn sinnvoll, diese "große" Datei DAUERHAFT in "Tages"-Dateien oder was auch immer das Kriterium sein mag zu splitten?
Du könntest den Batch doch auch so konzipieren, dass er mit der Syntax "ExtractFromTxt AnfangsKrit [EndeKriterium]" arbeitet? Und erst dann, wenn einer fragt, die Daten vom 27.9. extrahiert auf Bildschirm oder Datei?
Mitglied: sYntaX
sYntaX 30.03.2006 um 09:51:23 Uhr
Goto Top
Danke schon mal für die Antwort. Ich werde mich wenn ich gleich Zeit habe mal
mit der anderen herrausforderung beschäftigen. Vielleicht kann ich da ja ein paar
Tricks für mich rausholen;D

Zu deiner frage:
Wir bekommen diese Dateien so zugeschickt.Lässt sich leider net ändern face-sad
Zu weiteren Bearbeitung muss diese Datei in die einzelnen Dateien gesplittet werden.
Das Ursprungsfile ist Quasi nur ein DateiContainer der einzelne Dateien enthält
(und Ihren ursprünglichen Dateinamen)
die durch einen bestimmten header voneinander getrennt sind.
mir ist grad mal ne Idee gekommen. Wenn ich eine Lösung für mein problem gefunden habe
werde ich es mal posten.

merci&Cya
sYntaX
Mitglied: sYntaX
sYntaX 05.04.2006 um 10:05:10 Uhr
Goto Top
Also ich habe mein Problem mit dem einen oder anderen Umweg gelöst.
Es ist wahrscheinlich nicht die sauberste Lösung für das Problem, aber eine definitiv funktionierende:

@echo off & setlocal EnableDelayedExpansion
set dname=
echo Bitte geben Sie den Dateinamen ein:
echo.
set /P dname=
set counter=0
set anzahl=0
for /F "tokens=1* delims=" %%a IN (%dname%) DO (
echo %%a >> !counter!.txt
echo %%a >> temp.tmp
for /F "tokens=1,2* delims=+" %%i IN (temp.tmp) DO (
if %%i=='UNZ (
echo !anzahl!.txt >> anzahl.tmp
set /a counter=counter+1
set /a anzahl=anzahl+1
)
del temp.tmp
)
)
set /a anzahl=anzahl-1
for /F %%y IN (anzahl.tmp) DO (
for /F "tokens=1,2*" %%m IN (%%y) DO (
if %%m==ID: (
rename %%y %%n
)
)
)
del anzahl.tmp
endlocal
cls
Echo Folgende Dateien wurden erstellt:
Echo.
dir /B *.DAT


Wenn es jemanden interessiert würde ich die einzelnen zeilen auch kommentieren.
jetzt muss ich aber erst mal auf der Arbeit meine 7 Sachen packen.
ein Abteilungswechsel steht an;D

mfg
sYntaX