Moin , ich habe eine txt Datei mit 100.000 Zeilen , die will ich aufteilen in mehrere txt Dateien mit nur 10.000 Zeilen
Wie mache ich es am besten ?
Moin , ich habe eine txt Datei mit 100.000 Zeilen , die will ich aufteilen in mehrere txt Dateien mit nur 10.000 Zeilen
Wie mache ich es am besten ?
du kannst auch die Datei mit _FileReadToArray komplett einlesen und in einer For...Next Schleife mit _FileWriteFromArray (Parameter $iBase + $iUBound benutzen!) Blockweise in einzelne Dateien schreiben.
du kannst auch die Datei mit _FileReadToArray komplett einlesen und in einer For...Next Schleife mit _FileWriteFromArray (Parameter $iBase + $iUBound benutzen!) Blockweise in einzelne Dateien schreiben.
funktioniert sehr gut , danke
#include <File.au3>
Local $aArray
Local $iBase = 1
Local $iUBound = 10000
_FileReadToArray("TESTTESTTEST.txt", $aArray, 0)
_FileWriteFromArray(_RandomText(4) &".txt", $aArray , $iBase, $iUBound,1)
Func _RandomText($length)
Local $text = "", $temp
For $i = 1 To $length
$temp = Random(55, 116, 1)
$text&= Chr($temp+6*($temp>90)-7*($temp<65))
Next
Return $text
EndFunct", $aArray , $iBase, $iUBound,1)
Alles anzeigen
kann man den die ersten 10.000 zeilen aus Array auf die schnelle löschen ?
ja geht hier ein angepasstes Beispiel aus der Hilfe:
#include <Array.au3>
Local $aArray_Base[25]
For $i = 0 To 24
$aArray_Base[$i] = $i
Next
; Range string
$aArray = $aArray_Base
Local $sRange = "0-15"
_ArrayDisplay($aArray, "BEFORE deletion")
_ArrayDelete($aArray, $sRange)
ConsoleWrite(" " & @error & @CRLF)
_ArrayDisplay($aArray, "RANGE STRING deleted")
Alles anzeigen
Falls du vorhast größere Mengen an Dateien zu speichern ist ein Random mit 4 Stellen ggf. ungeeignet. Zudem unterscheidet Windows nicht zwischen groß und Kleinschreibung.
Beispiel: (Falls ich mich verrechnet habe, jedem Stochastik-Profi steht frei das zu überprüfen^^)
36 mögliche Zeichen -> 36^4 = 1679616 Möglichkeiten. (klingt erstmal ziemlich viel)
Beim schreiben der ersten Datei kann keine Kollision auftreten.
Bei der 2ten ist die Chance (36^4-1)/(36^4) dass es keine Kollision gibt, usw.
Bei 300 Dateien ist die Chance schon 2,6% dass es mindestens 1x knallt.
Bei 3000 Dateien sieht es schon ziemlich übel aus. (93% Chance auf mindestens eine Kollision).
Daher habe ich mir irgendwann einmal eine Timestamp Funktion gebastelt (die ebenfalls im 36er System funktioniert und 5 Zeichen braucht). Wenn man (sicher) weiß, dass ein Schreibvorgang länger als ca. 10ms dauert kann diese Funktion ohne Zusätze genutzt werden um große Mengen Dateien mit einem Zeitstempel zu nummerieren. Ganz genau (und sicherer) wäre natürlich der 64Bit Timestamp. Alternativ einfach 8 Zufallszeichen im 36er System nutzen, damit kommt man in fast allen Fällen auch klar.
For $i = 0 To 9 Step 1
ConsoleWrite(WeekTimestamp() & @CRLF)
Sleep(10)
Next
; ---------- WeekTimestamp ----------
; Start: 00000
; Ende: ZZZZZ
; Auflösung: ca. 10 Millisekunden
; Periode: 1 Woche
; -----------------------------------
Func WeekTimestamp()
Local Static $aChr = StringSplit('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '', 2)
Local $iTime = Int((((((@WDAY - 1) * 24 + @HOUR) * 60 + @MIN) * 60 + @SEC) * 1000 + @MSEC) / 10.0022863), $sRet = ''
While $iTime > 0
$sRet &= $aChr[Mod($iTime, 36)]
$iTime = Int($iTime / 36)
WEnd
Return $sRet
EndFunc
Func RandomText($iLen)
Local Static $aChr = StringSplit('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '', 2)
Local $sRet = ''
For $i = 1 To $iLen Step 1
$sRet &= $aChr[Random(0, 35, 1)]
Next
Return $sRet
EndFunc
Alles anzeigen
Allerdings ist mir nicht klar was du vorhast. Wenn du die Dateien zufällig benennst kannst du sie doch nicht wieder in der richtigen Reihenfolge ansprechen ?
Vielen Dank !!!!!!!