FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Erreur: Variable Already Used... Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Erreur: Variable Already Used... Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Erreur: Variable Already Used... Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Erreur: Variable Already Used... Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Erreur: Variable Already Used... Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Erreur: Variable Already Used... Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Erreur: Variable Already Used... Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Erreur: Variable Already Used... Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Erreur: Variable Already Used... Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Erreur: Variable Already Used... Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Erreur: Variable Already Used... Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Erreur: Variable Already Used... Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Erreur: Variable Already Used... Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Erreur: Variable Already Used... Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Erreur: Variable Already Used... Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
Boutique Nike : -25% dès 50€ sur TOUT le ...
Voir le deal

 

 Erreur: Variable Already Used...

Aller en bas 
3 participants
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Erreur: Variable Already Used... Empty
MessageSujet: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyJeu 24 Avr 2008 - 18:21

Que signifie l'erreur suivante:
Variable Already Used In An External Loop. Line: 77
obtenue dans un sous-programme qui contient une boucle:
77 FOR im = 1 TO totv
...
NEXT im
?
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2394
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyJeu 24 Avr 2008 - 18:52

Cela veut dire qu'une boucle externe utilise la même variable im, et que la boucle interne, celle qui est décrite à la ligne 77, peut modifier la variable utilisée dans la boucle externe, ce qui à priori, peut causer des problèmes.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 10:05

C'est ce que j'avais bien cru comprendre, mais le problème est que j'obtiens cette erreur dans un sous-programme qui ne contient que cette boucle (et la variable im n'est utilisée qu'ici, totv étant une constante définie plus haut: nombre total de vignettes affichées).
Extrait:
Code:
.........
rem fin du programme principal
END

rem              *****************
rem ************** SOUS-PROGRAMMES ***************
rem              *****************

Affi:
REM affichage en grand de la vignette cliquée
FOR im = 1 TO totv
  IF CLICKED(im) = 1
    REM vignette im cliquée, affichage de l'image
    j = 1 + INT((im - 1)/nbc): REM rangée
    i = im - (j - 1) * nbc: rREM colonne
    FILE_LOAD np, r$ + "\" + img$(j,i)
    STRETCH_ON np: REM ajustage de l'image à la fenêtre
    SHOW np
    GOTO reti
  END_IF
NEXT im
reti:
RETURN

Peut-être y a-t'il une anomalie dans la structure du code principal, je continue à chercher...

En fait, le problème intervient à la deuxième exécution du sous-programme. Est-ce que le fait de sortir prématurément de la boucle par un GOTO (il n'y a pas d'EXIT FOR comme en Basic) au lieu du dernier NEXT ne poserait pas un problème (de compteur ou variable non réinitialisés, ou quelque chose comme ça) ? du fait que la boucle exécutée précédemment n'a pas été terminée naturellement elle est peut-être considérée comme étant toujours en cours d'exécution.

C'est bien ce que je pensais: si je supprime le GOTO reti dans la boucle et que je termine son exécution (pour rien, mais bon...), tout se passe très bien et il n'y a plus d'erreur. CQFD.

Remarque subsidiaire: c'est bien de donner le n° de la ligne fautive dans le message d'erreur, mais ce n'est pas évident à trouver du fait que les lignes ne sont pas numérotées, si le programme est long et s'il y a déjà eu plusieurs erreurs corrigées qui restent colorées en rouge. Ce serait bien d'avoir l'option numéros de lignes dans l'éditeur.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2394
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 21:52

Dans une boucle, le test sur l'utilisation dans une boucle externe de la variable qui est utilisée a été mis pour éviter que la variable de la boucle externe puisse être manipulée. Je pensais que cela éviterait des erreurs de programmation, par exemple, utiliser plusieurs boucles FOR I=... imbriquées.
Si cela devient gênant, le test peut être retiré. Libre au programmeur de savoir ce qu'il fait.

Je vais examiner en détail ton exemple.

Je vais réfléchir à une possibilité d'indiquer les numéros de lignes.

Citation :
s'il y a déjà eu plusieurs erreurs corrigées qui restent colorées en rouge
Il y a un bouton qui permet de refaire la coloration syntaxique dans ce cas. Mais si c'était automatique, ce serait mieux. Je vais regarder cela aussi.


Dernière édition par panoramic le Sam 26 Avr 2008 - 21:15, édité 1 fois
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptyVen 25 Avr 2008 - 22:27

