isarray() funktioniert nicht?!

  • $table ist eine array im array variable. und mit hilfe von xyid soll er eine bestimmte stelle in $var übergeben. das funzt auch normal, nur manchmal ist $table kein array(was korrekter weise vorkomemn kann) aber obwohl der code in einer ifschleife mit isarray()-abfrage drin ist wird er ausgeführt und endet dann nat mit "Subscript used with non-Array variable" für $var1 in der zeile mit "<--". egal mit welcher der beiden ifabfragen. aber dies sollte ja gar nicht sein weil es doch laut isarray() ein array ist. also was mach ich da falsch?

    Code
    ;If IsArray($table) Then
    	If IsArray($table[1]) Then
    		$var1 = $table[$xyid[1]]
    		$var = $var1[$xyid[0]]  ; <--

    Einmal editiert, zuletzt von diepfeile (30. April 2009 um 16:21)

  • Hallo diepfeile,

    ich hab mir mal zum eigenen Verständnis ein Script gemacht.

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    Dim $array1[3] = ["1","2","3"]
    Dim $array2[2] = ["1","2"]
    Dim $table[2] = [$array1,$array2]

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

    If IsArray($table) Then
    MsgBox(0, '', "table ist ein Array")
    If IsArray($table[0]) Then
    $var = $table[0]; wenn ein Array($array1) in einem Array($table) an eine Variable($var) übergeben wird, dann wird diese Variable zum Array!
    _ArrayDisplay($var)
    EndIf
    EndIf

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

    Dim $array1[3] = ["1","2","3"]
    Dim $array2 = "2"
    Dim $table[2] = [$array1,$array2]

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

    If IsArray($table) Then
    MsgBox(0, '', "table ist ein Array")
    If IsArray($table[1]) Then
    $var = $table[1]
    _ArrayDisplay($var)
    Else
    MsgBox(0, '', "$array2 ist kein Array")
    EndIf
    EndIf

    [/autoit]

    einzig, was $xyid[1] bedeutet verstehe ich noch nicht ...
    So funktioniert doch alles...

    PS:
    $var = $var1[$xyid[0]] --> in $var1 ist doch gar kein Array mehr, daher kannst Du dieses auch nicht als solches referenziert übergeben...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    2 Mal editiert, zuletzt von Schnuffel (30. April 2009 um 00:05)

  • $table ist eine tabelle in form von arrays im array wie deine nur größer:

    Code
    Dim $array1[3] = ["1","2","3",....]
    Dim $array2[2] = ["1","2",....]
    Dim $array3....
    ......
    Dim $table[n] = [$array1,$array2,...]


    sie wird aus einer datei ausgelesen:

    Code
    Global $table ; creates array variable
    _FileReadToArray("db.cvs", $table)
    If IsArray($table) Then
    	For $i = 1 To $table[0]
    		$table[$i] = StringSplit($table[$i], ";")
    	Next
    EndIf


    im array $xyid sind die koordinaten(für das "tabellenfeld".) drin, die ich in der "tabelle" $table auslesen möchte. $xyid[0] -> x-ache/spalte ; $xyid[1] -> y-ache/zeile ;
    das auslesen funtzt alles np, sowohl bei mir als auch bei deinem bsp-script.

    nur kann es bei mir auch vorkommen, dass $table nicht geladen wurde, wovor die if-abfrage schützen soll. nur tut sie das irgendwarum nicht, weil ich in der if-abfrage den "kein array"-error bekomm: "Subscript used with non-Array variable", aber dann konnt die ifabfrage doch gar nicht true sein.

  • ich glaube, ich habe verstanden :rofl:
    mach mal statt:

    Spoiler anzeigen
    [autoit]

    _FileReadToArray("db.cvs", $table)
    If IsArray($table) Then

    [/autoit]


    das hier:

    Spoiler anzeigen
    [autoit]

    If _FileReadToArray("db.cvs", $table) Then

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • die idee geht zwar in die richtige richtung, nur da beide sachen in funktionen mehrfach aufgerufen werden bringt sie nichts. aber ich bin dadurch drauf gekommen wodran genau es liegt und wie ichs lös: wenn in $table keine datei geladen werden konnte, wird es zu einem leeren array, somit ist isarray() zwar true aber da keine werte drin sind führt es dann an anderer stelle zu dem besagten fehler. dieses problem umging ich dann so:

    Code
    Global $table = ""

    (tjo nur 3zeichen haben gefehlt *G) wenn _FileReadToArray() was ausliest wird $table zum array, wenn nicht bleibt es eine leere variable.