Bug dans la lecture des Datas ?

Archive.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Bug dans la lecture des Datas ?

Message 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é.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Problème résolu.

Message 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é.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ben oui ! :D par defaut les variables du pure son en long ! :lol:
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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...
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.... :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ha oui ! c'est vrais :oops:
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message 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 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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:
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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é.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Répondre