[R] Variable avec "Global" à placer

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
perfaram
Niveau 4
Niveau 4
Messages : 68
Enregistré le : jeu. 28 avr. 2011 11:40
Status : Hors ligne

[R] Variable avec "Global" à placer

#1

Message par perfaram »

Je viens de fermer un autre topic mais j'ai une autre question, sur autre chose. J'ai récupéré un script trouvé sur ce forum et je voudrais l'améliorer avec des notifications, mais je ne sais pas où mettre le "Global" pour que la variable soit valable sur tout le script.
Voici le spoiler
► Afficher le texte
C'est dans cette partie que je doit placer le "Global", de manière à ce que le message de la notification soit celui affiché dans la GUI. Le message correspond à "$sReceived".

Quelqu'un a-t'il une idée ?
Modifié en dernier par perfaram le lun. 03 oct. 2011 18:01, modifié 1 fois.
Avatar du membre
moi
Niveau 7
Niveau 7
Messages : 370
Enregistré le : sam. 09 juil. 2011 22:14
Localisation : devant sont ordinateur
Status : Hors ligne

Re: [...] Variable avec "Global" à placer

#2

Message par moi »

perfaram a écrit :
► Afficher le texte

Code : Tout sélectionner

Func _TCP_Receive_PreProcess($hSocket, $sReceived, $iError)
    Global $sReceived = StringSplit($sReceived, "##FIN##", 1)
    ConsoleWrite("+> Received Text: " & $sReceived & @CRLF)
   
:?:
le problème ce n'est pas un problème, le seul problème ici c'est nous.

j'aime NYAN CAT Image
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [...] Variable avec "Global" à placer

#3

Message par Tlem »

Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III
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é".
perfaram
Niveau 4
Niveau 4
Messages : 68
Enregistré le : jeu. 28 avr. 2011 11:40
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#4

Message par perfaram »

Tlem a écrit :Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III
Le problème est que cette variable est déclarée seulement dans et pour cette fonction, or je voudrais l'utiliser ailleur. Et comment la déclarer ailleur ? en faisant
► Afficher le texte
? Ou alors placer le Global quelque par par là (cf. Spoiler du message principal) ?
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#5

Message par guitarist »

Au début du fichier ou se trouve ta fonction je dirais.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#6

Message par Yogui »

je vais paraphraser Tlem ... mais
wikipedia a écrit :En programmation informatique, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme. On parle également de variable de portée globale.
Donc :

il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)

La "coutume" veux que les variables soient déclarer en début de programme (pratique en cas de relecture et ou de débogage)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#7

Message par mikell »

Et...
perfaram a écrit :Global $MaVariable = _MaFonction()
Non, c'est vilain ça... tu vas juste écrire :
Global $MaVariable
tout en haut du script, juste en dessous des includes, et ça va le faire :wink:

A la rigueur, si tu veux lui attribuer une valeur quelconque au démarrage du script, tu peux écrire par exemple :
Global $MaVariable = 3 (pour un nombre)
Global $MaVariable = "tagada" (pour du texte)
etc, cette valeur pouvant ensuite être modifiée en cours de script
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
perfaram
Niveau 4
Niveau 4
Messages : 68
Enregistré le : jeu. 28 avr. 2011 11:40
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#8

Message par perfaram »

Je ne savais pas qu'il suffisait de mettre "Global $MaVariable". Je pensai qu'il était obligatoire de mettre "Global $MaVariable=ValeurDeMaVariable". Merci à tous et bon après-midi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#9

Message par jchd »

Yogui a écrit :je vais paraphraser Tlem ... mais
wikipedia a écrit :En programmation informatique, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme. On parle également de variable de portée globale.
Donc :

il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)

La "coutume" veux que les variables soient déclarer en début de programme (pratique en cas de relecture et ou de débogage)
Faux.

Code : Tout sélectionner

_Display($str)

Global $str = "Voyons si ça marche ..."

Func _Display($s)
    ConsoleWrite($s & @LF)
EndFunc
 
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#10

Message par mikell »

jchd a écrit :"Voyons si ça marche ..."
Un peu facile :mrgreen:
Dans ce cas la fonction appelle la variable avant sa déclaration...
J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Variable avec "Global" à placer

#11

Message par jchd »

Facile ou pas, il reste qu'AutoIt impose qu'une variable soit initialisée (déclarée ou pas) _avant_ son utilisation.
L'affirmation de Yogui selon laquelle "il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)" est donc fausse, du moins en ce qui concerne AutoIt (principalement parce qu'AutoIt est interprété).
J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script
Cette affirmation est tout aussi fausse.
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Variable avec "Global" à placer

#12

Message par mikell »

jchd a écrit :Cette affirmation est tout aussi fausse
Je vois le lézard ...
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Variable avec "Global" à placer

#13

Message par jchd »

Pas un lézard, un varan !
Il n'y a aucun moyen de rendre globale une variable qui a une définition locale dans une fonction par une déclaration globale située après (dans l'ordre d'interprétation) l'invocation de la fonction dans laquelle on déclare cette variable locale.
► Afficher le texte
Voir les seconds appels à Display1 et Display2.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Variable avec "Global" à placer

#14

Message par Tlem »

mikell a écrit :J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script
Ce n'est absolument pas ce que je voulais dire.
J'ai dit :
Tlem a écrit :Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III
Certes, je n'ai pas préciser les détails que jchd à donné, car cela m’a semblé superflu au moment de ma réponse car celle-ci prenait en compte le fait que chaque variable était obligatoirement déclarée avant une utilisation quelconque.

Ceci dit j'ai précisé "généralement" car celui qui sait ce qu'il fait, peut tranquillement déclarer une globale là ou il veut du moment qu'elle n'est pas utilisée avant sa déclaration et qu'elle est en dehors d'une fonction (car la déclaration d'une globale à l'intérieur d'une fonction n'a pas de sens). :mrgreen:

En ce qui me concerne, afin d'éviter ce genre de désagrément, j'utilise ce qui suit (en début de script au niveau de la section II du lien donné précédemment :roll: ) car cela permet d'éviter bon nombres de problèmes : :mrgreen:

Code : Tout sélectionner

#AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
Si vous hésitez sur l'emplacement de cette ligne, hé bien mettez là tout au début du script (ligne 1). :wink:
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é".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Variable avec "Global" à placer

#15

Message par jchd »

Oh que oui, le wrapper fait un excellent garde-fou contre bien des erreurs ! Suivez ce conseil avisé.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre