Array Deklaration

  • Hi @all,

    muß ich beim definieren eines Arrays immer schon die Größe der Felder angeben?

    [autoit]

    Dim $array[10]

    [/autoit]

    oder gibt es eine Möglichkeit die Anzahl der Felder erst mal offen zu lassen?
    Sowas wie:

    [autoit]

    Dim $array[]

    [/autoit]

    Danke für eure Hilfe!!

    Einmal editiert, zuletzt von giochips (5. August 2009 um 21:03)

  • Nein, ein Array ist (normalerweise) statisch, d.h. die Dimension (oder genauer der Speicherbedarf) muss vor der kompilierung feststehen.

    Das ist bei AutoIt anders.
    Hier kommt es darauf an, wie und wann Du eine Arrayvariable brauchst.
    Zudem sind AutoIt-"Arrays" in wirklichkeit Vektoren, deshalb ist es mit AutoIt so einfach "Arrays" dynamisch zu erzeugen.

    Im Falle deines Beispieles kannst Du es so machen:

    [autoit]

    Dim/Global/Local $array[1]

    [/autoit]


    Willst Du es dann später vergrößern:

    [autoit]

    ReDim $array[20]

    [/autoit]

    Anderes Beispiel:

    [autoit]

    Global $array
    ;
    ...
    ;
    $array = StringSplit (...)

    [/autoit]


    Gruß
    Greenhorn


  • Danke für die schnelle Hilfe!
    Die Möglichkeit ein Array mit Redim neu zu dimensionieren war mir bekannt. Dachte nur es wäre mit AutoIt auch möglich, so wie z.B. in Perl, die Arrayvariable zwar zu definieren, die Dimension aber nicht vorzugeben.

    Muß ich im Gegensatz zu "normalen" Variablen Arrays auch dimensionieren, wenn ich opt('MustDeclareVars', 1) nicht verwende??

  • Vielleicht sollte man aber noch erwähnen das ReDim nicht gerade sehr schnell ist (bei großen Arrays & viele Änderungen)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hi, ist zwar schon gelöst, aber... :

    Ich hatte das Problem mit dem festen Wert auch. Ich habs jetzt so gemacht, dass ich das so: $array[1] deklariere und dann immer wenn ein neuer Wert hinzukommt die Funktion _ArrayAdd verwende. Damit kannst du ganz einfach immer eine neue Stelle hinten an das Array hängen. In meinem Fall wollte ich so eine Art Adressbuch machen, und da weiß ich ja vorher nicht (meistens :-D) wie viele Plätze ich brauche.

    Ich hoffe, dass dir das auch ein bisschen hilft... Wenn nicht, dann brauchst du es vielleicht ein anderes Mal...

    PS: Guck mal, das hab ich grad in der Hilfe gefunden:

    "Eine einzigartige Besonderheit in AutoIt ist die Möglichkeit, Arrays wie folgt zu kopieren:
    $mycopy = $myarray
    In diesem Fall ist $mycopy eine exakte Kopie von $myarray und hat dieselben Dimensionen - es ist keine vorherige Deklaration mit Dim nötig. Wenn AutoItSetOption("MustDeclareVars", 1) aktiv ist, dann muss die Variable $mycopy zuvor deklariert zu werden, die Angabe der Größe ist dabei nicht von nöten. Wenn die Variable $mycopy bereits als Array deklariert war, wird es gelöscht, bevor das Kopieren stattfindet."