select..case..endselect in zusammenhang mit array problem

  • Hallo zusammen,

    ich habe ein kleines Problem mit meinem Script.
    Es gibt ebay shops die mehr als eine Versandart anbieten.

    Z.b. Sparversand, Einschreiben und DHL Paket

    Im HTML Code stehen alle unter

    Code
    class="sh-TblCnt"><div><div>Sparversand (Deutsche Post Bücher-/Warensendung)</div>


    der Inhalt der Klammern ändert sich und Sparversand und Standardversand.

    $standard = _StringBetween($source, 'class="sh-TblCnt"><div><div>',"</div>")
    $source hat der wert von _inetgetsource

    Mein script funktioniert, wenn Sparversand vorhanden und Standardversand DHL weil es mir ja nur um DHL geht. (Variante1)
    Wenn aber ein Shop kommt der nur Sparversand hat bricht das script ab.
    Setze ich ein Case wo Standard = versender5 (versender5 = sparversand) ist die variante1 hinfällig.

    Kann mir einer sagen was ich falsch mache?

    Danke und Gruß
    Norman

    [autoit]

    Func _versandchecken($excel_fenster, $ie_fenster)
    _IELinkClickByText($inet,"Alle Details zum Versandanzeigen")

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

    Sleep(1200)
    WinSetState($ie_fenster,"",@SW_MINIMIZE)

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

    For $s = 0 to 3
    Select
    #cs
    Case $standard[$s] = $versender[0]
    MsgBox(0,"",$standard[$s])
    _IEQuit($inet)

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

    Case Not $standard[$s] = $versender[0]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)
    _IEQuit($inet)
    #ce
    Case $versandtext[0] = " - Paketversand"
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(500)
    $excel.Cells($i, 10).Interior.ColorIndex = 16
    _IEQuit($inet)
    ;-----------------------------------------------------------------
    ;DHL Versand
    Case $standard[$s] = $versender[0]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).font.ColorIndex = 45
    Sleep(500)

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

    Case Not $standard[$s] = $versender[0]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)
    _IEQuit($inet)
    ;--> DHL Versand
    ;-----------------------------
    ; DPD Versand
    Case $versender[1] = $standard[$s]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)

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

    Case Not $standard[$s] = $versender[0]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)
    _IEQuit($inet)
    ;--> DPD Versand
    ;-----------------------------
    ;Hermes Versand
    Case $versender[2] = $standard[$s]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 5
    Sleep(500)

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

    Case Not $standard[$s] = $versender[2]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)
    _IEQuit($inet)
    ;--> Hermes Versand
    ;-----------------------------
    ;Deutsche Post Brief
    Case $versender[3] = $standard[$s]
    WinSetState($excel_fenster,"", @SW_MAXIMIZE)
    Sleep(1000)
    $excel.Cells($i, 10).Font.ColorIndex = 3
    Sleep(500)
    EndSelect
    Next
    _IEQuit($inet)
    EndFunc

    [/autoit]
  • Meines Erachtens ein Logik-Fehler:

    Case $standard[$s] = $versender[0]
    ...
    Case Not $standard[$s] = $versender[0]
    ...

    Eine von beiden Bedingungen trifft wohl immer zu. Deshalb werden die folgenden Cases nicht mehr durchlaufen...

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • Ausserdem, so wie ich das sehe, gehst du immer davon aus dass $standard die Indexe 0-3 hat. Ich bin mir jetzt nicht ganz sicher aber so wie du das beschreibst hat der doch nicht immer 4 Werte.
    Wenn du nur 2 Versandarten hast hat der doch auch nur 2 Werte oder habe ich das falsch verstanden? Wenn das so ist, würde ich es mit 'For $s = 0 To Ubound($standard) - 1' machen.

    Aber das mit dem Logik-Fehler stimmt auch.

    Edit: Einen Vorschlag kann ich dir nicht machen, aber das sinnvollste wäre wohl wenn du die am Schluss noch mit einem If abfängst.

    Gruss Shadowigor

  • Ausserdem, so wie ich das sehe, gehst du immer davon aus dass $standard die Indexe 0-3 hat. Ich bin mir jetzt nicht ganz sicher aber so wie du das beschreibst hat der doch nicht immer 4 Werte.

    Richtig mal steht auch nur ein Wert drin oder zwei Werte.

    Gruß
    Norman

  • Also so wie ich das sehe soll doch je nach dem was in $standard steht, eine andere Zahl bei $excel.Cells($i, 10).Font.ColorIndex haben. Da du immer die selbe Zelle färben willst machst dus vielleicht so.
    Meiner Meinung nach reicht das schon:

    Spoiler anzeigen
    [autoit]

    Func _versandchecken($excel_fenster, $ie_fenster)
    _IELinkClickByText($inet, "Alle Details zum Versandanzeigen")

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

    Sleep(1200)
    WinSetState($ie_fenster, "", @SW_MINIMIZE)

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

    For $s = 0 To UBound($standard) - 1

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

    $ColorIndex = 3

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

    Select

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

    Case $versandtext[0] = " - Paketversand"
    $ColorIndex = 16

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

    Case $standard[$s] = $versender[0]
    $ColorIndex = 45

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

    Case $versender[2] = $standard[$s]
    $ColorIndex = 5

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

    EndSelect
    $excel.Cells($i, 10).Font.ColorIndex = $ColorIndex
    Next

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

    _IEQuit($inet)

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

    EndFunc ;==>_versandchecken

    [/autoit]


    Einige Case kann man dann eh löschen, da diese die Farbe sowieso nicht beeinflussen würden. Und das maximieren des Fensters un die Sleeps kannst du dir denke ich auch sparen.

  • Klappt soweite ganz gut.

    Eine Bitte habe ich noch und eine frage....

    Erst die frage bei versender[2] macht er anstatt blau -> rot obwohl es im array auf 0 ist nur in diesem Fall ist noch "Ware muss abgeholt werden" auf 1 im array.

    Und die Bitte.

    Könntest Du mir das noch kommentieren dami der lerneffekt bei mir eintritt :)

    Danke und Gruß
    Norman

  • Also bei deiner Frage kann ich dir nicht ganz folgen. Welche Farbe? Welcher Versender? Welches Array? Und welche Ware??.... Das verstehe ich noch nicht ganz. Die Bitte ist jedoch kein Problem:

    Spoiler anzeigen
    [autoit]

    Func _versandchecken($excel_fenster, $ie_fenster)
    _IELinkClickByText($inet, "Alle Details zum Versandanzeigen")

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

    Sleep(1200)
    WinSetState($ie_fenster, "", @SW_MINIMIZE)

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

    For $s = 0 To UBound($standard) - 1 ; Ubound ist die grösse des Arrays. Deshalb noch -1 um den letzten Index zu erhalten.

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

    $ColorIndex = 3 ; Standardmässig ist die Farbe 3

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

    Select

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

    Case $versandtext[0] = " - Paketversand"
    $ColorIndex = 16

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

    Case $standard[$s] = $versender[0]
    $ColorIndex = 45 ; Sollte jedoch einer dieser Fälle eintreffen, ändert sich die Farbe zu 16, 45 oder 5

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

    Case $versender[2] = $standard[$s]
    $ColorIndex = 5

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

    EndSelect
    $excel.Cells($i, 10).Font.ColorIndex = $ColorIndex ; Und hier wird dann die Farbe in Ecxel benutzt
    Next

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

    _IEQuit($inet)

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

    EndFunc ;==>_versandchecken

    [/autoit]


    Ich hoffe das reicht dir. Viel mehr gibts da nicht zu kommentieren.

    Gruss Shadowigor

  • Super kommentiert danke.

    Also zu den Versender[2] ist in diesem fall Hermes Paket.

    [autoit]

    Case $versender[2] = $standard[$s]
    $ColorIndex = 5

    [/autoit]

    In Dieser fall trifft die abfrage zu, trotzdem macht er die zelle rot.

    versender[2] ist im array standard[0]
    und
    "ware muss abgeholt werden" ist im array standard[1].

    Nur "ware muss abgeholt werden" frage ich nirgendwo ab.

  • Ok, jetzt verstehe ich. Dabei fällt mir aber noch auf, dass bei $excel.Cells($i, 10).Font.ColorIndex = $ColorIndex die Zeile $i gewählt wird. Ich denke mal es wäre aber $s oder nicht? denn sonst schreibst du die verschiedenen Farben ja in die gleiche Zelle wenn $i die ganze Zeit gleich bleibt. Wäre es dann nicht so richtig: $excel.Cells($s, 10).Font.ColorIndex = $ColorIndex. Das könnte auch dein Problem beheben.

    Gruss Shadowigor

  • Ne das stimmt schon schon weil $i wird im script weiter oben aufgerufen um immer in die nächste excel zelle zu springen um da den shop namen zu kopieren.

    [autoit]

    For $i = 2 To 166
    $excel_tabelle = _ExcelReadCell($excel, $i, 10)

    [/autoit]
  • Ja das denke ich schon aber so wie das jetzt ist wird er dir das Feld im ersten durchgang Blau färben und im zweiten dann wider Rot, da die Farbe immer zurückgesetzt wir. Dann müsste es wohl so sein:

    Spoiler anzeigen
    [autoit]

    Func _versandchecken($excel_fenster, $ie_fenster)
    _IELinkClickByText($inet, "Alle Details zum Versandanzeigen")

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

    Sleep(1200)
    WinSetState($ie_fenster, "", @SW_MINIMIZE)

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

    $ColorIndex = 3 ; Standardmässig ist die Farbe 3

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

    For $s = 0 To UBound($standard) - 1 ; Ubound ist die grösse des Arrays. Deshalb noch -1 um den letzten Index zu erhalten.

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

    Select

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

    Case $versandtext[0] = " - Paketversand"
    $ColorIndex = 16

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

    Case $standard[$s] = $versender[0]
    $ColorIndex = 45 ; Sollte jedoch einer dieser Fälle eintreffen, ändert sich die Farbe zu 16, 45 oder 5

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

    Case $versender[2] = $standard[$s]
    $ColorIndex = 5

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

    EndSelect
    $excel.Cells($i, 10).Font.ColorIndex = $ColorIndex ; Und hier wird dann die Farbe in Ecxel benutzt
    Next

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

    _IEQuit($inet)

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

    EndFunc ;==>_versandchecken

    [/autoit]


    Ist es das was du meinst? Wenn nein habe ich dich vielleicht falsch verstanden.

    Gruss Shadowigor

  • Genau das ist das problem er färbt es im ersten durchgang schon rot.

    die zeile

    [autoit]

    $excel.Cells($i, 10).Font.ColorIndex = $ColorIndex

    [/autoit]


    sagt ja nur das er in der zeile $i, wo er ja auch ne namen kopiert hat, jetzt nur den namen bzw. die zelle $i färben soll.

    Es sind ja mehrere zeilen.

  • Nein nicht ganz. Beim 2ten ist $ColorIndex = 3 vor dem For. Dadurch setzt er die Farbe nicht bei jedem Schleifendurchgang zurück. Geht denn das auch nicht?