Array bearbeiten...!

  • Hi Leute,

    ich versuche grade mir ein Tool zu schreiben um Entfernungen zwischen verschiedenen Punkten zu berechnen und zu bearbeiten...
    ich habe 2 Textdateien die ich jeweils in ein Array einlese. In Datei 1 stehen die verschiedenen Startpunkte und in Datei 2 die Ziele im Format X|Y.
    Ich Berechne für jeden Startpunkt also die Zeit wie lange es zu Ziel1 dauert und speichere das in einem Array das dann so aussieht

    Spoiler anzeigen


    jetzt möchte ich das die Dauer zu Ziel1 aber zb. max 175 Stunden dauern darf und es nur 5 Sartpunkte sein sollen also

    Spoiler anzeigen
    Code
    [6]~170:57:27
    [7]~171:25:14
    [8]~171:27:23
    [9]~172:23:2
    [10]~173:37:18


    sollen Ziel1 zugeordnet werden und die jeweiligen Startpunkte sollen aus Datei 1 gelöscht werden.
    Das ganze soll sich dann mit jedem Ziel in Datei2 wiederholen...
    Mein bisheriger Code sieht so aus

    Spoiler anzeigen
    [autoit]


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

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

    Dim $arSource, $arTarget, $arDauer[1], $Hour, $Min, $Sec

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

    _FileReadToArray('source.txt', $arSource)
    _FileReadToArray('ziel.txt', $arTarget)

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

    For $i = 1 To $arSource[0]
    $arXY_Source = _Split_to_XY($arSource[$i]);Splitet die Zeile der Datei source.txt in X | Y
    $arXY_Target = _Split_to_XY($arTarget[1]);Splitet die Zeile der Datei ziel.txt in X | Y
    $sEntfernung = _Dauer_in_Ticks($arXY_Source[1], $arXY_Source[2], $arXY_Target[1], $arXY_Target[2], 30);Berechnet die Entfernung und gibt mir die Dauer in Ticks
    _TicksToTime($sEntfernung, $Hour, $Min, $Sec)
    $sDauer = $Hour & ':' & $Min & ':' & $Sec;Gibt die Dauer im Format hh:mm:ss zurück
    _ArrayAdd($arDauer, $sDauer);Speichert die Dauer in einem Array
    Next

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

    _ArraySort($arDauer, 0, 1)

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

    Ab hier komme ich nicht ganz weiter!!!

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

    Func _Dauer_in_Ticks($iX1, $iY1, $iX2, $iY2, $iSpeed)
    $iDist = Sqrt(($iX1 - $iX2) ^ 2 + ($iY1 - $iY2) ^ 2) ;Entfernung
    $iSec = ($iDist * 30) * 60 ;Zeit in Sekunden
    $iTicks = ($iSec * 1000) ;Zeit in Ticks
    Return $iTicks
    EndFunc ;==>_Dauer_in_Ticks

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

    Func _Array2DEmptyDel(ByRef $avArray, $Col = 0);==> Author BugFix ([email='bugfix@autoit.de'][/email])
    If (Not IsArray($avArray)) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray, 2)
    If @error = 2 Then
    Local $arTMP[1]
    For $i = 0 To UBound($avArray) - 1
    If StringLen($avArray[$i] > 0) Then
    If StringLen($arTMP[UBound($arTMP) - 1]) = 0 Then
    $arTMP[UBound($arTMP) - 1] = $avArray[$i]
    Else
    ReDim $arTMP[UBound($arTMP) + 1]
    $arTMP[UBound($arTMP) - 1] = $avArray[$i]
    EndIf
    EndIf
    Next
    Else
    If $Col = 0 Then
    Local $arTMP[1][$UBound2nd], $val, $len
    For $i = 0 To UBound($avArray) - 1
    $val = ''
    For $k = 0 To $UBound2nd - 1
    $val &= $avArray[$i][$k]
    Next
    If StringLen($val) > 0 Then
    $len = 0
    For $k = 0 To UBound($arTMP, 2) - 1
    $len &= StringLen($arTMP[UBound($arTMP) - 1][$k])
    Next
    If $len = 0 Then
    For $k = 0 To $UBound2nd - 1
    $arTMP[UBound($arTMP) - 1][$k] = $avArray[$i][$k]
    Next
    Else
    ReDim $arTMP[UBound($arTMP) + 1][$UBound2nd]
    For $k = 0 To $UBound2nd - 1
    $arTMP[UBound($arTMP) - 1][$k] = $avArray[$i][$k]
    Next
    EndIf
    EndIf
    Next
    Else
    Local $arTMP[UBound($avArray)][1], $val, $len
    For $k = 0 To $UBound2nd - 1
    $val = ''
    $notEmpty = 0
    For $i = 0 To UBound($avArray) - 1
    $val &= $avArray[$i][$k]
    If StringLen($val) > 0 Then
    $notEmpty = 1
    ExitLoop
    EndIf
    Next
    If $notEmpty = 1 Then
    $len = 0
    For $i = 0 To UBound($arTMP) - 1
    $len &= StringLen($arTMP[$i][UBound($arTMP, 2) - 1])
    Next
    If $len = 0 Then
    For $i = 0 To UBound($avArray) - 1
    $arTMP[$i][0] = $avArray[$i][$k]
    Next
    Else
    ReDim $arTMP[UBound($avArray)][UBound($arTMP, 2) + 1]
    For $i = 0 To UBound($avArray) - 1
    $arTMP[$i][UBound($arTMP, 2) - 1] = $avArray[$i][$k]
    Next
    EndIf
    EndIf
    Next
    EndIf
    EndIf
    $avArray = $arTMP
    Return -1
    EndFunc ;==>_Array2DEmptyDel

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

    Func _Split_to_XY($sLine)
    $XY = StringSplit($sLine, "|")
    If Not IsArray($XY) Then
    MsgBox(0, 'Split to XY', 'Fehler')
    EndIf
    Return $XY
    EndFunc ;==>_Split_to_XY

    [/autoit]

    Ich hoffe ihr könnt mir ein wenig Hilfestellung und ein paar Tips geben.
    Die Textdateien hab ich mal angehängt.

    Mfg
    olli