broholm
Goto Top

Datei splitten jeweils nach 1000 Zeilen

Wahrscheinlich ziemlich einfach für jemanden der sich mit batch Skripten auskennt...

Problem:

Ich habe eine Datei mit > 290 000 Zeilen.
Diese würde ich gerne splitten in kleinere Dateien.

Gesplittet werden soll immer nach 1 000 Zeilen.

Die Dateinamen der entstehenden einzelnen Dateifragmente sollen durchnummmeriert werden.

Ausgangsdatei
--> erzeugte_datei_1
--> erzeugte_datei_2
[...]

Danke für eure Hilfe!
Andi

Content-Key: 101120

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

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: 71332
71332 05.11.2008 um 18:20:53 Uhr
Goto Top
wie waer's hiermit (split after X bytes):
http://www.blue-series.de/products/spx/splitting_de.htm

oder mit einem von diesen:
http://www.snapfiles.com/Freeware/downloader/fwfilesplit.html

so long
plague
Mitglied: bastla
bastla 05.11.2008 um 18:28:07 Uhr
Goto Top
Hallo broholm und willkommen im Forum!

Wenn's aber trotzdem mit Bordmitteln sein soll, etwa so:
@echo off & setlocal
set /a Anzahl=1000
set /a Nr=1
set /a Z=0

for /f "delims=" %%i in (D:\Ausgangsdatei.txt) do set "Zeile=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
>>D:\Temp\erzeugte_datei_%Nr%.txt echo %Zeile%
set /a Z+=1
echo %Nr%_%Z%
if %Z% lss %Anzahl% goto :eof
set /a Z=0
set /a Nr+=1
goto :eof
Hinsichtlich des Formats der Nummerierung habe ich mich an Deine Vorlage gehalten, obwohl ich eher zu einer fixen Länge tendiere und die Dateien daher "erzeugte_datei_0001", "erzeugte_datei_0002" etc benennen würde ...

Grüße
bastla
Mitglied: broholm
broholm 06.11.2008 um 08:31:41 Uhr
Goto Top
Hallo euch beiden, und vielen Dank für die schnellen Antworten.

Batch, also Bordmittel, sollte es schon sein, von daher bastla's Lösung.
Die funktioniert auch einwandfrei, allerdings komme ich nun zu einem neuen Problem...
Innerhalb der Daten können alle möglichen "Sonderzeichen" vorkommen, wie kann ich die
"escapen", bzw. evtl die ganze Zeile automatisch damit mir die batch nicht abbricht?

Beispiel bei der Ausführung der batch:
Der Befehl "CO" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
1_8575
1_8576
1_8577
Der Befehl "Sohn'" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
1_8578
1_8579
Der Befehl "Sohn'" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
1_8580
1_8581
1_8582
Der Befehl "#228" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
1_8583
Der Befehl "auml" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.
1_8584

Grüße, Andi
Mitglied: bastla
bastla 06.11.2008 um 08:52:57 Uhr
Goto Top
Hallo broholm!

Füge nach Zeile 9 ein:
set "Zeile=%Zeile:&=^&%"
und das auch analog für "<", ">" und "|".

Wenn Du mir dann allerdings noch erzählst (Beispiel hast Du ja keines geliefert - btw: ist ja immer wieder spannend, sowas im Blindflug machen zu dürfen), dass es auch Zeilen mit einzelnen Anführungszeichen gibt, ändert sich das (Bord-)Mittel der Wahl auf "VBScript" ...

Grüße
bastla
Mitglied: broholm
broholm 06.11.2008 um 10:25:20 Uhr
Goto Top
Hallo bastla,

kurz zum "warum das ganze":
Ich habe einen riesigen dump einer mysql aus einer zeit als mysql noch nicht utf-8 unterstützte. diese dump muss ich abarbeiten und möchte dies daher vorab in kleinere teile splitten per batch.

beispiel aus dem dump:
INSERT INTO trans VALUES (28897,20041028235501,'','tr','\nAn&#305;lmayan ülkelerde');  
INSERT INTO trans VALUES (28898,20041028235501,'','uk','&#1076;&#1110;&#1081;&#1089;&#1085;&#1072; &#1090;&#1074;&#1082;&#1072;&#1079;&#1072;&#1085;&#1080;&#1093; &#1082;&#1088;&#1072;&#1111;&#1085;.');  
INSERT INTO trans VALUES (28899,20041028235501,'','hu','A fel nem sorolt országokban a helyi garanciális jogszabályok érvényesek.');  
INSERT INTO contacts VALUES (9257,20040213092245,'','\\\"Linas\\\"','lt','lt','CD \\\"Linas\\\"','','žio 23','','v&#279;žys','','','','0','101-500',' A \\\"Rag&#279;i\\\"','v&#279;žys',NULL,'on','on',NULL,NULL);  
INSERT INTO contacts VALUES (15531,20040316135757,'','Grakas','lt','lt','CD \\\"B&#363;ta\\\"','','15','7617','Šiai','','','','','500','UAB \\\"Technikonas\\\"','',NULL,'on','on',NULL,NULL);  


Aktuell läuft die batch fast perfekt, ich bekomme nur noch einen Fehler bei folgenden Inhalten:

' A \\\"Rag&#279;i\\\"'  
oder
'CD \\\"B&#363;ta\\\"'  

Dank und Gruß,
Andi
Mitglied: bastla
bastla 06.11.2008 um 10:47:24 Uhr
Goto Top
Hallo broholm!

Mit den beiden dargestellten Zeilen gibt es bei mir kein Problem, es könnten aber noch irgendwelche "nicht-druckbare" Zeichen auf dem Weg von Dir zu mir auf der Strecke geblieben sein - falls Du einen Editor mit Anzeige aller Steuerzeichen oder einen Hex-Editor bei der Hand hast, könntest Du das einmal überprüfen ...

Grüße
bastla
Mitglied: broholm
broholm 06.11.2008 um 11:14:06 Uhr
Goto Top
Hallo bastla,

da hast du recht, mit dem auszug hier, funktioniert es bei mir auch.
Ich werde mal weiterforschen woran das noch liegt.

Hast mir aber super weitergeholfen. Somit werde ich diesen Beitrag mal als gelöst markieren. Den Rest werd ich wohl noch schaffen und hat ja auch nichts mehr mit der batch ansich zu tun.

Vielen Dank nochmals!

Grüße,
Andi