12 | |||||
Auteur | Messages | ||||
---|---|---|---|---|---|
LanoueC | #1 Posté le 11/5/2010 à 17:23:00 | ||||
Bonjour J'ai un soucis d'erreur "out of boud" que je ne comprend pas et n'arrive pas à résoudre Si quelqu'un savait m'expliquer TBL as new string[] '********************** FOR EACH TBL[L] IN TBL IF TBL[L] = "blabla" THEN TBL.Remove(L) : Erreur out of bounds à cette ligne INC L NEXT '*********************** OU bien : '********************** FOR L = 0 TO TBL.Max IF TBL[L] = "blabla" THEN TBL.Remove(L) : : Erreur out of bouds à cette ligne NEXT '*********************** je ne vois pas en quoi je sors des limites j'ai utilisé ces deux méthodes avec TBL.add("blabla") et cela fonctionne merci d'avance aux esprits agiles LanoueC | |||||
jeanyvon | #2 Posté le 12/5/2010 à 07:25:00 | ||||
Gambas? Ma! Et gusto | Salut, As tu dimensionné : tbl[10] par exemple? c'est une hypothèse! a+ jy Vieillir? On peut retarder mais pas y échapper! | ||||
LanoueC | #3 Posté le 12/5/2010 à 13:08:00 | ||||
JYvon Non j'ai juste fait une déclaration : TBL as new string[] en fait , peut être cela a t'il son importance ! cette boucle est à l'intérieur d'une autre boucle ********************************* For a = -11 to 10 FOR EACH TBL[L] IN TBL IF TBL[L] = "blabla" THEN TBL.Remove(L) : Erreur out of bounds à cette ligne INC L NEXT next ********************************** a correspondant a une variable qui évolue dans TBL ----------------------------------------------------------- merci LanoueC | |||||
jeanyvon | #4 Posté le 12/5/2010 à 13:42:00 | ||||
Gambas? Ma! Et gusto | Re! Je viens d'essayer ton code: mais j'ai mis en entête
et dans form_open
ensuite j'ai copié/collé le code. Bien sur j'ai dimensionné "L".Je n'ai pas ton erreur mais je n'ai rien dans le tableau alors ça ne veut rien dire. Comme tu ne donne que ta boucle ou se produit ton erreur c'est assez difficile de voir d'où elle vient. Je ne sais pas quoi dire A+ JY Vieillir? On peut retarder mais pas y échapper! | ||||
micio | #5 Posté le 12/5/2010 à 16:33:00 | ||||
Peut-être une piste PUBLIC SUB Form_Open() DIM tb AS NEW String[] DIM i AS Integer FOR i = 0 TO 9 tb.Add(Str(i)) NEXT END | |||||
LanoueC | #6 Posté le 12/5/2010 à 21:42:00 | ||||
Bonsoir en premier Merci de votre aide OUi je pense que je dois utiliser une variable à mauvais escient voici la partie du code incriminée
i=0 étant le premier passage dans la boucle Bonne soirée LanoueC | |||||
spheris | #7 Posté le 12/5/2010 à 22:14:00 | ||||
Lanouec, out of bound veut dire que tu as dépassé la capacité de ton tableau (les champs) de 1 ou + . N'oublie pas que le 0 comme tu dis est un passage dans la boucle ! donc un tableau de 10 va de 0 à 9 soit 10 items | |||||
micio | #8 Posté le 13/5/2010 à 09:50:00 | ||||
peut-être : DIM tbl AS NEW String[10] ATTENTION .Remove(...) supprime un (plusieurs) élément du tableau la dimension est réduite d'autant.
| |||||
gambix | #9 Posté le 16/5/2010 à 17:06:00 | ||||
Faire simple ! | TBL as new string[] Déja la déclaration For each TBL[L] in TBL NEXT C'est quoi ce truc ??? dim s as string dim tbl as new string[] For each s in tbl next Bon Maintenant tu veut virer des donnée d'un tableau via une boucle .. Voici la solution : Dim aTbl as new string[] Dim aIndex as new Integer[] Dim i as Integer For i = 0 to aTbl.Max if aTbl = "blabla" then aIndex.Add(i) Next For each i in aIndex aTbl.Remove(i) Next Voila Alors comment ça marche ? D'abord on scan le tableau de chaines pour trouver les lignes a enlever ... car on ne peu pas vérifier et enlever, car le retrait change l'indexation du tableau (ce n'est pas une collection avec des clé uniques). Et on enregistre les index des lignes a virer dans un tableau d'entier. Ensuite on parcour le tableau d'entier et on enlève les lignes concerné dans le tableau de chaines Moins de texte dans une signature c'est agrandir son espace. | ||||
LanoueC | #10 Posté le 16/5/2010 à 17:34:00 | ||||
oui merci Gambix c'est bien ce à quoi je suis arrivé pour résoudre le soucis d'indexation du tableau !!! mais d'une manière différente
je pensais pouvoir économiser l'emploi d'un tableau supplémentaire mais ce n'est pas possible ! j'ai bien essayé ce code ci dessous mais cela ne fonctionne pas non plus! dim Remax as intger Remax= TBL.Max For L=0 to ReMax if TBL[L]= "blabla" then TBL.Remove(L) Remax=Remax-1 endif Next Bonne fin de Dimanche Merci à tous | |||||
gambix | #11 Posté le 16/5/2010 à 18:57:00 | ||||
Faire simple ! | 'on re remplit TBLproduit avec TBLproduitnet ça sert a rien ... tu réassigne le nouveau tableau... il faut concevoir un tableau comme une chose physique certe mais sans réelle identité ... c'est juste un index donc : TBLproduit = TBLproduitnet Va changer l'identifiant de tableau contenu dans la variable TBLProduit... Et oui une variable tableau ne contien pas le tableau mais une adresse ver celui-ci. Le faite d'assigner l'adresse de tblproduitnet va faire pointé tblproduit vers le nouveau tableau... et comme l'ancien tableau n'a plus personne qui fait référence a lui ... l'interpréteur va simplement le détruire... tout objet n'ayant aucun référencement est détruit automatiquement par exemple : Private hClass as new CMyClass si je fait hClass =Null alors l'instance de CMyClass est détruite d'ou pour résumer d'ou pour résumer Code: FOR L = 0 TO TBLproduit.Max IF TBLproduit[L] <> "out" THEN TBLproduitnet.Add(TBLproduit[L]) NEXT TBLProduit = TBLProduitnet Moins de texte dans une signature c'est agrandir son espace. | ||||
LanoueC | #12 Posté le 16/5/2010 à 20:36:00 | ||||
OK Gambix Donc si j'ai besoin d'un xièm tableau qui soit égal à TBLproduit
TBLxiem=TBLproduit : NON car TBLproduit n'existe plus : si j'ai bien compris OU TBLxiem= TBLproduitnet : OUI car il pointe vers TBLproduitnet qui existe donc prend sa valeur quand nécessaire? est ce bien ce raisonnement? Merci | |||||
gambix | #13 Posté le 16/5/2010 à 23:04:00 | ||||
Faire simple ! | non c'est tblproduit qui devient le nouveau tableau lit bien le code et rappelle toi bien que la variable ne contien pas un tableau mais un identifiant vers celui-ci Moins de texte dans une signature c'est agrandir son espace. | ||||
micio | #14 Posté le 17/5/2010 à 19:18:00 | ||||
Pour supprimer des éléments d'un tableau
| |||||
gambix | #15 Posté le 17/5/2010 à 20:00:00 | ||||
Faire simple ! | oui c'est une autre solution en effet.. comme .maxest testé a chaque boucle c'est bon en fait FOR stocke la valeur de TO... doncc'est pour ça que çaplantait Moins de texte dans une signature c'est agrandir son espace. | ||||
12 |