zizoudk
Goto Top

Textdatei in mehrere auftrennen inkl. Dateiname

Hallo,
ich bin ein totaler Neuling im Umgang und erstellen von Batchdateien.

Mein Problem ist, das ich eine Textdatei habe und die in mehrere Dateien(?.h, ?.c, ?.d usw.) auftrennen möchte.
Die Textdatei hat folgendes aussehen:

test.txt-----------
$ list konstants.h
Programmcode
$ list defs.d
Programmcode
$ list parameter.h
Programmcode
$

Ich hab mir die Batchdatei so vorgestellt:
1. nach „$ list “ suchen => ZeilenNR1
2. den Namen (z.B. parameter.h), der immer in der selben Zeile steht in die Variable Name speichern
3. nach dem nächsten „$ list “ suchen => ZeilenNR2
4. Neue Datei erstellen von (ZeilenNr1 + 1) bis (ZeilenNr2 - 1) mit dem Dateinamen Name (inkl. Dateiendung)
5. ZeilenNr1 = ZeilenNr2
6. und jetzt wieder ab Punkt 2 wiederholen

Kann mir dabei jemand helfen.
Super wäre es natürlich, wenn mir jemand eine Erklärung zur Batchdatei schreiben könnte, damit ich auch verstehe was ich da mache. Muss aber nicht sein! Nur wenn einer gerade Lust dazu hat.

Würde mich über zahlreiche Hilfe freuen, auch wenn es mir nur teilweise helfen kann.

Gruß ZizouDK

Content-Key: 62846

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

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

Member: miniversum
miniversum Jul 02, 2007 at 14:33:47 (UTC)
Goto Top
Also im ersten Ansatz würd ichs so lösen:
@echo off 

for /F "delims=" %%a in (test.txt) do call:doline "%%a"  
pause
goto:eof

:doline
set "line=%~1"  
if "%line:~0,7%" equ "$ list " (  
set "filename=%line:~7%"  
) else (
echo %line%>>"%filename%"  
)
goto:eof

Hier wird diese Datei Zeile für Zeile durchlaufen und an "doline" übergeben.
Dort wird geprüft ob die ersten 7 Zeichen der Zeile "$ list " lauten. Wenn ja wird der Teil danach als Dateiname genommen (%filename%). Wenn nein wird die ganze Zeile in die Datei geschrieben die als Dateiname gespeichert wurde (%filename%).

miniversum
Member: ZizouDK
ZizouDK Jul 02, 2007 at 18:27:29 (UTC)
Goto Top
Hi,
das ging aber schnell.
Erstmal Danke dafür.

Jetzt ist mir nur folgendes aufgefallen:
1) in der ersten Datei schreibt mir die Batchdatei in der zweiten Zeile "ECHO ist ausgeschaltet (OFF)."

2) Die Leerzeilen und die Zeilen in der nur eine Zahl steht werden nicht übernommen. Ist es möglich, dass diese auch noch in die neue Datei übernommen werden?

Gruß ZizouDK
Member: miniversum
miniversum Jul 03, 2007 at 06:35:48 (UTC)
Goto Top
Versuchs mal obs so geht:
@echo off 

for /F "tokens=1,* delims=:" %%a in ('findstr /n $ "test.txt"') do call:doline "%%b" "%%a"  
pause
goto:eof

:doline
set "line=%~1"  
if "%line:~0,7%" equ "$ list " (  
set "filename=%line:~7%"  
) else (
  if "%line%" equ "" (  
    echo.>>"%filename%"  
  ) else (
    echo %line%>>"%filename%"  
  )
)
goto:eof

miniversum
Member: ZizouDK
ZizouDK Jul 03, 2007 at 16:04:19 (UTC)
Goto Top
Hi,
leider kein Unterschied.

Gruß ZizouDK
Member: miniversum
miniversum Jul 03, 2007 at 16:33:23 (UTC)
Goto Top
Also ich habs mal bei mir ausprobiert und da gehts.
Poste mal bitte den Teil deiner test.txt andem es hängt. vielleicht sehe ich da dann das problem.

miniversum
Member: ZizouDK
ZizouDK Jul 04, 2007 at 15:11:12 (UTC)
Goto Top
Hi,
die richtige Datei hab ich nicht auf meinem Privaten PC, aber ich teste sie hier mit folgender test.txt:

test.txt ---------------
$ list parameter.h
/*11111111
1
11111
11111
111

$ list konstanten.c
222222222
2
2222


222

$ list prog.d
3333333333333
$ list variablen.h

44444444
4


44444444

4444
$

Danke für deine Mühe.

noch was anderes:
kannst du mir auch zufällig bei folgendem Problem helfen?
Kann ich über eine Batchdatei auch in das Programm HyperTerminal Befehle eintragen?
Hab mir das so vorgestellt:
Ich mach eine Batchdatei in der die Liste aller benötigten Dateien mit dem Befehl „list“ steht. Nach jeder Datei soll die Batchdatei pausieren und mit betätigen einer beliebigen Taste fortgesetzt werden.
list.bat -------------
@echo off
?? list konstants.h
pause
?? chd ..
?? list defs.d
pause

?? list parameter.h
pause
----------------------------------
Wie mach ich das?

Gruß ZizouDK
Member: miniversum
miniversum Jul 04, 2007 at 17:25:31 (UTC)
Goto Top
Zum ersten teil:
hab das Problem gefunden. Damit sollte es gehn:
@echo off 

for /F "tokens=1,* delims=:" %%a in ('findstr /n $ "test.txt"') do call:doline "%%b" "%%a"  
pause
goto:eof

:doline
set "line=%~1"  
if "%line:~0,7%" equ "$ list " (  
set "filename=%line:~7%"  
) else (
  if "%line%" equ "" (  
    echo. 1>>"%filename%"  
  ) else (
    echo %line% 1>>"%filename%"  
  )
)
goto:eof
Zum zweiten Teil:
Ne tut mir leid davon hab ich keine Ahnung wie und ob das mit dem Hyperterminal geht. Mach doch ein extra Posting draus.

miniversum
Member: ZizouDK
ZizouDK Jul 04, 2007 at 18:57:59 (UTC)
Goto Top
Hi,
Super. Funktioniert. Werd es gleich morgen mal mit den richtigen Daten ausprobieren.
Danke für deine Hilfe.

Gruß ZizouDK