Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD9 - Boucle FOR avec pas négatif - Erreur de synatxe ou Bug !!!

5 réponses
Avatar
Vincent
Bonjour,

j'ai le code suivant :

Trace("Debut")
POUR indLigne=vNbLigne A 1 PAS -1
Trace("indligne=" + NumériqueVersChaîne(indLigne))
SI COL2=0 ALORS
TableSupprime(Table,indLigne)
FIN
FIN
Trace("Fin")

Résultat du trace :
Debut
indligne=3
indligne=3
Plantage !!!!

la valeur du pas n'est pas répercuté => indligne n'est pas décrémenté et
pointe sur une ligne qui n'existe plus.
Je peux remplacer ma boucle POUR par TANTQUE mais j'aimerais savoir si
c'est un pb de syntaxe de ma part ou un bug de windev

Version interne : 01-90034J

Extrait de l'aide :
===================
POUR Indice = 10 A 1 PAS -1
Tableau [ Indice ] = MaVariable + 10
FIN

5 réponses

Avatar
olivier
Vincent wrote:
Bonjour,

j'ai le code suivant :

Trace("Debut")
POUR indLigne=vNbLigne A 1 PAS -1
Trace("indligne=" + NumériqueVersChaîne(indLigne))
SI COL2=0 ALORS
TableSupprime(Table,indLigne)
FIN
FIN
Trace("Fin")

Résultat du trace :
Debut
indligne=3
indligne=3
Plantage !!!!

la valeur du pas n'est pas répercuté => indligne n'est pas décrémenté et
pointe sur une ligne qui n'existe plus.
Je peux remplacer ma boucle POUR par TANTQUE mais j'aimerais savoir si
c'est un pb de syntaxe de ma part ou un bug de windev

Version interne : 01-90034J

Extrait de l'aide :
================== > POUR Indice = 10 A 1 PAS -1
Tableau [ Indice ] = MaVariable + 10
FIN



La syntaxe me paraît correcte. Par contre vnbligne est-il le nombre
de lignes dans la table (tableoccurence?). si oui, est-il recalculé
dans la boucle quand vous faites le tablesupprime?
Avatar
Vincent
olivier a écrit :
Vincent wrote:

Bonjour,

j'ai le code suivant :

Trace("Debut")
POUR indLigne=vNbLigne A 1 PAS -1
Trace("indligne=" + NumériqueVersChaîne(indLigne))
SI COL2=0 ALORS
TableSupprime(Table,indLigne)
FIN
FIN
Trace("Fin")

Résultat du trace :
Debut
indligne=3
indligne=3
Plantage !!!!

la valeur du pas n'est pas répercuté => indligne n'est pas décrémenté et
pointe sur une ligne qui n'existe plus.
Je peux remplacer ma boucle POUR par TANTQUE mais j'aimerais savoir si
c'est un pb de syntaxe de ma part ou un bug de windev

Version interne : 01-90034J

Extrait de l'aide :
================== >> POUR Indice = 10 A 1 PAS -1
Tableau [ Indice ] = MaVariable + 10
FIN




La syntaxe me paraît correcte. Par contre vnbligne est-il le nombre
de lignes dans la table (tableoccurence?). si oui, est-il recalculé
dans la boucle quand vous faites le tablesupprime?




J'avais oublié :

Avant la boucle, j'ai le code suivant, justement pour éviter le recalcul
part tableoccurrence

vNBligne est un entier = Tableoccurence(matable)
...
boucle POUR
...
Avatar
Romain PETIT
Dans son message précédent, Vincent a écrit :
Avant la boucle, j'ai le code suivant, justement pour éviter le recalcul
part tableoccurrence

vNBligne est un entier = Tableoccurence(matable)
...
boucle POUR
...



Oui, mais si tu supprimes une ligne dans la boucle, il y a un risque
que cela mette la panique...
C'est une table mémoire ou fichier ?


--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Vincent
Romain PETIT a écrit :
Dans son message précédent, Vincent a écrit :

Avant la boucle, j'ai le code suivant, justement pour éviter le recalcul
part tableoccurrence

vNBligne est un entier = Tableoccurence(matable)
...
boucle POUR
...




Oui, mais si tu supprimes une ligne dans la boucle, il y a un risque que
cela mette la panique...
C'est une table mémoire ou fichier ?




Je viens de trouver l'erreur :
Indligne etait déclaré par erreur en Numerique et non en Entier.

indligne est un numerique
vNBligne est un entier = Tableoccurence(table)
POUR indLigne=vNbLigne A 1 PAS -1
SI COL2=0 ALORS
TableSupprime(Table,indLigne)
FIN
FIN

visiblement, une boucle pour ne supporte pas le type numerique. Par
contre ça ne gêne absolument pas le "compilateur"
Avatar
jacques trepp
Vincent a écrit :
Romain PETIT a écrit :

Dans son message précédent, Vincent a écrit :


Avant la boucle, j'ai le code suivant, justement pour éviter le recalcul
part tableoccurrence

vNBligne est un entier = Tableoccurence(matable)
...
boucle POUR
...




Oui, mais si tu supprimes une ligne dans la boucle, il y a un risque que
cela mette la panique...
C'est une table mémoire ou fichier ?





Je viens de trouver l'erreur :
Indligne etait déclaré par erreur en Numerique et non en Entier.

indligne est un numerique
vNBligne est un entier = Tableoccurence(table)
POUR indLigne=vNbLigne A 1 PAS -1
SI COL2=0 ALORS
TableSupprime(Table,indLigne)
FIN
FIN

visiblement, une boucle pour ne supporte pas le type numerique. Par
contre ça ne gêne absolument pas le "compilateur"



d'où l'intéret de bien donnet TOUT le code qui plante. Dans ton cas,
personne d'autre que toi pouvrait trouver la solution :)


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com