Page 1 sur 1

Bug dans la lecture des Datas ?

Publié : jeu. 19/janv./2006 11:31
par Good07
Bonjour à tous.

Je soumet à la sagacité des programmeurs pros qui fréquentent ce site, le petit programme suivant:

Code : Tout sélectionner

Dim JourMois(12)
Restore Jour_Mois
For n=1 To 12
Read JourMois(n)
Debug n
Next n


DataSection
Jour_Mois:
Data.b 31,28,31,30,31,30,31,31,30,31,30,31
EndDataSection
Voilà. Le problème c'est que ce code plante avec le message "Read data error: no more data lorsque la boucle arrive a 3 (N=3). :(
Ce qui n'est pas logique.
Tout rentre dans l'ordre si à la place d'écrire Data.b, je met Data.l.
Or dans la doc il est écrit:
Le type peut être choisi parmi les types natifs (long, word, byte, float, string). Un nombre quelconque de données peut être placé sur une même ligne, chacune étant séparée par une virgule.
C'est un bug ? Ou bien c'est moi qui ne comprend pas quelque chose?
:(

Merci pour vos réponses.

André.

Problème résolu.

Publié : jeu. 19/janv./2006 11:39
par Good07
Désolé, je viens de résoudre le problème.

En fait il faut écrire Dim JourMois.b(12) sinon gare à la casse. 8O

Mais il faut reconnaître que le message d'erreur n'est pas très explicite et envoi sur une fausse piste.

Merci, mais ça peut servir de le savoir.

André.

Publié : jeu. 19/janv./2006 11:47
par Backup
ben oui ! :D par defaut les variables du pure son en long ! :lol:

Publié : jeu. 19/janv./2006 12:28
par Good07
Bonjour Dobro.

Je suis d'accord avec toi, mais je trouve bizarre qu'un tableau qui est dimensionné pour recevoir des mots longs ne puisse pas recevoir autre chose.
Stocker une variable plus courte dans un espace prévu pour un mot plus long ne devrait pas poser de problème. Du moins à mon avis. Je ne parle pas de mettre des strings dans un espace reservé aux nombres là c'est autre chose.

Mais je ne suis pas un pro. Faut pas trop rentrer dans les détails sinon je décolle. :D
Je pensai que chaque case d'un tableau était stocké à une adresse bien déterminée et que l'on pouvais mettre ce que l'on voulais si on ne dépassait pas la longueur prévu par le type de variable.

Mais on va faire avec, le tout est de le savoir...

Publié : jeu. 19/janv./2006 12:45
par Chris
Si tu mets .w comme type de tableau, il bloque à 6 au lieu de 3

C'est quand même bizarre comme comportement, mais bon.... :?

Publié : jeu. 19/janv./2006 12:59
par Backup
ha oui ! c'est vrais :oops:

Publié : jeu. 19/janv./2006 16:23
par Fred
Les data peuvent etre n'importe quoi, c'est pas parce qu'il y a 10 elements dans les data que ca va etre forcement 10 elements dans un tableau. Peut etre une mise à jour de la doc pour clarifier ca ?

Publié : jeu. 19/janv./2006 16:30
par Chris
Fred a écrit :Les data peuvent etre n'importe quoi, c'est pas parce qu'il y a 10 elements dans les data que ca va etre forcement 10 elements dans un tableau. Peut etre une mise à jour de la doc pour clarifier ca ?
Ca voudrait dire que si tu déclares ton tableau en Long (.l) et tes datas en Byte (.b), les datas vont êtres lues par groupe de 4 pour remplir l'adresse avec 4 bytes formant un long ?

Publié : jeu. 19/janv./2006 16:57
par Chris
Si, par exemple, on part de ce petit bout de code ou les datas sont en .b et la variable dans la boucle est en .w:

Code : Tout sélectionner

Restore Test
For i = 1 To 4
  Read b.w : Debug b
Next

DataSection
Test:
Data.b 1,2,3,4,5,6,7,8
EndDataSection
Ca équivaut à faire ça :

Code : Tout sélectionner

Debug 2 << 8 | 1
Debug 4 << 8 | 3
Debug 6 << 8 | 5
Debug 8 << 8 | 7
Chuis content d'avoir trouvé ça :lol:

Publié : jeu. 19/janv./2006 22:37
par Good07
Bon, j'avais posté juste avant de partir au boulot. :(
Je vois que vous avez pas chômé pendant mon absence. :D
Fred a écrit:
Les data peuvent etre n'importe quoi, c'est pas parce qu'il y a 10 elements dans les data que ca va etre forcement 10 elements dans un tableau. Peut etre une mise à jour de la doc pour clarifier ca ?
Je pense qu'effectivement une petite mise à jour de la doc s'impose car au premier abort, ce n'est pas évident. :(
Un message d'erreur du genre "Type error" serait plus realiste pour ce genre d'erreur.
Merci quand même pour vos réponses.
Avec la version 4.0 et les nouveaux types de variables, il va falloir faire gaffe. :D

A+

André.

Publié : jeu. 19/janv./2006 23:06
par Dr. Dri
Au contraire... Si tu utilises par exemple IncludeBinary tu peux très bien lire le contenu avec la commande Read. Tu peux aussi très bien lire une chaine data avec des Read (byte)...

C'est justement l'absence de typage qui rend ca si souple...

Dri ;)