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
[0]~
[1]~167:35:9
[2]~169:27:42
[3]~169:55:27
[4]~169:57:37
[5]~170:27:32
[6]~170:57:27
[7]~171:25:14
[8]~171:27:23
[9]~172:23:2
[10]~173:37:18
[11]~175:42:21
[12]~177:45:15
[13]~180:55:56
[14]~181:53:47
[15]~183:19:49
[16]~185:49:33
[17]~187:11:35
[18]~198:37:24
[19]~200:5:24
[20]~203:9:27
Alles 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
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
#include <Array.au3>
#include <Date.au3>
#include <File.au3>
Dim $arSource, $arTarget, $arDauer[1], $Hour, $Min, $Sec
[/autoit] [autoit][/autoit] [autoit]_FileReadToArray('source.txt', $arSource)
_FileReadToArray('ziel.txt', $arTarget)
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
_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
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
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
Ich hoffe ihr könnt mir ein wenig Hilfestellung und ein paar Tips geben.
Die Textdateien hab ich mal angehängt.
Mfg
olli