Wert vor ein Array setzen

  • Hallo, ich habe ein kleines Problem mit meinem Script.


    Leider gehen mir die Ideen aus, um folgendes umzusetzen:

    Ich habe eine Datei mit Ranges (von-bis).

    Ich lese die Datei ein und speichere sie in Arrays, getrennt durch "-".

    Nun gebe ich einen von- und einen bis-wert ein. Diese beiden Werte sollen in die eingelesene Datei (bzw. die Arrays übernommen werden.

    So sieht die urspruchsdatei aus:
    3915547-3915549
    3915553-3921459
    3921490-3931753
    3931764-3976050

    und so soll sie dann ausgegeben werden:
    3915547-3915549
    3915553-3921459
    3921490-3921491
    3921494-
    3931753
    3931764-3976050

    Leider habe ich keine vernünftige Idee, um die Zeilenumbrüche VOR die zweite Array (3931753) zu bekommen.

    Hat jemand vielleicht eine Idee parrat ? Bzw. ist dies überhaupt möglich so ohne weiteres Splitten?

    Freundliche Grüße

    Hier mein KOMPLETTER Code:

    [autoit]


    #include "Array.au3"
    #include <File.au3>

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

    $fileName = "V:\Software\Tools\TEST_GS_MASKE\Testdatei\GSD.txt"
    $fileAsArray = FileReadToArray($fileName)

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

    $lineCnt = UBound($fileAsArray)

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

    _log("Read file '" & $fileName & "' with '" & $lineCnt & "' lines")

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

    $outpout = @DesktopDir &"\Neue_GS_Testdatei.txt"

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

    ; parse file into array of format [i][0] = start and [i][1] = end of range
    Local $rangeAmount = 0
    Dim $tmpArray[$lineCnt][2]
    For $i = 0 To $lineCnt - 1
    Local $currentLine = $fileAsArray[$i]
    Dim $split = StringSplit($currentLine, "-")

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

    If($split[0] <> 2) Then
    _log("Could not split line '" & $currentLine & "' into two numbers.")
    Exit(1)
    EndIf

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

    Local $start = String($split[1])
    Local $end = String($split[2])
    _log($start & "-" & $end)
    $tmpArray[$i][0] = $start
    $tmpArray[$i][1] = $end

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

    $rangeAmount += 1
    Next

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

    ; _ArrayDisplay($tmpArray)

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

    ; read a new range
    $newNrFrom = String(InputBox("test1", "von")) ; parse input as nr
    $newNrTo = String(InputBox("test1", "bis"))

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

    _log("Neue Range: '" & $newNrFrom & "-" & $newNrTo & "'.")
    If($newNrFrom >= $newNrTo) Then
    _log("Error: VON-Wert muss kleiner als der BIS-Wert sein")
    Exit(2)
    EndIf

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

    ; (TODO) > Fast fertig ?!
    ; update ranges
    For $i = 0 To $rangeAmount - 1

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

    If($tmpArray[$i][0] <= $newNrFrom And $tmpArray[$i][1] >= $newNrFrom) Then
    _log($newNrFrom & " is in range of "&$tmpArray[$i][0]&" to "&$tmpArray[$i][1])

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

    ;~ msgbox(0,"",$tmpArray[$i][0])
    ;~ msgbox(0,"",$tmpArray[$i][1])

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

    $WasIstI = $i
    $ReplaceTo = ""
    $tmpArray[$i][1] = $ReplaceTo
    StringReplace($tmpArray,$tmpArray[$i][1],$newNrFrom-1)

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

    $array_add_1 = $tmpArray[$i][1] & @crlf & $ReplaceTo & "-" & $newNrTo+1
    ;$array_add_2 = $newNrFrom+1 & "-" & $tmpArray[$i][0] & @CRLF & $tmpArray[$i][1] & "-" & $newNrTo-1 & @CRLF

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

    ;msgbox(0,"",$tmpArray[$i][0] & $tmpArray[$i][1] & $array_add_1)

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

    ;~ Dim $tmpArray[$lineCnt][2]

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

    ;~ test, ob neuer BIS-Wert kleiner als der alte IST-Wert
    If($tmpArray[$i][1] >= $newNrTo) Then
    _log($newNrTo & " is in range of "&$tmpArray[$i][0]&" to "&$tmpArray[$i][1])
    Msgbox(0,"","is smaller than old")
    log($tmpArray[$i][0]&"-"&$tmpArray[$i][1])
    EndIf

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

    ;~ $del1 = _ArrayDelete($tmpArray[$i][0], $WasIstI)
    ;~ MsgBox(0,"",$del1)
    ;~ $del2 = _ArrayDelete($tmpArray[$i][1], $WasIstI)
    ;~ MsgBox(0,"",$del2)
    ;~ MsgBox(0,"",$WasIstI)

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

    EndIf

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

    Next

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

    ; TODO Save in file

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

    _ArrayDisplay($tmpArray)

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

    ;Stringreplace($tmpArray,$tmpArray[$i][1],$tmpArray[$i][1]+1)

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

    Stringreplace($tmpArray,"|","-")
    _ArrayInsert($tmpArray,$WasIstI,$array_add_1)
    ;_ArrayInsert($tmpArray,$WasIstI+1,$array_add_2)
    _FileWriteFromArray($outpout, $tmpArray)

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

    Stringreplace($outpout,"|","-")
    ;Dim $split = StringSplit($outpout, "-")
    _ArrayDisplay($tmpArray)

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

    ;MsgBox(0,"",$element_one & " muss verändert werden")
    ;MsgBox(0,"",$WasIstI)

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

    Func _log($message)
    ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & @TAB & $message & @CRLF)
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Nachdem du evtl. die alten Werte angepasst hast einfach noch

    Code
    _ArrayDisplay($tmpArray, 'Vor einfügen')
    _ArrayAdd($tmpArray, $newNrFrom & '|' & $newNrTo)
    _ArraySort($tmpArray)
    _FileWriteFromArray($outpout, $tmpArray)
    
    
    _ReplaceStringInFile($outpout, "|", "-")
    _ArrayDisplay($tmpArray, 'Nach einfügen')

    ausführen.

  • Hallo,

    du könntest auch das Array mit

    Code
    ArrayToString ( Const ByRef $aArray [, $sDelim_Col = "|" [, $iStart_Row = -1 [, $iEnd_Row = -1 [, $sDelim_Row = @CRLF [, $iStart_Col = -1 [, $iEnd_Col = -1]]]]]] )

    das Array in einen String umwandeln. Datebei musst du nur $sDelim_Row = "|" setzen, dann müsste der String so aussehen:

    $derString = "3915547-3915549| 3915553-3921459| 3921490-3931753| 3931764-3976050"

    nun könntest du mit $derString = StringReplace($derString,"3931753|","3921491|3921494-3931753")

    Dann mit StringSplit($derString,"|") den String wieder in ein Array wandeln

    lg
    s.koni