[R] Variable a deux dimensions "oublié" ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

[R] Variable a deux dimensions "oublié" ?

#1

Message par Kikoolol »

Bonjour a tous est a toutes !
Donc voilà j'ai un petit soucis avec mon script :
Mon programme lis d'abord des valeurs dans un .ini puis la stock dans une variable a deux dimensions suivantes :
a{$var}{0} = Iniread(.......)
a{$var}{1} = Iniread(.......)

($var vaut 0 et les données enregistrer sont des coordonées)

Jusque là tout va bien ! Le programme arrive a cliquer sur les coordonnées quand je lui demande exemple :
MouseClick("left", a{$var}{0}, a{$var}{1}, 1)
Aucun soucis !

Seulement quand mon script commence a attaqué les choses sérieuses, (le reste du programme) et qu'il reviens sur cette variable a deux dimensions, il me sort une erreur plutôt.. étrange. Il me trouve une erreur dans la ligne du mouseclick en me disant que "$var" est une variable inconnu (c'est l'erreur subscript with no array machin). Je prend donc mes précautions en écrivant et en lisant la $var dans un fichier .ini pour éviter que le script l'oublie, mais même avec ceci, le programme me retourne l'erreur. Je suppose donc que c'est la variable a deux dimensions qu'il a oublier est non le $var.
Je rappelle que mon script n'entre jamais dans la moindre fonction.

Merci de vos réponses !
Modifié en dernier par Kikoolol le mar. 24 févr. 2009 16:29, modifié 1 fois.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: Variable a deux dimensions "oublié" ?

#2

Message par jbnh »

Bonjour,

Merci de prendre quelques secondes pour lire les règles de présentation d'un message et d'éditer votre titre.

Pour répondre au mieux à votre question, il serait intéressant de voir ce qui correspond aux choses sérieuses de votre programme, ou avoir la ligne qui coince...
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: {..} Variable a deux dimensions "oublié" ?

#3

Message par Tlem »

On peut aussi dire certaines autres choses. ;)

Vous écrivez :

Code : Tout sélectionner

a{$var}{0} = Iniread(.......)
a{$var}{1} = Iniread(.......)
mais un tableau à deux dimention s'utilise comme ceci :

Code : Tout sélectionner

a[$var][0] = Iniread(.......)
a[$var][1] = Iniread(.......)
Sans doute une erreur de transcription. :P

Ensuite pour un tableau il vaut mieux faire certaines choses avant :
1 - Déclarer le tableau et ses dimensions avant de l'utiliser :

Code : Tout sélectionner

Dim a[1][20]
Sinon vous risquez le problème que vous avez évoqué.

2 - Généralement la dimension 0 d'un tableau est utilisée pour stocker le nombre de variables de la dimension.

Pour finir, comme vous l'a indiqué jbnh, lorsque vous faites une demande d'aide, un bout de code est plus parlant que 10 lignes d'explications. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

Re: {..} Variable a deux dimensions "oublié" ?

#4

Message par Kikoolol »

Merci pour vous réponses !

Tous d'abord pour les "[]" j'étais sous Mac et je trouvais pas la touche x), mais ça correspond bien a des [].

Donc bon je vais vous mettre un peu de script comme demander :

Code : Tout sélectionner

Local $a[50][2] ; Création des variables à 2 Dimensions
$ious = 0
$zero = 0
(...)
        Case $Button3 ; Trajet
        
            $existe1 = Iniread("options.ini", "", "m", "?")
            If $existe1 > 0 Then ; Si a un trajet a été trouver et qu'on veux le charger
                
                If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer ; Indispensable mais je sais pas a quoi ça sert
                    $iMsgBoxAnswer = MsgBox(36,"Trajet","Vous aviez déjà enregistrer une boucle auparavant. Voulez vous utilisez le trajet enregistré précédament ?")
                    Select
                        Case $iMsgBoxAnswer = 6 ;Yes
                            $nbmap1 = Iniread("options.ini", "", "m", "?") ; Lit le nombre de clique enregistré dans l'ancien trajet
                        
                            While $ious < $nbmap1
                                $a[$ious][0] = IniRead("options.ini","", "F" & $ious & "0", 12.5)
                                $a[$ious][1] = IniRead("options.ini","", "F" & $ious & "1", 12.5)
                                $ious = $ious + 1
                            WEnd

                        Case $iMsgBoxAnswer = 7 ;No
                            
                    EndSelect
(... plus tard dans le script dans une fonction)

                                If $ious > 0 Then ; Si un trajet de Boucle a été crée 
                                    [color=#FF0000]MouseClick("left", $a[$Zero][0], $a[$Zero][1], 1 , 0) [/color];Cliquer sur la 1er valeur de la boucle


 
C'est la ligne en rouge qui plante, je ne sais pas trop pourquoi, c'est la seul fonction du script.
Voici l'erreur :

MouseClick("left", $a[$Zero][0], $a[$Zero][1], 1 , 0)
MouseClick("left", $a^ERROR

Error : Subscript used with non-Array Variable.


J'ai essayer de bien mettre en évidance le fait que $zero = 0, mais la même erreur survient.
Je penche donc pour une erreur dans la variable a deux dimensions.

Merci d'avance
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: {..} Variable a deux dimensions "oublié" ?

#5

Message par Iste »

juste avant le mouseclik, essaye de mettre un _ArrayDisplay() pour savoir l'etat de la variable a ce moment là. Si la variable est ok, ya un probleme, sinon, essaye de faire remonter le _ArrayDisplay() jusqu'a l'origine de la variable pour trouver le probleme

Je ne peux rien dire de plus, si ce n'est que j'ai deja eu le meme probleme, et que j'ai fini par abandoner :/

edit apres avoir testé le script : pour moi le probleme a de fortes chance de venir du IniRead()
Modifié en dernier par Iste le mar. 24 févr. 2009 18:05, modifié 2 fois.
Signez ici
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

Re: {..} Variable a deux dimensions "oublié" ?

#6

Message par Kikoolol »

Merci beaucoup iste pour ta réponse mais je crois que l'erreur vien d'une bête manipulation de varriable... je vous tient au courant.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: {..} Variable a deux dimensions "oublié" ?

#7

Message par Tlem »

Puisque vous utilisez le tableau dans tout le code, modifiez ceci :

Code : Tout sélectionner

Local $a[50][2]
en ceci

Code : Tout sélectionner

Dim $a[50][2]
Ensuite, regardez dans votre code si par mégarde vous ne re-définissez pas le tableau $a en une simple variable.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

Re: [..] Variable a deux dimensions "oublié" ?

#8

Message par Kikoolol »

J'ai trouvé l'erreur !
Comme le dis Telm j'ai tout bêtement donner une valeur à $a alors que celle-ci étais déjà utiliser !

En tout cas merci beaucoup a tout le forum pour votre aide sans vous j'aurais certainement tout recommencer !
(Ne jamais utiliser de variable à 1 lettre)
Répondre