havanna
Goto Top

csv per vbs splitten, dann letzte Zeile löschen

Moin, ich bin der Neue face-smile
Und gleich mal mit einer Frage nerven *g*
Arbeite mich gerade in vbs ein.
Ich muss eine csv splitten, in 10000 Zeilen aufgeteilt.
Das klappt auch soweit ganz gut mit dem was ich mir hier im Forum schon zusammengesucht habe.
Haken an der Geschichte: Die gesplitteten Dateien enthalten am Ende immer eine Leerzeile und ich hab bisher keinen Weg gefunden das zu unterbinden.
Wenn ich MaxLine auf 9999 setzte dann hab ich zwar die maximalen 10000 Zeilen, aber trotzdem am Ende eine Leerzeile.
MaxLine auf 10000 bringt mir Dateien mit 10001 Zeilen und halt wieder mit der Leerzeile am Ende :/

Any solutions for me?

Hier mal das was ich mir bisher zusammengeschustert habe:
'SplitTextFile.vbs  
sInFile = WScript.Arguments(0)
If WScript.Arguments.Count < 2 Then
    lMaxLine = 10000
Else
    lMaxLine = CLng(WScript.Arguments(1))
End If

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")  
sPath = fso.GetFile(sInFile).Path
sPath = Left(sPath, InstrRev(sPath, "\") - 1)  
sOutName =  sPath & "\" & fso.GetBaseName(sInFile) & "_"  
If InstrRev(sInFile, ".") Then  
    sOutType = Mid(sInFile, InstrRev(sInFile, "."))  
End If

lLineNr=0
iFileNr=101

Set oOut = fso.OpenTextFile(sOutName & Mid(CStr(iFileNr),2) & sOutType, 2, True)
Set oIn = fso.OpenTextFile(sInFile, 1)
Do While Not oIn.AtEndOfStream
	oOut.WriteLine oIn.ReadLine
	lLineNr = lLineNr + 1
	If lLineNr >= lMaxLine Then
		lLineNr = 0
		oOut.Close
		iFileNr = iFileNr + 1
		Set oOut = fso.OpenTextFile(sOutName & Mid(CStr(iFileNr),2) & sOutType, 2, True)
	End If
Loop
oIn.Close
oOut.Close
WScript.Echo "Erledigt :)"  
Oder muss ich die Ausgabedatei noch einmal komplett in eine neue schreiben halt bis auf die letzte Zeile?


[Edit Biber] In -Tags gesetzt. [/Edit]

Content-Key: 82053

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

Printed on: April 20, 2024 at 06:04 o'clock

Member: bastla
bastla Feb 29, 2008 at 18:05:44 (UTC)
Goto Top
Hallo Havanna und willkommen im Forum!

Versuch es vielleicht so:
...
Do While Not oIn.AtEndOfStream
	oOut.Write oIn.ReadLine 'Zeile ohne Zeilenschaltung schreiben  
	lLineNr = lLineNr + 1
	If lLineNr >= lMaxLine Then
		lLineNr = 0
		oOut.Close
		iFileNr = iFileNr + 1
		Set oOut = fso.OpenTextFile(sOutName & Mid(CStr(iFileNr),2) & sOutType, 2, True)
	Else 'noch nicht letzte Zeile, daher Zeilenschaltung anhängen  
		oOut.Write vbCrLF
	End If
Loop
oIn.Close
oOut.Close
WScript.Echo "Erledigt ;-)"  

Grüße
bastla

P.S.: Wir hätten hier auch -Tags ...
Member: Havanna
Havanna Mar 03, 2008 at 12:38:19 (UTC)
Goto Top
Vielen Dank, funktioniert so.
Minimanko: In der letzten Datei die geschrieben wird ist trotzdem noch am Ende eine Leerzeile.
Aber das ist nicht so schlimm, wenn man das weiß dann kann man die noch mal eben schnell manuell löschen face-smile
Member: bastla
bastla Mar 03, 2008 at 12:52:38 (UTC)
Goto Top
Hallo Havanna!

In der letzten Datei die geschrieben wird ist trotzdem noch am Ende eine Leerzeile.
Stimmt leider - dann versuchen wir's eben ersatzweise so:
...
	Else 'noch nicht letzte Zeile, daher Zeilenschaltung anhängen  
		If Not oIn.AtEndOfStream Then oOut.Write vbCrLF 'falls nicht schon letzte Zeile  
	End If
...

Grüße
bastla
Member: Havanna
Havanna Mar 03, 2008 at 13:24:33 (UTC)
Goto Top
Perfekt.
Selbst wenn in der csv Vorlage eine Leerzeile am Ende ist dann wird diese nicht mitgespeichert.
Vielen Dank face-smile