Je ne conteste pas l'utilité d'un test pour vérifier l'intégrité d'une variable de boucle, mais dans mon cas (reexécution d'une boucle après sortie prématurée la fois précédente) ça ne se justifie pas. Il me semble qu'il vaudrait mieux une fonction EXIT FOR qui ôterait cette variable des boucles en cours d'exécution.

Dans mon exemple ci-dessus, si au lieu de:
Code:
GOTO reti
je mettais
Code:
im = totv
pour provoquer la sortie immédiate de la boucle, est-ce que ce serait licite ?
(je ne suis pas sûr qu'il soit bien sain de manipuler le compteur de boucle).
PS je viens d'essayer, ça marche très bien !

Pour la coloration syntaxique, je suis bête, je n'avais pas percuté, pour refaire la coloration j'enregistrais le programme après modifs et je le rechargeais... alors que j'avais un bouton pour faire ça tout seul...
Je me coucherai un peu moins bête ce soir.
Merci pour ta réponse.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2394
Date d'inscription : 28/05/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptySam 26 Avr 2008 - 21:14

Après examen du problème que tu soulèves, il s'avère que c'est le fait de sortir d'une boucle par un goto qui n'est pas accepté lors de l'exécution d'une nouvelle boucle avec la même variable.

Ton problème est isolé dans l'exemple suivant, qui déclenche une erreur:
Code:
dim i%
label sortie

for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for i%=1 to 3
 print i%
next i%
Comme la première boucle n'est pas "close", PANORAMIC considère lorsqu'il commence à exécuter la seconde boucle avec la même variable, que cette variable n'a pas été "libérée" et déclare une erreur.

Ce comportement n'est pas normal, on doit pouvoir sortir d'une boucle par un GOTO.
Pour le moment, le contournement que je vois est d'utiliser une deuxième variable pour la seconde boucle.
Ce code fonctionne:
Code:
dim i%,j%
label sortie

for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for j%=1 to 3
 print j%
next j%

Mais malheureusement, le code suivant ne fonctionne pas, et pour la même raison:
Code:
dim i%,j%
label sortie,recommence

recommence:
for i%=1 to 3
 print i%
 if i%=2 then goto sortie
next i%

sortie:

for j%=1 to 3
 print j%
next j%

goto recommence
En effet, lors du retour à la boucle for i% - - - PANORAMIC considère que la boucle for i% du cycle précédent n'a jamais été terminée, et déclenche une erreur.

Je vais revoir tout cela et regarder la possibilité des 3 commandes:
EXIT_FOR, EXIT_WHILE, EXIT_REPEAT pour sortir d'une boucle sans avoir besoin de faire un GOTO sur un label qu'il faut obligatoirement avoir déclaré au préalable.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... EmptySam 26 Avr 2008 - 21:52

Effectivement, ce serait bien (ça existe en Basic et je m'en servais souvent, et ça économiserait un label).
En attendant, il semble que si on positionne la variable boucle à sa valeur finale (i% = 3 dans ton exemple) et qu'on branche sur une étiquette juste avant le next, on sort tout de suite de la boucle, et proprement.
C'est ce que je fais en attendant mieux.
L'inconvénient de cette méthode, c'est que dans ce cas on perd la valeur de la variable boucle qui fait sortir, qui peut être utile à connaître dans certains cas. Par exemple (recherche du caractère "\" dans une chaîne):

Code:
FOR i% = 1 TO LEN(a$)
  IF MID$(a$, i%, 1) = "\"
    ... sortie avec la valeur de i% exploitée ensuite
  END_IF
NEXT i%
là on est coincé.

Incidemment, il manque la fonction INSTR du Basic de recherche d'un caractère dans une chaîne: k = INSTR(a$, car$), ce qui éviterait une boucle avec sortie de boucle si caractère trouvé.
Revenir en haut Aller en bas
Georges

Georges


Nombre de messages : 290
Age : 55
Localisation : Martinique
Date d'inscription : 29/05/2009

Erreur: Variable Already Used... Empty
MessageSujet: erreur sur variable   Erreur: Variable Already Used... EmptyLun 15 Juin 2009 - 20:37

Salut JL35

je te propose ce code qui je pense peut résoudre ton problème en l'adaptant.

Code:

dim i%,carac%
while i%<>3
i%=i%+1
print "i%=" : print i%
end_while
print "sortie " : print i%
if i%=3 then carac% = i%
print
print " --------------------- "
print
for i%=1 to 5
print "i%2 =" : print i%
next i%
print
print " --------------------- "
print
print "le caractère sauvegardé : " : print carac%
end

La première boucle peut être sortie prématurément sans altérer la variable.
Au passage la variable i% est sauvegardée dans la constante carac%.
tu peux adpter cette méthode à des chaines de caractères.

georges
Revenir en haut Aller en bas
Contenu sponsorisé





Erreur: Variable Already Used... Empty
MessageSujet: Re: Erreur: Variable Already Used...   Erreur: Variable Already Used... Empty

Revenir en haut Aller en bas
 
Erreur: Variable Already Used...
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» renommer une variable?
» erreur : "Illégal variable name"
» 2ème "dim" sur variable EFFACE la variable
» variable?
» variable nombre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: