Erkennt AUTOIT nicht immer richtig den Inhalt von Variablen ?

  • Hallo,

    ich steh mit einem Programmfehler auf dem Schlauch. Folgender Code-Teil macht mir Probleme:

    "If $datumarray[0] > $aRow[$i] and $id <> $aRow[6] And $zaehler = 0 Then"

    Diese Abfrage liegt innerhalb einer While-Schleife, die ausgelesene Datensätze nach dem passenden Satz für die weitere Verarbeitung durchsucht. Probleme bereit nun auf einmal vermutlich der erste Vergleich "If $datumarray[0] > $aRow[$i]". Hinter $datumarray stehen die Wochenzahlen von 1 - 52 und hinter $aRow die aus der Datenbank ausgelesenen Wochenzahlen der bereits gespeicherten Datensätze.
    Solange der Wert von $datumarray[0] zwischen 1 und 9 lag funktionierte die Abfrage und damit das Programm problemlos. Jetzt aber beim Wochenwert "10" scheint er nicht zu erkennen, dass dieser Wert größer als die bislang größte gespeicherte Woche "9" ist und er geht nicht in die programmierte Verarbeitung rein. Was kann ich da tun ?

    Danke für jede Hilfe

    Uwe

  • Mach dir mal Gedanken ob du Zahlen oder Strings vergleichst.
    Also als welchen Datentyp deine Zahlen im Array gespeichert sind.

    [autoit]

    MsgBox(0,"",'"10" > "9" = ' & ("10" > "9"))
    MsgBox(0,"",'10 > 9 = ' & (10 > 9))
    MsgBox(0,"",'Int("10") > Int("9") = ' & (Int("10") > Int("9")))
    MsgBox(0,"",'Number("10") > Number("9") = ' & (Number("10") > Number("9")))

    [/autoit]
  • da dürfte warscheinlich :

    [autoit]

    Int()

    [/autoit]


    die Lösng sein, je nach dem wie die Datensätze in der DB als Int oder String gespeichert sind werden Probleme auftauchen, sobald der eine String mehr zeichen enthält als der andere.
    EDIT: das war aber fix ^^

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Danke, mein Gefühl sagte mir bereits, dass wohl in diesem Bereich das Problem liegen muss. Aber bislang ging ich davon aus dass AutoIT nur einen Datentyp, nämlich Variant kennt und automatisch entscheidet wie es damit umgeht. Kann ich denn beeinflußen und wie, wie die Daten in einem Array gespeichert werden ?

    Uwe

  • Ja kannst du.
    Wie im Beispiel zu sehen wandelst du Zahlen welche als Strings vorliegen mit Int() in Ganzzahlen und mit Number() in Gleitkommazahlen.
    Dies kannst du entweder beim Zuweisen der Werte in das Array machen oder halt z.B. nochmal nachträglich das Array durchgehen und die Werte wandeln.
    Oder du lässt die Daten im Array als String stehen und passt nur deine Abfrage entsprechend an und konvertierst dort erst die Daten.

    Es ist richtig das es in der Programmiersprache AutoIt (also der Nutzerschnittstelle) nur einen Datentyp gibt.
    In der internen Behandlung von Daten gibt es aber mehr: >>AutoIt Datentypen<<

    Einmal editiert, zuletzt von AspirinJunkie (17. März 2011 um 11:58)