Array teilen

  • hi

    Bernd
    ich habe es getestet. Er kommt aber bei der Zählung irgendwie durcheinander. Das erste Segment zeigt von 0..103 an(ist ok) dann springt er zurück auf auf Zeile 52 und so weiter.
    Habe mal meine out Datei angehängt. Vielleicht hast du ja noch ne Lösung dafür.

    Spoiler anzeigen
    [autoit]

    #include <date.au3>
    #include <misc.au3>
    #include <inet.au3>
    #include <file.au3>
    #include <array.au3>

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

    $szFileName = "R:\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"out.txt"

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

    Dim $aszParam[20]

    $cLines = _FileCountLines($szFileName)

    If $cLines > 0 Then

    $cReadLines = Round($cLines/20)

    ; erst mal 19 Teile lesen
    For $index = 0 To 18
    $aszParam[$index] = StringLeft(FileReadLine($szFileName,$index*20+1),10) & ".." & StringLeft(FileReadLine($szFileName,$index*20+$cReadLines),10)
    Next

    ; und jetzt den letzten Teil
    $aszParam[19] = StringLeft(FileReadLine($szFileName,19*20+1),10) & ".." & StringLeft(FileReadLine($szFileName,$cLines),10)

    $szOutput = ""
    For $index = 0 To 19
    MsgBox(0, "", $aszParam[$index])
    $szOutput &= $index+1 & ". Teil: " & $aszParam[$index] & @CRLF
    Next

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

    ;~ MsgBox(0, "", $szOutput)
    EndIf

    [/autoit]


    mfg Thomas

    • Offizieller Beitrag

    Hallo,

    ich habe eben noch eine Fehlerkorrektur am Script vorgenommen (s.o.), dass sollte das Problem lösen.

    Edit:

    ich habe mal eine Version geschrieben die etwas flexibler ist, bei $nTeile kannst Du eingeben in wieviele Teile die Datei zerlegt werden soll:

    [autoit]

    #include <File.au3>

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

    Const $nTeile = 20

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

    $szFilename = "out.txt"

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

    Dim $aszParam[$nTeile]

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

    $cLines = _FileCountLines($szFileName)

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

    If $cLines > 0 Then

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

    $cReadLines = Round($cLines/$nTeile)

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

    ; erst mal 19 Teile lesen
    For $index = 0 To $nTeile - 2
    $aszParam[$index] = FileReadLine($szFileName,$index*$cReadLines+1) & ".." & FileReadLine($szFileName,($index+1)*$cReadLines)
    Next

    ; und jetzt den letzten Teil
    $aszParam[$nTeile-1] = FileReadLine($szFileName,($nTeile-1)*$cReadLines+1) & ".." & FileReadLine($szFileName,$cLines)

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

    $szOutput = ""
    For $index = 0 To $nTeile-1
    $szOutput &= $index+1 & ". Teil: " & $aszParam[$index] & @CRLF
    Next

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

    MsgBox(0, "", $szOutput)
    EndIf

    [/autoit]
  • Mahlzeit,

    das ist ja eine super Funktion. Idealerweise wäre es top wenn die Teilung anhand der Zeileanzeil der Datei erfolgen könnte.
    1000 Zeilen 10
    2000 Zeilen 20
    2500 Zeilen 25 usw. Ist das irgendwie möglich?

    Taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    • Offizieller Beitrag

    Das könnte man z.B. so machen, mit $nMaxZeilen gibt man an wieviel Zeilen in jedem Teil stehen sollen:

    [autoit]

    #include <File.au3>

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

    Const $nMaxZeilen = 100 ; Maximale Anzahl Zeilen je Teil

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

    $szFilename = "out.txt"

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

    $cLines = _FileCountLines($szFileName)

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

    If $cLines > 0 Then
    $nTeile = Round($cLines / 100) ; Anzahl der Teile berechnen
    Dim $aszParam[$nTeile]

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

    ; erst mal Anzahl Teile - 1 lesen
    For $index = 0 To $nTeile - 2
    $aszParam[$index] = FileReadLine($szFileName,$index*$nMaxZeilen+1) & ".." & FileReadLine($szFileName,($index+1)*$nMaxZeilen)
    Next

    ; und jetzt den letzten Teil lesen
    $aszParam[$nTeile-1] = FileReadLine($szFileName,($nTeile-1)*$nMaxZeilen+1) & ".." & FileReadLine($szFileName,$cLines)

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

    $szOutput = ""
    For $index = 0 To $nTeile-1
    $szOutput &= $index+1 & ". Teil: " & $aszParam[$index] & @CRLF
    Next

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

    MsgBox(0, "", $szOutput)
    EndIf

    [/autoit]