Problème avec RealBasic

Lonesome Boy

Membre actif
18 Mars 2000
132
0
Salut tout le monde!

Alors, voilà: j'ai un problème et une question sur RealBasic:
j'aimerais tester si un tableau est vide.
Si je fais "if tableau(0) <> nil then..." et que mon tableau est vide (avec la version 3.0a4 de RB, on peut vider un tableau en utilisant "redim tableau(-1)") j'ai logiquement un "OutOfBoundsException non traité".
J'ai aussi essayé avec la méthode ubound, mais logiquement, j'ai aussi un Out of Bounds Exception.
Je suis donc obligé de faire un
"Exception err
If err IsA OutOfBoundsException then..."
Ce n'est pas très pratique. Est-ce qu'il y a une autre méthode?

Ensuite j'aimerais savoir quelle est la différence entre un "do until condition ... loop" et un "while ... wend". C'est aussi bête que ça.

Merci d'avance pour vos réponses.

[Ce message à été édité par Lonesome Boy (Édité le 26 Juillet 2000).]
 
Coucou lonesome boy,
ch'uis de retour...
Tu travail avec la version pour OSX (la 3.x)? non?
Pour tester si un tableau est vide un Ubound suffit : si l'entier est 0, ton tb est vide... Normalement il n'y a pas d'erreur sauf si ce n'est pas un tableau (je comprends pas les erreurs que rb te sors) Si qq a une autre soluce...

la difference est que le do...loop est plus complex et peu etre quitté prématurement...
 
Non, je travaille avec la version classic (ils ont sortis 2 versions de l'alpha: une pour OS X et l'autre pour OS 8 à9).
Justement, ubound ne me renvoie pas 0, vu qu'ubound ne sert pas à compter le nombre d'éléments, mais renvoie le numéro du dernier élément du tableau. Et comme les tableau commencent à l'élément 0... De toutes façons, le tableau est vide, c'est pour cela que j'ai un Out of Bounds Exception.
Je me demande si les développeur de RealBasic n'ont pas oublié de gérer ce cas précis...
 
Dans la version 2.1.2, je viens de regarder, on me renvoit bien 0...
Aller c'est qu'une version alpha (tu la trouves où?, j'ai la flemme de chercher)
 
Si tu suivais, mon pauvre Steg ;-) Plus haut, j'ai marqué qu'avec la version 3.0a4, on pouvait vider un tableau avec la fonction redim tableau (-1), contrairement aux anciennes versions.
Tu trouveras le lien vers la version alpha sur http://www.realsoftware.com

[Ce message à été édité par Lonesome Boy (Édité le 30 Juillet 2000).]
 
Hello you happy Taxpayer

La difference entre les boucles while/wend et
do/until est que:

dans le premier cas, le traitement est effectué tant que la condition est vraie

dans le deuxième, le traitement est effectué jusqu'à ce que la condition soit fausse

Donc dans le premier cas (while), la condition est testée avant la boucle. Donc si
la condition est fausse dès le début, la boucle n'est jamais exécutée.

Alors que dans le second cas, la condition est testée à la fin de la boucle. Donc le traitement s'exécute toujours au moins une fois.

Voila voila

PS Salut Lonesome Boy. Ca marche la POO ?

------------------
--
laosteu
[email protected]
--
 
hello again

Un truc sur les tableaux, c'est qu'ils ont toujours au moins un élément, le premier. Donc il est normal que ubound renvoie 0, même si l'element 0 est vide.

Donc il faut faire le test en deux fois:

if ubound(monTableau) = 0 then
if monTableau(0) = "" then
//selon le type...
//

see ya



------------------
--
laosteu
[email protected]
--
 
OOPS !!!

Je devrais éviter de poster des messages quand je rentre du taf passé minuit, v'la que je dis des âneries...

Bon, pour les tableaux dynamiques en RB, effectivement, si Redim(-1) permet de vider intégralement un tableau, il est logique qu'après ça, tu ait une exception si tu essaie d'acceder à un element au tableu... Et effectivement, c'est limite idiot, puisque l'intéret de redim(-1) est de réinitialiser le tableau en une seule instruction...

Donc le mieux à faire (outre en toucher un mot à RealSoftware), c'est de ne pas utiliser cette instruction :-( et continuer comme avant :
Redim MonTable(0)
MonTableau(0) = nil // ou "" ou selon type...

Quand aux boucles, je crois me souvenir que j'avais qque chose là dessus dans un tutorial (www.laotseu.fr.st).

Sinon, pourquoi n'encapsule tu pas ton tableau dans une classe (cf la classe ListHandler, même adresse) ? Si tu dois le manipuler régulièrement dans ton appli, je t'assure que tu ça vaux le coup...

Bon, mes excuses pour les âneries des deux messages précédents....

A++
Laotseu
 
Oops! J'avais oublié de te répondre...
Le problème avec redim tableau(0), c'est que le tableau n'est pas vidé: il reste 1 élément, l'élément 0 (ça parait pas très logique, tout ça...). Donc, ça ne m'arrange pas, puisque le tableau n'est pas vide...
Merci d'avance et merci aussi pour tes réponses précédentes!
 
Ben oui, redim(0), il reste l'élément 0, qui est le premier, je vois pas où est l'absence de logique ;-)

En fait, je trouve même très bizarre l'instruction Redim(-1).


Un tableau, c'est (à l'origine...) un pointeur sur l'adresse du premier élément du tableau. Et traditionnellement, les adresses sont numérotées à partir de 0.

Et je ne vois pas non plus où est le pb à mettre deux lignes de codes pour vider un tableau ;-)

Maintenant, te plains pas, les tableaux de RealBasic sont dynamiques (tu peux en modifier la taille). En C, quand tu a défini la taille maximum de ton tableau, c'est fini.

(d'ailleurs, en C, si tu veux lire ou écrire en dehors des limites de ton tableau, le compilateur te laissera faire... Autant dire que le résultat peut être assez farce...)