GUICtrlSetData mit GUICtrlRead auslesen

  • Hallo chip,
    Eine Frage habe ich noch kannst du mir die Rechnung bitte so umbauen das wenn in der VK ein Preis 0 hat das da dann nicht gerechnet wird für diese ware?

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #region START GUI
    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    $aArray = _FileListToArray("VK", "*.csv", 1)
    Local $sComboText = ''
    For $i = 1 To UBound($aArray) - 1
    $sComboText &= StringTrimRight($aArray[$i], 4) & "|"
    Next
    $Startstadt = GUICtrlCreateCombo("Wähle Stadt", 85, 75, 110, 130)
    GUICtrlSetData(-1, StringTrimRight($sComboText, 1))
    $Zielstadt = GUICtrlCreateCombo("Wähle Stadt", 212, 75, 110, 25)
    GUICtrlSetData(-1, StringTrimRight($sComboText, 1))
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $test[8], $iHeight = 230
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 680, $iHeight, 150, 35)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 335, $iHeight, 80, 20)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $test[$i] = GUICtrlCreateLabel("", 645, 190, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $iHeight += 30
    Next

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

    #region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 645, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Berechnung = GUICtrlCreateLabel("Berechnung starten", 730, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung Starten", 745, 75, 130, 20)
    #endregion Buttons

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

    $InputLadung = GUICtrlCreateInput("0", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt
    Local $iRow = 1
    $aRegExp = StringRegExp(FileRead("ek.csv"), GUICtrlRead($Startstadt) & ",(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?)," & _
    "(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?)", 3)
    For $j = 0 To UBound($aRegExp) - 1 Step +4
    GUICtrlSetData($Ware[$iRow], $aRegExp[$j])
    GUICtrlSetData($Stufe[$iRow], $aRegExp[$j + 1])
    GUICtrlSetData($EK[$iRow], $aRegExp[$j + 2])
    GUICtrlSetData($Gewicht[$iRow], $aRegExp[$j + 3])
    $iRow += 1
    Next
    Local $iRow = 1
    $aRegExp = StringRegExp(FileRead("VK\" & GUICtrlRead($Startstadt) & ".csv"), GUICtrlRead($Zielstadt) & ",(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?)," & _
    "(.+?),(.+?),(.+?),(.+?),(.+?)", 3)
    For $j = 0 To UBound($aRegExp) - 1 Step +2
    GUICtrlSetData($VK[$iRow], $aRegExp[$j + 1])
    $iRow += 1
    Next
    ;~ _ArrayDisplay($aRegExp)
    Case $BerechnungStart
    For $j = 0 To UBound($aRegExp) - 6 Step 1
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$j]))
    If GUICtrlRead($VK[$j]) > 0 Then
    GUICtrlSetData($Ergebnis[$j], (GUICtrlRead($VK[$j]) - GUICtrlRead($EK[$j])) * $anzahl)
    Else
    GUICtrlSetData($Ergebnis[$j],"VK-Preis ist 0")
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo ihr beiden,

    vielen Dank an euch zwei.

    Könnte nun noch bitte jemand der sich mit RegExp auskennt nachsehen, warum das Gewicht und der VK Preis nicht richtig ausgelesen/wiedergegeben werden?

    Mfg Ghostleader

    • Offizieller Beitrag

    Warum um Himmels Willen verwendest du hier RegExp?
    Da hast du nun schon das Glück, dass die Daten sauber geordnet in einer csv-Datei vorliegen und recht leicht in eine Array gelesen werden können - weshalb willst du das per RegEx lösen? ;)

    So kannst du alles in ein schönes 3D-Array lesen (Bsp. Datei ek.csv)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    $sPath = '..\ek.csv'
    Local $aAll
    _FileReadToArray($sPath, $aAll)
    Local $aStadt[$aAll[0]][7][4]
    ;~ $aStadt[X][0][0] = Stadt
    ;~ $aStadt[X][Y][0] = Ware
    ;~ $aStadt[X][Y][1] = Stufe
    ;~ $aStadt[X][Y][2] = Preis
    ;~ $aStadt[X][Y][3] = Gewicht

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

    Local $aSplit, $n
    For $i = 1 To $aAll[0]
    $aSplit = StringSplit($aAll[$i], ',')
    $aStadt[$i-1][0][0] = $aSplit[1] ; == Stadt
    $n = 1
    For $j = 2 To $aSplit[0] Step 4
    $aStadt[$i-1][$n][0] = $aSplit[$j] ; == Ware
    $aStadt[$i-1][$n][1] = $aSplit[$j+1] ; == Stufe
    $aStadt[$i-1][$n][2] = $aSplit[$j+2] ; == Preis
    $aStadt[$i-1][$n][3] = $aSplit[$j+3] ; == Gewicht
    $n += 1
    Next
    Next

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

    ; == Ausgabe in Konsole
    For $i = 0 To UBound($aStadt) -1
    For $j = 1 To 6
    $s = $aStadt[$i][0][0] & ' - ' & $aStadt[$i][$j][0] & ' - '
    ConsoleWrite( $s & 'Stufe: ' & $aStadt[$i][$j][1] & @CRLF )
    ConsoleWrite( $s & 'Preis: ' & $aStadt[$i][$j][2] & @CRLF )
    ConsoleWrite( $s & 'Gewicht: ' & $aStadt[$i][$j][3] & @CRLF )
    Next
    Next

    [/autoit]
  • Hallo BugFix,

    danke erstmal für deine Antwort und deinen Vorschlag mit Erklährung. Sobald ich Zeit habe mich mal damit zu beschäftigen werde ich dies mal tun.

    Bis dahin wollte ich es doch gerne erstmal so lassen und gerne den Fehler beheben!

    Mfg Ghostleader

  • Hallo Ghostleader,

    da hat BugFix Recht, allerdings habe ich ausgehend von der Exceltabelle (mit Excel wäre auch eine schöne Lösung möglich) mit O-Office Calc mir neue CSV's generiert. Ich habe mangels RegEx-Kenntnissen (1 mal angeschaut und beschlossen dass dies nichts für meinen alten Kopf ist) eine Lösung auf 2D-Array-Basis gebastelt. Die Arrays werden am Anfang eingelesen und dann alles damit gehandelt:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region ;Waren.CSV einlesen und in 2D-Array speichern
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]
    ;Warenbezeichnung Gewicht und Stufe in Waren-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region ;Verkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in VK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region ;Einkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in EK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 85, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 212, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $test[8], $iHeight = 200 ;war 230
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 610, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #cs
    $test[$i] = GUICtrlCreateLabel("", 645, 190, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #ce
    $iHeight += 45 ;war 30
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 645, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Berechnung = GUICtrlCreateLabel("Berechnung starten", 730, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung &Starten", 745, 75, 130, 20) ;eigentlich unnötig geworden
    ;GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("1000", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt, $BerechnungStart
    _Berechnung($nMsg)
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return ;keine StartStadt ausgwählt also zurück
    $iStart = _ArraySearch($aOrte, $sStart) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    ;_ArraySort($aEK, 1, 0, 0, $iStart) ;umgestellt auf arraySort2D_MC

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

    ;============ nötig für arraySort2D_MC
    ;es wird ein String gebildet in dem die Reihenfolge und Art der Sortierung festgelegt wird
    ;Sortierung ist notwendig damit die Waren einer Stadt hinereinander kommen die Standardsortierung ginge auch dann sind aber die Preise nicht korrekt aufsteigend sortiert
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    ;================
    _arraySort2D_MC($aEK, $sColSortOrder) ;sortiert Preise aufsteigend bei gleichem Preis 2. Kriterium Warenname
    $iUBoundEK = UBound($aEK) - 9 ;7 für die Schleifendurchgänge +1 weil 0-baisert +1 weil danach letztes Element die Spaltenüberschrift enthält
    For $iRow = 1 To 7 ;für Label(-Zeilen) 1 - 7
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart] ;Einkaufspreis aus Array holen
    $sWare = $aEK[$iUBoundEK + $iRow][0] ;Warenbezeichnung aus Array holen
    GUICtrlSetData($Ware[$iRow], $sWare) ;Warenbezeichnung in Label eintragen
    GUICtrlSetData($EK[$iRow], $iEK) ;Einkaufspreis eintragen
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0]) ;Ware im Array WAREN suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    ;Fehler im Array WAREN kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "") ;Gewicht leeren
    GUICtrlSetData($Stufe[$iRow], "") ;Stufe leeren
    Else
    ;das ist der Normalfall
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1]) ;Gewicht eintragen
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2]) ;Stufe eintragen
    EndIf
    GUICtrlSetData($VK[$iRow], "") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "") ;Gewinn leeren
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    ;==================
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    GUICtrlSetData($VK[$iRow], "---") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "---") ;Gewinn leeren
    Next
    Return ;keine ZielStadt ausgwählt also zurück
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label lesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $iWare < 0 Then
    ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    GUICtrlSetData($VK[$iRow], "") ;VK leeren
    Else
    ;das ist der Normalfall
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label auslesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel]) ;Verkaufspreis eintragen
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    ;====================
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    If Int($Laderaumfrei) <= 0 Then Return ;wenn kein Laderaum frei ist zurück
    For $iRow = 1 To 7 ;für Label(-Zeilen) 1-7
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow])) ;mögliche Anzahl für diese Ware ermitteln
    $iVK = Number(GUICtrlRead($VK[$iRow])) ;VK aus Label auslesen
    $iEK = Number(GUICtrlRead($EK[$iRow])) ;EK aus Label auslesen
    If $iVK > $iEK And $iEK > 0 Then
    ;VK-Preis muss grösser dem Einkaufspreis sein UND der Einkaufspreis muss auch grösser 0 sein (eher der Rgelfall)
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl) ;Gewinn berechnen und Label zuweisen
    Else
    ;Berechnung ist nicht möglich
    GUICtrlSetData($Ergebnis[$iRow], "---") ;zeigen dass mit dieser Ware kein Gewinn gemacht werden kann
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndFunc ;==>_Berechnung

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    ;Parameterübergabe
    ;$avArray zu sorterendes Array
    ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte
    ; zulässige Angaben:
    ; nur Spaltenindex = normale Sortierung
    ; Spaltenindex%N = numerische Sortierung
    ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT
    ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ
    ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend)
    ; die 1. Spalte wird Standard von _ArraySort verwendet
    ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt
    ; die 3. Spalte (%D) wird als Datum behandelt
    ;
    ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen
    ; =====================================================================
    ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert
    ; 1 Erfolg
    ;Autor: AutoBert 2010 https://autoit.de/index.php?page…1403#post141403
    ;==============================================================================================================

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

    $aCols = StringSplit($ColOrder, "|")
    ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF)
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    ;$aColformat[$i] = StringRight($aColformat[$i], 1)
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N" ;numerisch
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    ;ConsoleWrite(StringFormat("%99s", $avArray[$i][$iCol]) & @CRLF)
    Case "D" ;Datum JJJJ/MM/TT
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    ;consolewrite($sRow & @CRLF)
    Next
    _ArraySort($avArray)
    ;_ArrayDisplay($avArray)
    ;_ArrayDisplay($aColformat, "FormatStrings")
    ;_ArrayDisplay($aCols, "Cols")
    ;consolewrite($iCols & @CRLF)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    ; Case "X"

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

    ;#cs
    Case "N" ;numerisch
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    ;consolewrite(" N: " & $avArray[$i][$iCol])
    Case "D" ;Datum JJJJ/MM/TT
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    ;#ce
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    ;consolewrite(" : " & $avArray[$i][$iCol])
    EndSwitch
    Next
    ;consolewrite(@CRLF)
    Next
    Return 1
    ;_ArrayDisplay($avArray)
    EndFunc ;==>_arraySort2D_MC

    [/autoit]

    Ich war am überlegen ob ich anstelle der Labels eine LV verwende, war dann aber zu bequem und habe deine GUI verwendet (in diesem Teil sind sicher noch Optimierungen möglich). Zum Testen legst du am besten obiges Skript zusammen mit den CSV-Dateien in einen separtaten Ordner,

    Edits: Skript noch etwas optimiert und Fehlerbehandlungen eingebaut. Und das ganze besser kommentiert.

    PS.:spricht etwas dagegen wenn ich mit den Daten ein Beispielskript (SQLite) erstelle? Ist das Spiel kostenfrei?

    mfg autoBert

  • Hallo autoBert,

    erstmal ein ganz ganz großes DANKE an dich für die Mühe die du dir hier gemacht hast!
    Ich muss zugeben das ich mit deiner Art des Skriptens (da ich es net kenne) gerade ziehmlich überfordert und Confused ?( bin!!!
    Das Problem dabei ist, das ich doch einiges ein wenig anders haben wöllte, jedoch anhand dieses Skriptes es selber nicht kann, denn ohne Durchsicht nichts machbar. Ausserdem sollte noch was dazu kommen, wo ich aber nun selber nicht so einfach Hand anlegen kann, da ich wie gesagt gerade überfordert bin und net durchsehe. ;(
    Zu deiner Aussage ---> (mit Excel wäre auch eine schöne Lösung möglich) magst du zwar recht haben, jedoch soll es bei all unseren Programmen so sein das diese ohne zusatzprogramme ausgefürt werden können, da sie schlussendlich alle in ein Tool kommen!
    Zu deiner zweiten Aussage ---> (Ich war am überlegen ob ich anstelle der Labels eine LV verwende) gut das du es nicht gemacht hast, denn ich möchte keine Listview sondern eben Label´s.

    Ich habe noch paar Fragen und ausserdem erläutere ich eben mal was ich wie gerne ändern wöllte.

    Zu den Fragen:

    1. Woher hast du die ganzen Verkaufspreise oder sind die ausgedacht?
    2. Die waren stimmen nicht immer mit den Städten wo es sie gibt überein. (zb. Accra gibt es kein Zucker) Hast du die wahllos eingetragen? Desweiteren werden bei den Städten statt 6 = 7 Waren angezeigt bei ek und vk. Aber eine stadt verkauft nur 6 Waren!
    3. Die Ware Bernstein wird zwar im skript wiedergegeben, jedoch ist sie weder in der VK noch EK liste aufgeführt :?:
    3. Kann man die Städte nicht auch wie in der VK Übersicht auch in der EK Übersicht anzeigen lassen?
    4. Kann man das nicht abstellen das diese Übersichten immer kommen wenn man eine stadt auswählt und die lieber über 2 Buttons auswählen lassen wenn man diese sehen möchte, denn das nervt schon ganz schön! SELBER ERLEDIGT
    5. Kann in den ComboBoxen net wie vorher Stadt Wählen stehen am Anfang?
    6. Bei der Berechnung haut was net hin, obwohl überall ek und vk preise da sind statt 0 wird bei manchen N/A ausgegeben!

    Muss erstmal fix die kleine ins bett bringen danach füge ich noch ein was eigentlich noch dazu kommen sollte!

    Aber wie gesagt, soweit ganz ganz super tolle arbeit von dir :!: :!: :!: :thumbup: :thumbup: :rock: ;)

    Mfg Ghostleader

    PS. Von mir leicht verändertes Script:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False

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

    Local $aTmp

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

    #Region ;Waren.CSV einlesen und in 2D-Array speichern
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Local $aWaren[$iRows][$iCols]
    ;Warenbezeichnung Gewicht und Stufe in Waren-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region ;Verkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Local $aVK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in VK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region ;Einkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus EK.CSV")
    $iCols = $aOrte[0]

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

    Local $aEK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in EK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sComboText = ''
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $Startstadt = GUICtrlCreateCombo("Wähle Stadt", 85, 75, 110, 130)
    GUICtrlSetData(-1, $sComboText)
    $Zielstadt = GUICtrlCreateCombo("Wähle Stadt", 212, 75, 110, 25)
    GUICtrlSetData(-1, $sComboText, 1)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $test[8], $iHeight = 230
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 680, $iHeight, 150, 35)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 335, $iHeight, 80, 20)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $test[$i] = GUICtrlCreateLabel("", 645, 190, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $iHeight += 30
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 645, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Berechnung = GUICtrlCreateLabel("Berechnung starten", 730, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung &Starten", 745, 75, 130, 20)
    GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 105, 130, 20)
    GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 135, 130, 20)
    GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("0", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt
    $sStart = GUICtrlRead($Startstadt)
    $sZiel = GUICtrlRead($Zielstadt)
    $iStart = _ArraySearch($aOrte, $sStart) - 1
    ConsoleWrite($iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    ;_ArraySort($aEK, 1, 0, 0, $iStart) ;später arraySort2D_MC.au3 nehmen
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    _arraySort2D_MC($aEK, $sColSortOrder) ;sortiert Preise aufsteigend bei gleichem Preis 2. Kriteriu Warenname
    $iUBoundEK = UBound($aEK) - 9 ;7 für die Schleifendurchgänge +1 weil 0-baisert +1 weil danach letztes Element die Spaltenüberschrift enthält
    For $iRow = 1 To 7
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart]
    GUICtrlSetData($Ware[$iRow], $aEK[$iUBoundEK + $iRow][0])
    GUICtrlSetData($EK[$iRow], $iEK)
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0])
    ConsoleWrite($iWare & @CRLF)
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1])
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2])
    Next
    ;If $bDebug Then
    Case $ListeEK
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung " & $aEK)

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

    Case $Zielstadt
    $sStart = GUICtrlRead($Startstadt)
    $sZiel = GUICtrlRead($Zielstadt)
    $sStart = GUICtrlRead($Startstadt)
    $sZiel = GUICtrlRead($Zielstadt)
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1
    ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    ;if $bDebug Then _ArraySort($aVK, 1, 0, 0, 0)
    For $iRow = 1 To 7
    $sWare = GUICtrlRead($Ware[$iRow])
    $iWare = _ArraySearch($aVK, $sWare)
    ConsoleWrite($iWare & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel])
    If GUICtrlRead($Zielstadt) = GUICtrlRead($Startstadt) Then
    GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    Else
    GUICtrlSetState($BerechnungStart, $GUI_ENABLE)
    EndIf
    Next
    ;If $bDebug Then
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    #cs
    $aRegExp = StringRegExp(FileRead(@ScriptDir & "\VK\" & GUICtrlRead($Startstadt) & ".csv"), GUICtrlRead($Zielstadt) & ",(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?)," & _
    "(.+?),(.+?),(.+?),(.+?),(.+?)", 3)
    For $j = 0 To UBound($aRegExp) - 1 Step +2
    GUICtrlSetData($VK[$iRow], $aRegExp[$j + 1])
    $iRow += 1
    Next
    #ce
    ;~ _ArrayDisplay($aRegExp)
    Case $BerechnungStart
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    For $iRow = 1 To 7
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow]))
    $iVK = GUICtrlRead($VK[$iRow])
    $iEK = GUICtrlRead($EK[$iRow])
    If $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl)
    Else
    GUICtrlSetData($Ergebnis[$iRow], "N/A")
    EndIf
    ConsoleWrite("VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndSwitch
    WEnd

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder)
    ;Parameterübergabe
    ;$avArray zu sorterendes Array
    ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte
    ; zulässige Angaben:
    ; nur Spaltenindex = normale Sortierung
    ; Spaltenindex%N = numerische Sortierung
    ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT
    ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ
    ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend)
    ; die 1. Spalte wird Standard von _ArraySort verwendet
    ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt
    ; die 3. Spalte (%D) wird als Datum behandelt
    ;
    ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen
    ; =====================================================================
    ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert
    ; 1 Erfolg
    ;Autor: AutoBert 2010 https://autoit.de/index.php?page…1403#post141403
    ;==============================================================================================================

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

    $aCols = StringSplit($ColOrder, "|")
    ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF)
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    ;$aColformat[$i] = StringRight($aColformat[$i], 1)
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N" ;numerisch
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    ;ConsoleWrite(StringFormat("%99s", $avArray[$i][$iCol]) & @CRLF)
    Case "D" ;Datum JJJJ/MM/TT
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    ;consolewrite($sRow & @CRLF)
    Next
    _ArraySort($avArray)
    ;_ArrayDisplay($avArray)
    ;_ArrayDisplay($aColformat, "FormatStrings")
    ;_ArrayDisplay($aCols, "Cols")
    ;consolewrite($iCols & @CRLF)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    ; Case "X"

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

    ;#cs
    Case "N" ;numerisch
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    ;consolewrite(" N: " & $avArray[$i][$iCol])
    Case "D" ;Datum JJJJ/MM/TT
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    ;#ce
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    ;consolewrite(" : " & $avArray[$i][$iCol])
    EndSwitch
    Next
    ;consolewrite(@CRLF)
    Next
    Return 1
    ;_ArrayDisplay($avArray)
    EndFunc ;==>_arraySort2D_MC

    [/autoit]

    3 Mal editiert, zuletzt von Ghostleader (18. November 2011 um 22:59)

  • Ich muss zugeben das ich mit deiner Art des Skriptens (da ich es net kenne) gerade ziehmlich überfordert und Confused ?( bin!!!
    Das Problem dabei ist, das ich doch einiges ein wenig anders haben wöllte, jedoch anhand dieses Skriptes es selber nicht kann, denn ohne Durchsicht nichts machbar. Ausserdem sollte noch was dazu kommen, wo ich aber nun selber nicht so einfach Hand anlegen kann, da ich wie gesagt gerade überfordert bin und net durchsehe. ;(


    Der Durchblick kommt mit dem Durcharbeiten der dir unbekannten Befehle, ausserdem hab ich jetzt zusätzliche Kommentare eingefügt somit sollte es auch leichter zu verstehen sein.

    zu

    • "Woher hast du die ganzen Verkaufspreise oder sind die ausgedacht?" die CSV's die ich einlese habe ich aus der warenhandel.xls mit OpenOffice Calc (da kein Excel installiert) erzeugt, eine Zipdatei mit diesen CSV's ist auch in meinem vorigen Post angehängt. Es sind also Originaldaten zuletzt geändert am 25.10.201117:59 der Author heist mit Vorname Michael Nachname D*******. Die Exceldatei hattest du in einem anderen Thema eingestellt.
    • "Die waren stimmen nicht immer mit den Städten wo es sie gibt überein. "siehe 1." oder ich habe die For-Schleifenlaufvariable falsch gesetzt (syncron zu deinen erzeugten Labels) dann müsste aber bei allen Städten die 1. angezeigte Ware mit EK 0 erscheinen
    • "Die Ware Bernstein wird zwar im skript wiedergegeben, jedoch ist sie weder in der VK noch EK liste aufgeführt" siehe 1. Bernstein ist in deiner XLS sowohl in der EK als auch VK-Liste enthalten
    • "Kann man die Städte nicht auch wie in der VK Übersicht auch in der EK Übersicht anzeigen lassen?" Diese Übersichten sind eigentlich nur eine Hilfe während des Programmierens, sie können mit dem Schalter $bDebug (Zeile 8) an und ausgestellt werden, würden aber im normalen Programmablauf nur stören wie du ja selbst schon bemerkt hast
    • "Kann man das nicht abstellen das diese Übersichten immer kommen wenn man eine stadt auswählt und die lieber über 2 Buttons auswählen lassen wenn man diese sehen möchte" siehe vorhergehenden Punkt. Falls du sie über Buttons einblendest, solltest du das Array $aEK vorher sortieren:[autoit]_ArraySort($aEK) [/autoit]da sonst die Spaltenüberschrift eine Unterschrift ist also immer als letztes kommt, dies hat aber den Vorteil, dass die Preise für die Stadt aufsteigend sortiert sind
    • hier stand was mit VK-Preisen bei Start = Zielhier ist nichts unmöglich aber ich habe jetzt nicht genau verstanden was du genau möchtest, du kannst es ja selbst ändern (Zeile 226)
    • ist erledigt
    • "6. Bei der Berechnung haut was net hin, obwohl überall ek und vk preise da sind statt 0 wird bei manchen N/A ausgegeben!
      " sollte im aktuellen Stand nicht mehr vorkommen. Diesen solltest du unbedingt alsGrundlage nehmen, da ich einige kleine Änderungen und vor allem Kommentierungen vorgenommen habe und ich dies nicht noch einmal tun möchte.

    Hier mein aktueller Stand die beiden Buttons für die _ArrayDisplays habe ich von dir übernommen:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region ;Waren.CSV einlesen und in 2D-Array speichern
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]
    ;Warenbezeichnung Gewicht und Stufe in Waren-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region ;Verkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in VK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region ;Einkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in EK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 85, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 212, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $test[8], $iHeight = 200 ;war 230
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 610, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #cs
    $test[$i] = GUICtrlCreateLabel("", 645, 190, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #ce
    $iHeight += 45 ;war 30
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 645, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Berechnung = GUICtrlCreateLabel("Berechnung starten", 730, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung &Starten", 745, 75, 130, 20) ;eigentlich unnötig geworden
    ;GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 105, 130, 20)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 135, 130, 20)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("1000", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt, $BerechnungStart
    _Berechnung($nMsg)
    Case $ListeEK
    _ArraySort($aEK)
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung ")
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return ;keine StartStadt ausgwählt also zurück
    $iStart = _ArraySearch($aOrte, $sStart) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    ;_ArraySort($aEK, 1, 0, 0, $iStart) ;umgestellt auf arraySort2D_MC

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

    ;============ nötig für arraySort2D_MC
    ;es wird ein String gebildet in dem die Reihenfolge und Art der Sortierung festgelegt wird
    ;Sortierung ist notwendig damit die Waren einer Stadt hinereinander kommen die Standardsortierung ginge auch dann sind aber die Preise nicht korrekt aufsteigend sortiert
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    ;================
    _arraySort2D_MC($aEK, $sColSortOrder) ;sortiert Preise aufsteigend bei gleichem Preis 2. Kriterium Warenname
    $iUBoundEK = UBound($aEK) - 9 ;7 für die Schleifendurchgänge +1 weil 0-baisert +1 weil danach letztes Element die Spaltenüberschrift enthält
    For $iRow = 1 To 7 ;für Label(-Zeilen) 1 - 7
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart] ;Einkaufspreis aus Array holen
    $sWare = $aEK[$iUBoundEK + $iRow][0] ;Warenbezeichnung aus Array holen
    GUICtrlSetData($Ware[$iRow], $sWare) ;Warenbezeichnung in Label eintragen
    GUICtrlSetData($EK[$iRow], $iEK) ;Einkaufspreis eintragen
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0]) ;Ware im Array WAREN suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    ;Fehler im Array WAREN kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "") ;Gewicht leeren
    GUICtrlSetData($Stufe[$iRow], "") ;Stufe leeren
    Else
    ;das ist der Normalfall
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1]) ;Gewicht eintragen
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2]) ;Stufe eintragen
    EndIf
    GUICtrlSetData($VK[$iRow], "") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "") ;Gewinn leeren
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    ;==================
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    GUICtrlSetData($VK[$iRow], "---") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "---") ;Gewinn leeren
    Next
    Return ;keine ZielStadt ausgwählt also zurück
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label lesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $iWare < 0 Then
    ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    GUICtrlSetData($VK[$iRow], "") ;VK leeren
    Else
    ;das ist der Normalfall
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label auslesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel]) ;Verkaufspreis eintragen
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    ;====================
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    If Int($Laderaumfrei) <= 0 Then Return ;wenn kein Laderaum frei ist zurück
    For $iRow = 1 To 7 ;für Label(-Zeilen) 1-7
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow])) ;mögliche Anzahl für diese Ware ermitteln
    $iVK = Number(GUICtrlRead($VK[$iRow])) ;VK aus Label auslesen
    $iEK = Number(GUICtrlRead($EK[$iRow])) ;EK aus Label auslesen
    If $iVK > $iEK And $iEK > 0 Then
    ;VK-Preis muss grösser dem Einkaufspreis sein UND der Einkaufspreis muss auch grösser 0 sein (eher der Rgelfall)
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl) ;Gewinn berechnen und Label zuweisen
    Else
    ;Berechnung ist nicht möglich oder Verkauf unnsinnig
    GUICtrlSetData($Ergebnis[$iRow], "---") ;zeigen dass mit dieser Ware kein Gewinn gemacht werden kann
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndFunc ;==>_Berechnung

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    ;Parameterübergabe
    ;$avArray zu sorterendes Array
    ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte
    ; zulässige Angaben:
    ; nur Spaltenindex = normale Sortierung
    ; Spaltenindex%N = numerische Sortierung
    ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT
    ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ
    ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend)
    ; die 1. Spalte wird Standard von _ArraySort verwendet
    ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt
    ; die 3. Spalte (%D) wird als Datum behandelt
    ;
    ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen
    ; =====================================================================
    ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert
    ; 1 Erfolg
    ;Autor: AutoBert 2010 https://autoit.de/index.php?page…1403#post141403
    ;==============================================================================================================

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

    $aCols = StringSplit($ColOrder, "|")
    ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF)
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    ;$aColformat[$i] = StringRight($aColformat[$i], 1)
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N" ;numerisch
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    ;ConsoleWrite(StringFormat("%99s", $avArray[$i][$iCol]) & @CRLF)
    Case "D" ;Datum JJJJ/MM/TT
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    ;consolewrite($sRow & @CRLF)
    Next
    _ArraySort($avArray)
    ;_ArrayDisplay($avArray)
    ;_ArrayDisplay($aColformat, "FormatStrings")
    ;_ArrayDisplay($aCols, "Cols")
    ;consolewrite($iCols & @CRLF)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    ; Case "X"

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

    ;#cs
    Case "N" ;numerisch
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    ;consolewrite(" N: " & $avArray[$i][$iCol])
    Case "D" ;Datum JJJJ/MM/TT
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    ;#ce
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    ;consolewrite(" : " & $avArray[$i][$iCol])
    EndSwitch
    Next
    ;consolewrite(@CRLF)
    Next
    Return 1
    ;_ArrayDisplay($avArray)
    EndFunc ;==>_arraySort2D_MC

    [/autoit]

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (18. November 2011 um 23:53)

  • Hallo autoBrt,

    danke für deine Mühen.

    Also das mit den Übersichten wie gesagt finde ich ganz toll habe es ja auch so umgebaut das diese via Button aufrufbar sind statt beim scrollen zu kommen.

    Was ich damit meine ---> 2. Die waren stimmen nicht immer mit den Städten wo es sie gibt überein. (zb. Accra gibt es kein Zucker) Hast du die wahllos eingetragen? Desweiteren werden bei den Städten statt 6 = 7 Waren angezeigt bei ek und vk. Aber eine stadt verkauft nur 6 Waren!

    ist das zwar auch in den csv´s von dir nur sechs waren sind wie es ja auch sein soll, jedoch werden irgendwie 7 ausgelesen und angezeigt!

    Auch werde ich mir mal deine Änderungen und erklährungen ansehen mal sehen ob ich da beser klar komme!

    Mfg Ghostleader

  • Was ich damit meine ---> 2. Die waren stimmen nicht immer mit den Städten wo es sie gibt überein. (zb. Accra gibt es kein Zucker) Hast du die wahllos eingetragen? Desweiteren werden bei den Städten statt 6 = 7 Waren angezeigt bei ek und vk. Aber eine stadt verkauft nur 6 Waren!


    Das ist war dann wohl das Problem (sollte dann aber beijeder Stadt bei der 1. angezeigten Ware vorgekommen sein), aber warum erzeugst du dann 7 Reihen mit Labels zur Aufnahme von Werten?

    Hier deraktuelle Stand:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region ;Waren.CSV einlesen und in 2D-Array speichern
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]
    ;Warenbezeichnung Gewicht und Stufe in Waren-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region ;Verkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in VK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region ;Einkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in EK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 85, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 212, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $test[8], $iHeight = 200 ;war 230
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 610, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #cs
    $test[$i] = GUICtrlCreateLabel("", 645, 190, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #ce
    $iHeight += 45 ;war 30
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 645, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Berechnung = GUICtrlCreateLabel("Berechnung starten", 730, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung &Starten", 745, 75, 130, 20) ;eigentlich unnötig geworden
    ;GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 105, 130, 20)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 135, 130, 20)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("1000", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt, $BerechnungStart
    _Berechnung($nMsg)
    Case $ListeEK
    _ArraySort($aEK)
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung ")
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return ;keine StartStadt ausgwählt also zurück
    $iStart = _ArraySearch($aOrte, $sStart) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    ;_ArraySort($aEK, 1, 0, 0, $iStart) ;umgestellt auf arraySort2D_MC

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

    ;============ nötig für arraySort2D_MC
    ;es wird ein String gebildet in dem die Reihenfolge und Art der Sortierung festgelegt wird
    ;Sortierung ist notwendig damit die Waren einer Stadt hinereinander kommen die Standardsortierung ginge auch dann sind aber die Preise nicht korrekt aufsteigend sortiert
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    ;================
    _arraySort2D_MC($aEK, $sColSortOrder) ;sortiert Preise aufsteigend bei gleichem Preis 2. Kriterium Warenname
    $iUBoundEK = UBound($aEK) - 8 ;6 für die Schleifendurchgänge +1 weil 0-baisert +1 weil danach letztes Element die Spaltenüberschrift enthält
    For $iRow = 1 To 6 ;für Label(-Zeilen) 1 - 6
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart] ;Einkaufspreis aus Array holen
    $sWare = $aEK[$iUBoundEK + $iRow][0] ;Warenbezeichnung aus Array holen
    GUICtrlSetData($Ware[$iRow], $sWare) ;Warenbezeichnung in Label eintragen
    GUICtrlSetData($EK[$iRow], $iEK) ;Einkaufspreis eintragen
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0]) ;Ware im Array WAREN suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    ;Fehler im Array WAREN kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "") ;Gewicht leeren
    GUICtrlSetData($Stufe[$iRow], "") ;Stufe leeren
    Else
    ;das ist der Normalfall
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1]) ;Gewicht eintragen
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2]) ;Stufe eintragen
    EndIf
    GUICtrlSetData($VK[$iRow], "") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "") ;Gewinn leeren
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    ;==================
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    GUICtrlSetData($VK[$iRow], "---") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "---") ;Gewinn leeren
    Next
    Return ;keine ZielStadt ausgwählt also zurück
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 6 ;für Label(-zeilen) 1-6
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label lesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $iWare < 0 Then
    ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    GUICtrlSetData($VK[$iRow], "") ;VK leeren
    Else
    ;das ist der Normalfall
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label auslesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel]) ;Verkaufspreis eintragen
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    ;====================
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    If Int($Laderaumfrei) <= 0 Then Return ;wenn kein Laderaum frei ist zurück
    For $iRow = 1 To 6 ;für Label(-Zeilen) 1-6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow])) ;mögliche Anzahl für diese Ware ermitteln
    $iVK = Number(GUICtrlRead($VK[$iRow])) ;VK aus Label auslesen
    $iEK = Number(GUICtrlRead($EK[$iRow])) ;EK aus Label auslesen
    If $iVK > $iEK And $iEK > 0 Then
    ;VK-Preis muss grösser dem Einkaufspreis sein UND der Einkaufspreis muss auch grösser 0 sein (eher der Rgelfall)
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl) ;Gewinn berechnen und Label zuweisen
    Else
    ;Berechnung ist nicht möglich oder Verkauf unnsinnig
    GUICtrlSetData($Ergebnis[$iRow], "---") ;zeigen dass mit dieser Ware kein Gewinn gemacht werden kann
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndFunc ;==>_Berechnung

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    ;Parameterübergabe
    ;$avArray zu sorterendes Array
    ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte
    ; zulässige Angaben:
    ; nur Spaltenindex = normale Sortierung
    ; Spaltenindex%N = numerische Sortierung
    ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT
    ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ
    ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend)
    ; die 1. Spalte wird Standard von _ArraySort verwendet
    ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt
    ; die 3. Spalte (%D) wird als Datum behandelt
    ;
    ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen
    ; =====================================================================
    ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert
    ; 1 Erfolg
    ;Autor: AutoBert 2010 https://autoit.de/index.php?page…1403#post141403
    ;==============================================================================================================

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

    $aCols = StringSplit($ColOrder, "|")
    ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF)
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    ;$aColformat[$i] = StringRight($aColformat[$i], 1)
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N" ;numerisch
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    ;ConsoleWrite(StringFormat("%99s", $avArray[$i][$iCol]) & @CRLF)
    Case "D" ;Datum JJJJ/MM/TT
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    ;consolewrite($sRow & @CRLF)
    Next
    _ArraySort($avArray)
    ;_ArrayDisplay($avArray)
    ;_ArrayDisplay($aColformat, "FormatStrings")
    ;_ArrayDisplay($aCols, "Cols")
    ;consolewrite($iCols & @CRLF)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    ; Case "X"

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

    ;#cs
    Case "N" ;numerisch
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    ;consolewrite(" N: " & $avArray[$i][$iCol])
    Case "D" ;Datum JJJJ/MM/TT
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    ;#ce
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    ;consolewrite(" : " & $avArray[$i][$iCol])
    EndSwitch
    Next
    ;consolewrite(@CRLF)
    Next
    Return 1
    ;_ArrayDisplay($avArray)
    EndFunc ;==>_arraySort2D_MC

    [/autoit]
  • Guten Morgen zusammen,

    vielen Dank erstmal wieder an dich autoBert denn es klappt jetzt einwandfrei!

    Nun weiter:
    Ich habe die rechnung:

    Spoiler anzeigen
    [autoit]

    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    For $iRow = 1 To 6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow]))
    $iVK = Number(GUICtrlRead($VK[$iRow]))
    $iEK = Number(GUICtrlRead($EK[$iRow]))
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow], (GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)) / GUICtrlRead($Gewicht[$iRow]))
    EndIf
    If $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl)
    Else
    GUICtrlSetData($Ergebnis[$iRow], "N/A")
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next

    [/autoit]


    Um:

    Spoiler anzeigen
    [autoit]

    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow], (GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)) / GUICtrlRead($Gewicht[$iRow]))
    EndIf

    [/autoit]


    erweitert, was ja auch super klappt! Mein Problem ist nun das wenn er zb 1000/65 rechnet ganz otopische Zahlen raus kommen.

    Frage daher:
    Kann man in Autoit sagen das er runden soll, also nicht mit Komma ausrechnet denn es ist so, das man nur ganze Waren keine halben mitnehmen kann!

    Mfg Ghostleader

  • Diese Rechnung exitsiert doch schon. In Variable

    [autoit]

    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow])) ;mögliche Anzahl für diese Ware ermitteln

    [/autoit]

    Du musst also nur diesen Wert deinem neuen Label zuweisen. Dass es nur ganze Stück sein können dafür sorgt Int:

    Zitat von 'aus der dt. Hilfe zu Int

    Gibt einen Integer (ganze Zahl) eines Ausdrucks zurück.
    ...
    Bemerkungen

    Kommazahlen werden abgeschnitten, also Int(1.999999) ergibt 1.

    Da ich in deinem Codeschnipsel nicht die extra erstellten Kommentare sehe vermute ich dass du immer noch mit einer veralteten Version des Codes weiter entwickelst, stutzig macht mich vor allem dass in dem 1. Codeschnipsel die Variable $AnzahlStuk[] schon exisitiert.

    mfg autoBert

  • Hallo autoBert,

    vielen Dank wieder für deine schnelle und tolle Antwort.

    Ich verwende wenn ich mich nicht irre den letzten Code siehe hier:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 900, 480, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("Handel2.jpg", 0, 0, 900, 480)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 85, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 212, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $AnzahlStuk[8], $iHeight = 200
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 710, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $AnzahlStuk[$i] = GUICtrlCreateLabel("", 655, $iHeight, 45, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $iHeight += 45
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stuk = GUICtrlCreateLabel("Anzahl-Stück", 620, 160, 125, 35)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 745, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Listen = GUICtrlCreateLabel("Listen Übersicht", 743, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 75, 130, 20)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 105, 130, 20)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("0", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt
    _Berechnung($nMsg)
    Case $ListeEK
    _ArraySort($aEK)
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung ")
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return
    $iStart = _ArraySearch($aOrte, $sStart) - 1
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    _arraySort2D_MC($aEK, $sColSortOrder)
    $iUBoundEK = UBound($aEK) - 8
    For $iRow = 1 To 6
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart]
    $sWare = $aEK[$iUBoundEK + $iRow][0]
    GUICtrlSetData($Ware[$iRow], $sWare)
    GUICtrlSetData($EK[$iRow], $iEK)
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0])
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "")
    GUICtrlSetData($Stufe[$iRow], "")
    Else
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1])
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2])
    EndIf
    GUICtrlSetData($VK[$iRow], "")
    GUICtrlSetData($Ergebnis[$iRow], "")
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 6
    GUICtrlSetData($VK[$iRow], "---")
    GUICtrlSetData($Ergebnis[$iRow], "---")
    Next
    Return
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 6
    $sWare = GUICtrlRead($Ware[$iRow])
    $iWare = _ArraySearch($aVK, $sWare)
    If $iWare < 0 Then
    GUICtrlSetData($VK[$iRow], "")
    Else
    $sWare = GUICtrlRead($Ware[$iRow])
    $iWare = _ArraySearch($aVK, $sWare)
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel])
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    For $iRow = 1 To 6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow]))
    $iVK = Number(GUICtrlRead($VK[$iRow]))
    $iEK = Number(GUICtrlRead($EK[$iRow]))
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow], (GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)) / GUICtrlRead($Gewicht[$iRow]))
    EndIf
    If $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl)
    Else
    GUICtrlSetData($Ergebnis[$iRow], "N/A")
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndFunc

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    $aCols = StringSplit($ColOrder, "|")
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N"
    $sRow &= StringFormat("s", $avArray[$i][$iCol])
    Case "D"
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G"
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    Next
    _ArraySort($avArray)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    Case "N"
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    Case "D"
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G"
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    EndSwitch
    Next
    Next
    Return 1
    EndFunc

    [/autoit]


    Das einzige was ich bei dem den ich weiter bearbeite gemacht habe ist die Erklährungen zu entfernen, da mich diese verwirren und dafür habe ich immer dein beschriftetes nebenbei auf wo ich nachsehen kann wenn ich mit etwas nicht klar komme!
    Ja jetzt wo du es siehst, ist je echt so das du die Rechnung schon aufgestellt hast ^^ .

    Zu (stutzig macht mich vor allem dass in dem 1. Codeschnipsel die Variable $AnzahlStuk[] schon exisitiert. ) ist zusagen, das dies das Label ist was ich für die Ausgabe der rechnung erstellt habe!

    Mfg Ghostleader

    PS:
    Habe es mal versucht die Rechnung zu ändern, aber irgendwie will sie so net mehr das gweicht anzeigen:

    Spoiler anzeigen
    [autoit]

    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    For $iRow = 1 To 6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow]))
    $iVK = Number(GUICtrlRead($VK[$iRow]))
    $iEK = Number(GUICtrlRead($EK[$iRow]))
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk, Int($Laderaumfrei) / GUICtrlRead($Gewicht[$iRow]))
    EndIf
    If $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl)
    Else
    GUICtrlSetData($Ergebnis[$iRow], "N/A")
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next

    [/autoit]

    EDIT:

    Spoiler anzeigen
    [autoit]

    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow], Int($Laderaumfrei) / GUICtrlRead($Gewicht[$iRow]))
    EndIf

    [/autoit]


    So geht die Rechnung zwar wieder, jedoch immernoch mit den otopischen Zahlen.

    3 Mal editiert, zuletzt von Ghostleader (19. November 2011 um 14:08)

  • Hallo Ghostleader,

    ich weis nicht was du für einen Bug eingebaut hast (gar nicht gesucht). Ich habe meinen letzten Stand genommen deine Änderung der GUI (Stückzahlen) reinkopiert, die bereits berechnete Anzahl dem entsprechenden Label zugewiesen, eine kleine kosmetische Korrektur gemacht (VK jetzt auch --- wenn 0), siehe da lief sofort:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region ;Waren.CSV einlesen und in 2D-Array speichern
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]
    ;Warenbezeichnung Gewicht und Stufe in Waren-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region ;Verkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in VK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region ;Einkauspreise einlesen und in 2D-Array eintragen
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    ;Orte Warenbezeichnung und Preise in EK-Array eintragen
    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 1000, 520, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Alex Sindy Amy\Desktop/Handel.jpg", 0, 0, 1000, 520)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 85, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 212, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $AnzahlStuk[8], $iHeight = 200
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 710, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $AnzahlStuk[$i] = GUICtrlCreateLabel("", 655, $iHeight, 45, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $iHeight += 45
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stuk = GUICtrlCreateLabel("Anzahl-Stück", 620, 160, 125, 35)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 745, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 110, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 237, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Max-Lade-Kapazität", 345, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 540, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Listen = GUICtrlCreateLabel("Listen Übersicht", 743, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $BerechnungStart = GUICtrlCreateButton("Berechnung &Starten", 745, 75, 130, 20) ;eigentlich unnötig geworden
    ;GUICtrlSetState($BerechnungStart, $GUI_DISABLE)
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 105, 130, 20)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 135, 130, 20)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("1000", 360, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 553, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt, $BerechnungStart
    _Berechnung($nMsg)
    Case $ListeEK
    _ArraySort($aEK)
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung ")
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return ;keine StartStadt ausgwählt also zurück
    $iStart = _ArraySearch($aOrte, $sStart) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    ;_ArraySort($aEK, 1, 0, 0, $iStart) ;umgestellt auf arraySort2D_MC

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

    ;============ nötig für arraySort2D_MC
    ;es wird ein String gebildet in dem die Reihenfolge und Art der Sortierung festgelegt wird
    ;Sortierung ist notwendig damit die Waren einer Stadt hinereinander kommen die Standardsortierung ginge auch dann sind aber die Preise nicht korrekt aufsteigend sortiert
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    ;================
    _arraySort2D_MC($aEK, $sColSortOrder) ;sortiert Preise aufsteigend bei gleichem Preis 2. Kriterium Warenname
    $iUBoundEK = UBound($aEK) - 8 ;6 für die Schleifendurchgänge +1 weil 0-baisert +1 weil danach letztes Element die Spaltenüberschrift enthält
    For $iRow = 1 To 6 ;für Label(-Zeilen) 1 - 6
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart] ;Einkaufspreis aus Array holen
    $sWare = $aEK[$iUBoundEK + $iRow][0] ;Warenbezeichnung aus Array holen
    GUICtrlSetData($Ware[$iRow], $sWare) ;Warenbezeichnung in Label eintragen
    GUICtrlSetData($EK[$iRow], $iEK) ;Einkaufspreis eintragen
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0]) ;Ware im Array WAREN suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    ;Fehler im Array WAREN kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "") ;Gewicht leeren
    GUICtrlSetData($Stufe[$iRow], "") ;Stufe leeren
    Else
    ;das ist der Normalfall
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1]) ;Gewicht eintragen
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2]) ;Stufe eintragen
    EndIf
    GUICtrlSetData($VK[$iRow], "") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "") ;Gewinn leeren
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    ;==================
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 7 ;für Label(-zeilen) 1-7
    GUICtrlSetData($VK[$iRow], "---") ;Verkaufspreis leeren
    GUICtrlSetData($Ergebnis[$iRow], "---") ;Gewinn leeren
    Next
    Return ;keine ZielStadt ausgwählt also zurück
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1 ;dieses Element -1 im Array Ort = dem Spaltenindex im Array EK
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 6 ;für Label(-zeilen) 1-6
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label lesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $iWare < 0 Then
    ;Fehler im Array kann nicht vorkommen ausser es wird Skriptcode eingefügt der Arrayelemente löscht
    GUICtrlSetData($VK[$iRow], "") ;VK leeren
    Else
    ;das ist der Normalfall
    $sWare = GUICtrlRead($Ware[$iRow]) ;Ware aus Label auslesen
    $iWare = _ArraySearch($aVK, $sWare) ;Ware im Array VK suchen
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel]) ;Verkaufspreis eintragen
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    ;====================
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    If Int($Laderaumfrei) <= 0 Then Return ;wenn kein Laderaum frei ist zurück
    For $iRow = 1 To 6 ;für Label(-Zeilen) 1-6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow])) ;mögliche Anzahl für diese Ware ermitteln
    $iVK = Number(GUICtrlRead($VK[$iRow])) ;VK aus Label auslesen
    $iEK = Number(GUICtrlRead($EK[$iRow])) ;EK aus Label auslesen
    If $iVK > $iEK And $iEK > 0 Then
    ;VK-Preis muss grösser dem Einkaufspreis sein UND der Einkaufspreis muss auch grösser 0 sein (eher der Rgelfall)
    GUICtrlSetData($AnzahlStuk[$iRow],$anzahl) ;Anzahl Label zuweisen
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl) ;Gewinn berechnen und Label zuweisen
    Else
    ;Berechnung ist nicht möglich oder Verkauf unnsinnig
    GUICtrlSetData($Ergebnis[$iRow], "---") ;zeigen dass mit dieser Ware kein Gewinn gemacht werden kann
    GUICtrlSetData($AnzahlStuk[$iRow],"---");daher auch keine Stückzahl anzeigen
    if $iVK = 0 Then GUICtrlSetData($VK[$iRow],"---");zwecks einheitlicher Darstellung
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    Next
    EndFunc ;==>_Berechnung

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    ;Parameterübergabe
    ;$avArray zu sorterendes Array
    ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte
    ; zulässige Angaben:
    ; nur Spaltenindex = normale Sortierung
    ; Spaltenindex%N = numerische Sortierung
    ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT
    ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ
    ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend)
    ; die 1. Spalte wird Standard von _ArraySort verwendet
    ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt
    ; die 3. Spalte (%D) wird als Datum behandelt
    ;
    ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen
    ; =====================================================================
    ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert
    ; 1 Erfolg
    ;Autor: AutoBert 2010 https://autoit.de/index.php?page…1403#post141403
    ;==============================================================================================================

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

    $aCols = StringSplit($ColOrder, "|")
    ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF)
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    ;$aColformat[$i] = StringRight($aColformat[$i], 1)
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N" ;numerisch
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    ;ConsoleWrite(StringFormat("%99s", $avArray[$i][$iCol]) & @CRLF)
    Case "D" ;Datum JJJJ/MM/TT
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols])
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    ;consolewrite($sRow & @CRLF)
    Next
    _ArraySort($avArray)
    ;_ArrayDisplay($avArray)
    ;_ArrayDisplay($aColformat, "FormatStrings")
    ;_ArrayDisplay($aCols, "Cols")
    ;consolewrite($iCols & @CRLF)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    ; Case "X"

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

    ;#cs
    Case "N" ;numerisch
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    ;consolewrite(" N: " & $avArray[$i][$iCol])
    Case "D" ;Datum JJJJ/MM/TT
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    Case "G" ;Geburtstags-Datum MM/TT/JJJJ
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    ;consolewrite(" D: " & $avArray[$i][$iCol])
    ;#ce
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    ;consolewrite(" : " & $avArray[$i][$iCol])
    EndSwitch
    Next
    ;consolewrite(@CRLF)
    Next
    Return 1
    ;_ArrayDisplay($avArray)
    EndFunc ;==>_arraySort2D_MC

    [/autoit]

    mfg autoBert

  • Hallo autoBert,

    vielen vielen DANK wiedermal.

    Ich habe den Fehler bei mir anhand deines Einbaus gefunden. ---> siehe Spoiler

    Spoiler anzeigen
    [autoit]

    ; ICH HATTE VOLGENDES GESETZT
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow], Int($Laderaumfrei) / GUICtrlRead($Gewicht[$iRow]))

    ; DU HAST VOLGENDES GESETZT
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow],$anzahl)

    ; DAS WAR DER GANZE FEHLER!!!

    [/autoit]

    Langsam muss ich sagen steige ich dahinter wie du hier geskriptet hast, vorallem dank deiner tollen erklährungen! Wenn man erstmal dahinter steigt ist es eigentlich garnet so schwer wie du schon sagtest!

    Habe noch etwas hinzugefügt im Code. Eine Combobox die Ja und Nein beinhaltet und wenn eine Ware angesagt ist dann stellt man auf ja und es wird der Gewinn verdoppelt.

    Hier das gesammte Skript. Du kannst ja mal rein schauen wenn du magst und mir sagen ob es ok so ist oder ob man es besser machen könnte vom coden her!

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
    #include <file.au3>
    #include <Array.au3>

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

    Global $bDebug = False
    Global $sStart, $sZiel

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

    Local $aTmp

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

    #Region
    _FileReadToArray(@ScriptDir & "\Waren.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "Waren.CSV")

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

    $aSplit = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    $iCols = $aSplit[0]
    If $bDebug Then _ArrayDisplay($aSplit, "Waren Colheader")

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

    Global $aWaren[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aWaren[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    If $bDebug Then _ArrayDisplay($aWaren, "Waren")
    #EndRegion
    #Region
    _FileReadToArray(@ScriptDir & "\VK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "VK.CSV")

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

    $aOrte = StringSplit(StringReplace($aTmp[0], '"', ''), ";")
    If $bDebug Then _ArrayDisplay($aOrte, "Orte aus VK.CSV")
    $iCols = $aOrte[0]

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

    Global $aVK[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aVK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aVK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise")
    #EndRegion

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

    #Region
    _FileReadToArray(@ScriptDir & "\EK.csv", $aTmp)
    $iRows = $aTmp[0]
    _ArrayDelete($aTmp, 0)
    If $bDebug Then _ArrayDisplay($aTmp, "EK.CSV")
    $iCols = $aOrte[0]

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

    Global $aEK[$iRows][$iCols]

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

    For $iRow = 0 To $iRows - 1
    $aSplit = StringSplit(StringReplace($aTmp[$iRow], '"', ''), ";")
    For $iCol = 1 To $iCols
    $aEK[$iRow][$iCol - 1] = $aSplit[$iCol]
    Next
    Next
    $aEK[0][0]=" Waren/Städte"
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise")
    #EndRegion

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

    $Form1 = GUICreate("Stadtwaren Rechner", 900, 480, 380, 230)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Form1 = GUICtrlCreatePic("Handel2.jpg", 0, 0, 900, 480)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Local $sPleaseSelect = " Wähle Stadt"
    Local $sComboText = ""
    For $i = 1 To $aOrte[0]
    $sComboText &= $aOrte[$i] & "|"
    Next
    $sComboText &= $sPleaseSelect
    $Startstadt = GUICtrlCreateCombo("", 20, 75, 110, 130, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $Zielstadt = GUICtrlCreateCombo("", 147, 75, 110, 25, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $WS_TABSTOP))
    GUICtrlSetData(-1, $sComboText, $sPleaseSelect)
    $AngesagteWare = GUICtrlCreateCombo("Nein", 625, 75, 75, 130)
    GUICtrlSetData(-1, "Ja")

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

    GUISetState(@SW_SHOW)

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

    Local $Ergebnis[8], $Ware[8], $Stufe[8], $Gewicht[8], $EK[8], $VK[8], $AnzahlStuk[8], $iHeight = 200
    For $i = 1 To 7
    $Ware[$i] = GUICtrlCreateLabel("", 30, $iHeight, 190, 40)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stufe[$i] = GUICtrlCreateLabel("", 240, $iHeight, 25, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewicht[$i] = GUICtrlCreateLabel("", 300, $iHeight, 80, 20, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $EK[$i] = GUICtrlCreateLabel("", 435, $iHeight, 50, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $VK[$i] = GUICtrlCreateLabel("", 540, $iHeight, 60, 25, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ergebnis[$i] = GUICtrlCreateLabel("", 710, $iHeight, 100, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $AnzahlStuk[$i] = GUICtrlCreateLabel("", 655, $iHeight, 45, 35, $SS_Right)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $iHeight += 45
    Next

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

    #Region Übersicht Überschriften Labels
    $Warenname = GUICtrlCreateLabel("Ware", 80, 160, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Warenstufe = GUICtrlCreateLabel("Stufe", 225, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Einkauf = GUICtrlCreateLabel("EK-Preis", 415, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Verkauf = GUICtrlCreateLabel("VK-Preis", 530, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Stuk = GUICtrlCreateLabel("Anzahl-Stück", 620, 160, 125, 35)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewin = GUICtrlCreateLabel("Gewinn", 745, 160, 80, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Gewichtname = GUICtrlCreateLabel("Gewicht", 310, 160, 120, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Von = GUICtrlCreateLabel("Von", 45, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Nach = GUICtrlCreateLabel("Nach", 172, 50, 81, 158)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladung = GUICtrlCreateLabel("Lade-Kapazität", 278, 50, 160, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Ladungbelegt = GUICtrlCreateLabel("Belegter-Laderaum", 427, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $WareAngesagt = GUICtrlCreateLabel("Angesagte-Ware", 595, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Listen = GUICtrlCreateLabel("Listen Übersicht", 743, 50, 180, 25)
    GUICtrlSetFont(-1, 12, 600)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    #Region Buttons
    $ListeEK = GUICtrlCreateButton("Liste Einkaufspreise", 745, 75, 130, 20)
    $ListeVK = GUICtrlCreateButton("Liste Verkaufspreise", 745, 105, 130, 20)
    #EndRegion Buttons

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

    $InputLadung = GUICtrlCreateInput("0", 275, 75, 130, 21)
    $InputLadungbelegt = GUICtrlCreateInput("0", 438, 75, 130, 21)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Startstadt, $Zielstadt
    _Berechnung($nMsg)
    Case $ListeEK
    _ArraySort($aEK)
    _ArrayDisplay($aEK, "Einkaufspreise sortiert nach Warenbezeichnung ")
    Case $ListeVK
    _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndSwitch
    WEnd

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

    Func _Berechnung($nArt)
    If $nArt = $Startstadt Then
    $sStart = GUICtrlRead($Startstadt)
    If $sStart = $sPleaseSelect Then Return
    $iStart = _ArraySearch($aOrte, $sStart) - 1
    If $bDebug Then ConsoleWrite("Startiindex: " & $iStart & @TAB & $aEK[0][$iStart] & @CRLF)
    If $iStart < 0 Then
    MsgBox(16, "Fehler:", "Ware nicht im Einkaufsarray gefunden!")
    Return
    EndIf
    $sColSortOrder = $iStart & "%N|0"
    For $i = 1 To UBound($aEK, 2) - 1
    If $i <> $iStart Then $sColSortOrder &= "|" & $i
    Next
    _arraySort2D_MC($aEK, $sColSortOrder)
    $iUBoundEK = UBound($aEK) - 8
    For $iRow = 1 To 6
    $iEK = $aEK[$iUBoundEK + $iRow][$iStart]
    $sWare = $aEK[$iUBoundEK + $iRow][0]
    GUICtrlSetData($Ware[$iRow], $sWare)
    GUICtrlSetData($EK[$iRow], $iEK)
    $iWare = _ArraySearch($aWaren, $aEK[$iUBoundEK + $iRow][0])
    If $bDebug Then ConsoleWrite($iWare & " " & $aWaren[$iWare][1] & @CRLF)
    If $iWare < 0 Then
    MsgBox(16, "Fehler:", $aEK[$iUBoundEK + $iRow] & " nicht im Warenarray gefunden!")
    GUICtrlSetData($Gewicht[$iRow], "")
    GUICtrlSetData($Stufe[$iRow], "")
    Else
    GUICtrlSetData($Gewicht[$iRow], $aWaren[$iWare][1])
    GUICtrlSetData($Stufe[$iRow], $aWaren[$iWare][2])
    EndIf
    GUICtrlSetData($VK[$iRow], "")
    GUICtrlSetData($Ergebnis[$iRow], "")
    Next
    If $bDebug Then _ArrayDisplay($aEK, "Einkaufspreise sortiert für " & $aEK[0][$iStart])
    EndIf
    If $nArt = $Zielstadt Then
    $sZiel = GUICtrlRead($Zielstadt)
    If $sZiel = $sStart Or $sZiel = "" Or $sZiel = $sPleaseSelect Then
    For $iRow = 1 To 6
    GUICtrlSetData($VK[$iRow], "---")
    GUICtrlSetData($Ergebnis[$iRow], "---")
    Next
    Return
    EndIf
    $iZiel = _ArraySearch($aOrte, $sZiel) - 1
    If $bDebug Then ConsoleWrite($iZiel & @TAB & $aVK[0][$iZiel] & @CRLF)
    If $iZiel < 0 Then
    MsgBox(16, "Fehler:", "Ware nicht im Verkaufsarray gefunden!")
    Return
    EndIf
    For $iRow = 1 To 6
    $sWare = GUICtrlRead($Ware[$iRow])
    $iWare = _ArraySearch($aVK, $sWare)
    If $iWare < 0 Then
    GUICtrlSetData($VK[$iRow], "")
    Else
    $sWare = GUICtrlRead($Ware[$iRow])
    $iWare = _ArraySearch($aVK, $sWare)
    If $bDebug Then ConsoleWrite($iWare & " " & $aVK[$iWare][0] & @CRLF)
    GUICtrlSetData($VK[$iRow], $aVK[$iWare][$iZiel])
    EndIf
    Next
    If $bDebug Then _ArrayDisplay($aVK, "Verkaufspreise sortiert nach Warenbezeichnung")
    EndIf
    $Laderaumfrei = GUICtrlRead($InputLadung) - GUICtrlRead($InputLadungbelegt)
    If Int($Laderaumfrei) <= 0 Then Return
    For $iRow = 1 To 6
    $anzahl = Int($Laderaumfrei / GUICtrlRead($Gewicht[$iRow]))
    $iVK = Number(GUICtrlRead($VK[$iRow]))
    $iEK = Number(GUICtrlRead($EK[$iRow]))
    If $InputLadung > 0 Then
    GUICtrlSetData($AnzahlStuk[$iRow],$anzahl)
    EndIf
    If GUICtrlRead($AngesagteWare) = "Nein" And $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl)
    Else
    If GUICtrlRead($AngesagteWare) = "Ja" And $iVK > $iEK And $iEK > 0 Then
    GUICtrlSetData($Ergebnis[$iRow], ($iVK - $iEK) * $anzahl * 2)
    Else
    GUICtrlSetData($Ergebnis[$iRow], "N/A")
    EndIf
    If $bDebug Then ConsoleWrite(GUICtrlRead($Ware[$iRow]) & @TAB & "VK: " & $iVK & @TAB & "EK: " & GUICtrlRead($EK[$iRow]) & @TAB & "Anzahl: " & $anzahl & @CRLF)
    EndIf
    Next
    EndFunc

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

    Func _arraySort2D_MC(ByRef $avArray, $ColOrder = "")
    $aCols = StringSplit($ColOrder, "|")
    If $aCols[0] <> UBound($avArray, 2) Then
    MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!")
    Return 0
    EndIf
    Local $aColformat = $aCols
    Local $sRow
    For $i = 1 To $aColformat[0]
    $aCols[$i] = StringReplace($aCols[$i], "N", "")
    $aCols[$i] = StringReplace($aCols[$i], "D", "")
    Next
    _ArrayDelete($aColformat, 0)
    _ArrayDelete($aCols, 0)
    Local $iCols = UBound($aColformat)
    For $i = 0 To UBound($avArray) - 1
    $sRow = ""
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringUpper(StringRight($aColformat[$j], 1))
    Case "N"
    $sRow &= StringFormat("%99s", $avArray[$i][$iCol])
    Case "D"
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G"
    $aDate = StringSplit($avArray[$i][$iCol], ".")
    $sRow &= StringRight("0" & $aDate[2], 2) & "." & StringRight("0" & $aDate[1], 2) & "." & $aDate[3]
    Case Else
    $sRow &= $avArray[$i][$iCol]
    EndSwitch
    If $j <> $iCols - 1 Then $sRow &= "|"
    Next
    $avArray[$i][0] = $sRow
    Next
    _ArraySort($avArray)
    For $i = 0 To UBound($avArray) - 1
    $aSplit = StringSplit($avArray[$i][0], "|", 2)
    For $j = 0 To $iCols - 1
    $iCol = $aCols[$j]
    Switch StringRight($aColformat[$j], 1)
    Case "N"
    $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1)
    Case "D"
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1]
    Case "G"
    $aDate = StringSplit($aSplit[$j], ".")
    $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3]
    Case Else
    $avArray[$i][$iCol] = $aSplit[$j]
    EndSwitch
    Next
    Next
    Return 1
    EndFunc

    [/autoit]


    Eine Frage die ich vorerst noch hätte ist ob man es nicht so machen kann das wenn man start und ziehlstadt schon ausgewählt hat, man dann angesagte ware auf je setzt das dies gleich aktualisiert wird, denn momentan muss man dann immer nochmal eine stadt vor und dann wieder zurück zum aktualisieren!

    Mfg Ghostleader

  • Eine Frage die ich vorerst noch hätte ist ob man es nicht so machen kann das wenn man start und ziehlstadt schon ausgewählt hat, man dann angesagte ware auf je setzt das dies gleich aktualisiert wird, denn momentan muss man dann immer nochmal eine stadt vor und dann wieder zurück zum aktualisieren!


    natürlich geht das einfach bei ComboBox-Ändrung eine Aktion durchführen lassen, in deinem Fall Berechnung aufrufen:

    [autoit]

    Case $Startstadt, $Zielstadt, $AngesagteWare
    _Berechnung($nMsg)

    [/autoit]

    der Sinn dieses Schalters erschliesst sich mir zwar nicht, aber ich kenne ja auch das Spiel nicht. Trotzdem wäre es nicht sinnvoller dies pro Ware zu machen, bzw. dem Anwender zu ermöglichen die Menge je Ware zu bestimmen die er für die Fahrt bunkern will? Auch würde ich anstelle einer Combo eine CheckBox nehmen aber dies ist wohl Geschmackssache,

    mfg autoBert

  • Hallo autoBert,

    wiedermal DANKE.

    In dem Spiel wird manchmal eine Ware angesagt das heist der Preis der des VK Verdoppelt sich dann dafür der Schalter.

    Zu deiner Idee (Trotzdem wäre es nicht sinnvoller dies pro Ware zu machen, bzw. dem Anwender zu ermöglichen die Menge je Ware zu bestimmen die er für die Fahrt bunkern will?) muss ich sagen das dies natürlich eine sehr schöne ist.
    Nun stehe ich natürlich davor wie mache ich das am besten hinter jede Ware ne Inputbox damit er eintragen kann wieviel er mitnehmen möchte und dann noch nen button dahinter damit er das auch berechnen kann dann was er noch an platz hat um noch as anderes mit zu nehmen?

    Hört sich für mich gerade etwas kompliziert an muss ich sagen, dafür das des alles gerade noch etwas neu ist für mich!

    Mfg Ghostleader