datei aufsplitten, aber wie ?

  • mein zweites problemchen am heutigen tage:
    ich habe zwei dateien z.B. datei a und datei b.
    datei a ist 1200000 bytes gross datei b immer etwas größer z.b 1240000 bytes.
    ich möchte jetzt von datei b die differenz in einer dritten datei haben. also datei c -> 40000 bytes
    welche befehle helfen mir weiter um das ganze CPU schonend durchzuführen ?
    danke im voraus!

    Einmal editiert, zuletzt von WhiteLion (5. Juli 2010 um 11:00)

  • okey, anegegugut und mal folgendes zusammengepfuscht:

    [autoit]

    #include <Constants.au3>

    [/autoit][autoit][/autoit][autoit]

    $hFile = "test.txt"

    [/autoit][autoit][/autoit][autoit]

    FileWriteLine($hFile, "Line1")
    FileWriteLine($hFile, "Line2")
    FileWriteLine($hFile, "Line3")

    [/autoit][autoit][/autoit][autoit]

    $oldsize = FileGetSize($hFile)
    MsgBox(0,"alte größe",$oldsize)

    [/autoit][autoit][/autoit][autoit]

    FileSetPos($hFile, $oldsize, $FILE_BEGIN)

    [/autoit][autoit][/autoit][autoit]

    FileWriteLine($hFile, "vvvvvvvvLine4")
    FileWriteLine($hFile, "vvvvvvvvLine5")

    [/autoit][autoit][/autoit][autoit]

    $newsize = FileGetSize($hFile)
    MsgBox(0,"neue größe",$newsize)

    [/autoit][autoit][/autoit][autoit]

    $difference = $newsize-$oldsize
    MsgBox(0,"unterschied",$difference)

    [/autoit][autoit][/autoit][autoit]

    FileDelete($hFile)

    [/autoit]

    na ja, die differenz die ich haben wollte bekomme ich ja nun raus ....
    allerdings frage ich mich, mit welchem befehl ich genau die differenz
    auslesen kann .... ich habe keinen befehl gefunden bei dem ich ab byte x lesen kann :(

    EDIT: ich weise nochmal draufhin, dass ich hier nur beispielhaft eine text-datei erstellen lassen.
    ich brauche also einen befehle mit dem ich ab byte x lesen lassen kann, auch wenn es eine
    binärdatei ist.

    Einmal editiert, zuletzt von WhiteLion (2. Juli 2010 um 21:14)

  • FileRead ließt ab der aktuellen Position, die du mit FileSetPos veränderst ;)

    Spoiler anzeigen
    [autoit]

    $sFile1 = @DesktopDir & "\test1.txt"
    $sFile2 = @DesktopDir & "\test2.txt"
    $sFileOut = @DesktopDir & "\test_out.txt"

    [/autoit] [autoit][/autoit] [autoit]

    ;~ #cs
    ;-----------------------------------------------------------
    #Region TESTDATEN
    $sContent1 = "test" & @CRLF & "noch was"
    $hFile = FileOpen($sFile1, 2)
    FileWrite($hFile, $sContent1)
    FileClose($hFile)

    [/autoit] [autoit][/autoit] [autoit]

    $sContent2 = $sContent1 & " zusätzliches"
    $hFile = FileOpen($sFile2, 2)
    FileWrite($hFile, $sContent2)
    FileClose($hFile)
    #EndRegion TESTDATEN
    ;-----------------------------------------------------------
    ;~ #ce

    [/autoit] [autoit][/autoit] [autoit]

    $iSize1 = FileGetSize($sFile1)
    $iSize2 = FileGetSize($sFile2)
    $iSizeDiff = $iSize2-$iSize1

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen($sFile2, 16)
    $hFileOut = FileOpen($sFileOut, 18)

    [/autoit] [autoit][/autoit] [autoit]

    FileSetPos($hFile, $iSize1, 0) ; An die Position setzen
    While 1 ; in Blöcken kopieren, damit weniger Arbeitsspeicher verbraucht wird
    $bData = FileRead($hFile, 10240) ; ein Block mit 10 Megabyte
    If @error Then ExitLoop
    FileWrite($hFileOut, $bData)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($hFileOut)
    FileClose($hFile)

    [/autoit]
  • klasse das script scheint zu funktionieren, dennoch habe ich ein problem dessen ursache ich nicht finde.

    also ich lasse mit einer kleinen funktion die differenz von einem logfile auslesen was ständig wächst....
    und zwar nachdem ich was in eine console geschrieben hatte um so die ausgabe im difference.log habe um
    diese zu analysieren. - das klappt auch wenn der server das logfile recht langsam beschreibt, sobald ich aber
    massives ansteigen des schreibens in das logfile verzeiche, dann hängt sich bei anwendung
    meiner funktion das log kompett auf ...also die originale server.log - datei lässt sich dann sogar manuell mit dem editor
    nicht mehr öffnen. - stimmt was mit meiner funktion nicht ?

    (mit massivem schreiben meine ich, dass das log um ca. 0,5 MB pro minute wächst.)

    EDIT: ich habe herausgefunden das der fehler in meiner (dieser) Funktion liegen muss, allerdings habe ich keine ahnung wieso
    auf jeden fall freezt sie die zweite datei aus der die differenz extrahiert wird .... auch bei kopien von dem log. wo ist mein fehler ?

    [autoit]


    _copydifference(server.log, copyolderofserverlog.log, difference.log)

    [/autoit][autoit][/autoit][autoit]

    Func _copydifference($sourcefile1, $sourcefile2, $differencefile)
    FileDelete($difference)
    $sourcefileOut = FileOpen($differencefile, 18)
    $oldsize = FileGetSize($sourcefile1)
    ;MsgBox(0,"alte größe",$oldsize)

    [/autoit][autoit][/autoit][autoit]

    FileSetPos($sourcefile1, $oldsize, $FILE_BEGIN)

    [/autoit][autoit][/autoit][autoit]

    $newsize = FileGetSize($sourcefile2)
    ;MsgBox(0,"neue größe",$newsize)

    [/autoit][autoit][/autoit][autoit]

    $difference = $newsize-$oldsize
    ;MsgBox(0,"unterschied",$difference)

    [/autoit][autoit][/autoit][autoit]

    $newfile = FileOpen($sourcefile2, 16) ; 16 = binärmode
    FileSetPos($newfile, $oldsize, 0)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $bData = FileRead($newfile, 10240)
    If @error Then ExitLoop
    FileWrite($sourcefileOut, $bData)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    FileClose($sourcefileOut)
    FileClose($sourcefile1)
    FileClose($sourcefile2)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von WhiteLion (5. Juli 2010 um 00:43)

  • Die Zeile 9 ist auch unnötig. Das ist falsch und wird auch nicht benötigt.

    [autoit]

    FileSetPos($sourcefile1, $oldsize, $FILE_BEGIN)

    [/autoit]