Immer 34 Zeilen auslesen, dann Leerzeile, nächste 34 Zeilen usw.
Hallo und guten Tag !
Ich möchte die ersten 34 Zeilen einer .txt - Datei per Batch in eine Zeile schreiben, dann die nächsten 34 Zeilen usw.
Dann muss ein Zeilenumbruch her bzw. eine Leerzeile.
Falls jemand von Euch diesbezüglich eine Lösung hat, würde ich mich freuen, wenn er mir die Lösung hier mitteilt.
Vielen Dank für Euer Interesse und evtl. Hilfe schon mal im voraus.
Ich möchte die ersten 34 Zeilen einer .txt - Datei per Batch in eine Zeile schreiben, dann die nächsten 34 Zeilen usw.
Dann muss ein Zeilenumbruch her bzw. eine Leerzeile.
Falls jemand von Euch diesbezüglich eine Lösung hat, würde ich mich freuen, wenn er mir die Lösung hier mitteilt.
Vielen Dank für Euer Interesse und evtl. Hilfe schon mal im voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 109227
Url: https://administrator.de/forum/immer-34-zeilen-auslesen-dann-leerzeile-naechste-34-zeilen-usw-109227.html
Ausgedruckt am: 23.12.2024 um 05:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo RobertB!
Soferne nicht irgendwelche Sonderzeichen (wie "&", "<", etc) dazwischenfunken, sollte das etwa so gehen:
Falls zwischen die einzelnen Zeilen ein Trennzeichen gesetzt werden soll, dieses nach dem "=" in Zeile 5 eintragen, und falls doch keine Leerzeile benötigt wird, die Zeile 17 ersatzlos streichen.
Grüße
bastla
Soferne nicht irgendwelche Sonderzeichen (wie "&", "<", etc) dazwischenfunken, sollte das etwa so gehen:
@echo off & setlocal
set "Ein=D:\Daten.txt"
set "Aus=D:\DatenNeu.txt"
set /a Anzahl=34
set "Delim="
if exist "%Aus%" del "%Aus%"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%j" & call :ProcessFile %%i
goto :eof
:ProcessFile
set /a KeinUmbruch=%1 %% Anzahl
if %KeinUmbruch% gtr 0 (
>>"%Aus%" <nul set /p "=%Zeile%%Delim%"
) else (
>>"%Aus%" echo %Zeile%
>>"%Aus%" echo\
)
goto :eof
Grüße
bastla
Hallo RobertB!
Dann vielleicht so:
Wenn Du weiterhin Fehlermeldungen erhältst, das "echo off" auf "echo on" ändern und den Batch direkt von der Kommandozeile starten - so wird jeder Befehl vor der Ausführung zunächst angezeigt.
Spätestens wenn sich herausstellt, dass eine ungerade Anzahl von Leerzeichen in einer Zeile vorkommt, würde ich eher zur Verwendung von VBScript raten - das sähe dann etwa so aus:
Ein ev gewünschtes Trennzeichen wäre hier zwischen die Anführungszeichen in Zeile 4 zu setzen, und um die zusätzliche Leerzeile zu unterbinden genügt es, in Zeile 19 das "& vbCrLF" zu entfernen (oder durch ein diesem Teil der Zeile vorangestelltes Apostroph ' zu deaktivieren).
Grüße
bastla
Dann vielleicht so:
@echo off & setlocal
set "Ein=D:\Daten.txt"
set "Aus=D:\DatenNeu.txt"
set /a Anzahl=34
set "Delim= "
if exist "%Aus%" del "%Aus%"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%j" & call :ProcessFile %%i
goto :eof
:ProcessFile
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
set "Zeile=%Zeile:&=^&%"
set "Zeile=%Zeile:|=^|%"
set /a GleicheZeile=%1 %% Anzahl
if %GleicheZeile% gtr 0 (
>>"%Aus%" <nul set /p =%Zeile%%Delim%
) else (
>>"%Aus%" echo %Zeile%
>>"%Aus%" echo\
)
goto :eof
Spätestens wenn sich herausstellt, dass eine ungerade Anzahl von Leerzeichen in einer Zeile vorkommt, würde ich eher zur Verwendung von VBScript raten - das sähe dann etwa so aus:
Ein = "D:\Daten.txt"
Aus = "D:\DatenNeu.txt"
Anzahl = 34
Delim = ""
Set fso = CreateObject("Scripting.FileSystemObject")
TextZeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLF)
U = UBound(TextZeilen)
Set DateiAus = fso.CreateTextFile(Aus, True)
For i = 0 To U Step Anzahl
Zeile = TextZeilen(i)
Bis = i + Anzahl - 1
If Bis > U Then Bis = U
For j = i + 1 To Bis
Zeile = Zeile & Delim & TextZeilen(j)
Next
If Zeile <> "" Then DateiAus.WriteLine Zeile & vbCrLF
Next
DateiAus.Close
Grüße
bastla