txt Datei splitten
Hallo
Ich habe txt Dateien die folgendermaßen
(für mich momentan schlecht verwertbar) aufgebaut sind:
1dateiname1
blablablablalabla
blablablablalabla
1blablablabla
blablablablalabla
2dateiname2
blablablablalabla
blablablablalabla
2blablablabla
blablablablalabla
2blablalalabla
blablablablalabla
2blablablabla
blablablablalabla
3dateiname3
blablablablalabla
blablablablalabla
3blablablabla
blablablablalabla
3blablablabla
blablablablalabla
Ist es machbar solch eine Datei blockweise zu splitten?
Wobei die erste Zeile jedes Blocks der Dateiname der neuen Datei sein soll
und nicht mit in die neue 'Datei übernommen werden soll.
Anzahl und grösse der Blöcke variieren. Es ist jeweils nur eine Leerzeile dazwischen.
Eventuell nötige zusätzliche Zeichen kann ich sicher unterbringen.
Ich habe txt Dateien die folgendermaßen
(für mich momentan schlecht verwertbar) aufgebaut sind:
1dateiname1
blablablablalabla
blablablablalabla
1blablablabla
blablablablalabla
2dateiname2
blablablablalabla
blablablablalabla
2blablablabla
blablablablalabla
2blablalalabla
blablablablalabla
2blablablabla
blablablablalabla
3dateiname3
blablablablalabla
blablablablalabla
3blablablabla
blablablablalabla
3blablablabla
blablablablalabla
Ist es machbar solch eine Datei blockweise zu splitten?
Wobei die erste Zeile jedes Blocks der Dateiname der neuen Datei sein soll
und nicht mit in die neue 'Datei übernommen werden soll.
Anzahl und grösse der Blöcke variieren. Es ist jeweils nur eine Leerzeile dazwischen.
Eventuell nötige zusätzliche Zeichen kann ich sicher unterbringen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108852
Url: https://administrator.de/forum/txt-datei-splitten-108852.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
12 Kommentare
Neuester Kommentar
Versuchs mal damit:
Sollten sonderzeichen "<>()&|" in der datei enthalten sein kann es zu problemen führen. Das müsste dan extra behandelt werden. Das gleiche gilt für die Dateinamen wenn dort Zeichen enthalten sidn die ncith erlaubt sind.
@echo off
set first=1
FOR /F "tokens=1*delims=:" %%i in ('findstr /n /r .* "text.txt"') do call:verarbeite "%%j"
goto:eof
:verarbeite
if %first% equ 1 (
set first=0
set "filename=%~1.txt"
) else (
if "%~1" equ "" (
set first=1
) else (
(echo %~1)>>"%filename%"
)
)
Dan versuchs mal damit:
Das ist jetzt ungetestet.
@echo off
set first=1
FOR /F "tokens=1*delims=:" %%i in ('findstr /n /r .* "text.txt"') do call:verarbeite "%%j"
goto:eof
:verarbeite
set "line=%~1"
set "line=%line:^(=^^^(%"
set "line=%line:^)=^^^)%"
set "line=%line:^&=^^^&%"
if %first% equ 1 (
set first=0
set "filename=%line%.txt"
) else (
if "%line%" equ "" (
set first=1
) else (
(echo %line%)>>"%filename%"
)
)

Sry ich wollt mal fragen was des für ne Programiersprache is oder was des eben für Befehle sind =)
(ich weiß, dass die Frage hier eigendlich nichts zu suchen hat)
(ich weiß, dass die Frage hier eigendlich nichts zu suchen hat)
Hallo GRS533!
Vielleicht so:
@67517
Das sind CMD-Befehle (die "CMD-Shell" ist der erheblich verbesserte Nachfolger der "MS-DOS-Eingabeaufforderung") , das "Programm" ist ein Batch mit dem Dateityp ".bat" oder ".cmd".
Grüße
bastla
Vielleicht so:
@echo off & setlocal
set first=1
FOR /F "tokens=1* delims=:" %%i in ('findstr /n /r .* "text.txt"') do set "line=%%j" & call:verarbeite
goto:eof
:verarbeite
if not defined line goto:auswertung
set "line=%line:&=^&%"
set "line=%line:(=^(%"
set "line=%line:)=^)%"
:auswertung
if %first% equ 1 (
set first=0
set "filename=%line%.txt"
) else (
if not defined line (
set first=1
) else (
(echo %line%)>>"%filename%"
)
)
Das sind CMD-Befehle (die "CMD-Shell" ist der erheblich verbesserte Nachfolger der "MS-DOS-Eingabeaufforderung") , das "Programm" ist ein Batch mit dem Dateityp ".bat" oder ".cmd".
Grüße
bastla
Hallo GRS533!
Sieht so aus, als wäre die Zeit für ein VBScript gekommen ...
Vorausgesetzt wird, dass es tatsächlich genau eine Leerzeile zwischen den Blöcken gibt und dass der Zielordner (im Beispiel "D:\Gesplittet") bereits existiert. Außerdem muss (wie bisher) die erste Zeile des Blocks einen gültigen Dateinamen liefern. Sollte im Zielordner bereits eine gleichnamige Datei vorhanden sein, wird diese (derzeit) kommentarlos überschrieben.
Grüße
bastla
Sieht so aus, als wäre die Zeit für ein VBScript gekommen ...
EinDatei = "D:\text.txt"
Ziel = "D:\Gesplittet"
Ext = ".txt"
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(EinDatei).ReadAll, vbCrLF & vbCrLF)
For i = 0 To UBound(T)
A = Split(T(i), vbCrLF)
If UBound(A) > 0 Then
If A(0) <> "" Then
Set AusDatei = fso.CreateTextFile(Ziel & "\" & A(0) & Ext, True)
For j = 1 To UBound(A)
AusDatei.WriteLine A(j)
Next
AusDatei.Close
End If
End If
Next
Grüße
bastla
Hallo GRS533!
Um als Zielpfad den Ordner vorzugeben, in welchem das Script selbst liegt sowie die Extension aus der Datei zu übernehmen, wären folgende Änderungen nötig:
Zeile 2:
Zeile 3: kann entfallen
Zeile 11:
Grüße
bastla
P.S.: Die Downloadlinks für VBS wirst Du vermutlich schon gefunden haben - falls nicht:
2000, XP, 2003
Um als Zielpfad den Ordner vorzugeben, in welchem das Script selbst liegt sowie die Extension aus der Datei zu übernehmen, wären folgende Änderungen nötig:
Zeile 2:
Ziel = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
Zeile 11:
Set AusDatei = fso.CreateTextFile(Ziel & A(0), True)
Siehst du eventuell nicht doch für eine batch-Datei eine Chance? :D
Mit den oben beschriebenen Zeichen-Kombinationen ist die Grenze, bis zu der ich mir das noch per Batch antun wollte, überschritten ...Grüße
bastla
P.S.: Die Downloadlinks für VBS wirst Du vermutlich schon gefunden haben - falls nicht:
2000, XP, 2003