$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?
isarray() funktioniert nicht?!
-
- [ gelöst ]
-
diepfeile -
29. April 2009 um 23:31 -
Geschlossen -
Erledigt
-
-
Hallo diepfeile,
ich hab mir mal zum eigenen Verständnis ein Script gemacht.
Spoiler anzeigen
[autoit]#include<Array.au3>
[/autoit] [autoit][/autoit] [autoit]
Dim $array1[3] = ["1","2","3"]
Dim $array2[2] = ["1","2"]
Dim $table[2] = [$array1,$array2]If IsArray($table) Then
[/autoit] [autoit][/autoit] [autoit]
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
EndIfDim $array1[3] = ["1","2","3"]
[/autoit] [autoit][/autoit] [autoit]
Dim $array2 = "2"
Dim $table[2] = [$array1,$array2]If IsArray($table) Then
[/autoit]
MsgBox(0, '', "table ist ein Array")
If IsArray($table[1]) Then
$var = $table[1]
_ArrayDisplay($var)
Else
MsgBox(0, '', "$array2 ist kein Array")
EndIf
EndIfeinzig, 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... -
$table ist eine tabelle in form von arrays im array wie deine nur größer:
CodeDim $array1[3] = ["1","2","3",....] Dim $array2[2] = ["1","2",....] Dim $array3.... ...... Dim $table[n] = [$array1,$array2,...]
sie wird aus einer datei ausgelesen:CodeGlobal $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
mach mal statt:Spoiler anzeigen
[autoit]_FileReadToArray("db.cvs", $table)
[/autoit]
If IsArray($table) Then
das hier:Spoiler anzeigen
[autoit]If _FileReadToArray("db.cvs", $table) Then
[/autoit] -
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:
(tjo nur 3zeichen haben gefehlt *G) wenn _FileReadToArray() was ausliest wird $table zum array, wenn nicht bleibt es eine leere variable.