Page 1 sur 1

Petit problème de tableau [RESOLU]

Publié : sam. 24/janv./2009 19:33
par MetalOS
Salut tous le monde, voila mon problème, pour mon logiciel de météorologie je doit charger est traiter des données qui proviennent d'une page web (jusque la pas de problème pour moi) pour ça j'effectue une action sur un BoutonGadget dons voici le code:

Code : Tout sélectionner

Case #Gadget_FormDonnees_Button89
          Resultat.s = GetGadgetItemText(#GadgetWebMETAR, #PB_Web_HtmlCode)
             Dim meteo.s(14) ;création du tableau à 15 éléments 
              For x=1 To 18 ;(nombre de #) 
               info.s = StringField(Resultat, x, "#") ;découpage de la chaîne Resultat.s 
              If x <> 5 And x <> 11 And x <> 12 ;on ne prend pas en compte les éléments 5, 11 et 12 
               meteo(y) = info.s ;remplissage du tableau avec info.s 
                y+1 
              EndIf 
              Next x 
               SetGadgetText(#Gadget_FormSite_StringHeureDate,meteo(0)) 
               SetGadgetText(#Gadget_FormDonnees_StringTemperature, meteo(1))
               SetGadgetText(#Gadget_FormDonnees_StringHumidite, meteo(2)) 
               SetGadgetText(#Gadget_FormDonnees_StringVitesseVent, meteo(3))
               SetGadgetText(#Gadget_FormDonnees_StringVitesserafale,meteo(4))
               SetGadgetText(#Gadget_FormDonnees_StringDirectionVent, meteo(5) + " " + meteo(12))
               SetGadgetText(#Gadget_FormDonnees_StringPression, meteo(6))
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitationsCours, meteo(8))
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitations6, meteo(9))
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitations24, meteo(7))
               SetGadgetText(#Gadget_FormDonnees_StringPointRosee, meteo(10))
               SetGadgetText(#Gadget_FormDonnees_StringVisibilite, meteo(11))
               SetGadgetText(#Gadget_FormDonnees_Editor, meteo(13))
               SetGadgetText(#Gadget_FormDonnees_StringHumidex, meteo(14))
              Dim meteo.s(0)
              info.s = ""
Tous marche bien mais au moment ou je reclique une deuxième fois sur mon bouton j'ais une erreur avec le compilateur à cette ligne:

Code : Tout sélectionner

meteo(y) = info.s ;remplissage du tableau avec info.s 
Voici le message du compilateur pour cette erreur:

Code : Tout sélectionner

[ERROR] Array index out of bounds.
Quelqu'un pourrait me dire pourquoi j'ai cette erreur, j'efface pourtant bien le contenue de mon tableau une fois que les données son charger est traitées. Comprend pas la :? . Merci pour vos réponses.

Publié : sam. 24/janv./2009 20:17
par flaith
Salut,

déjà je vois pas comment est initialisée ta variable y et si tu fais une vérification sur cette variable pour qu'elle ne dépasse pas 14 (0 à 14).
Attention aussi lors de la déclaration du tableau il faut l'initialiser à 15

Publié : sam. 24/janv./2009 20:54
par MetalOS
Je me suis planter dans mon commentaire c'est 14 éléments et pas 15. Pour le reste je ne voie pas pourquoi quand je vide mon tableau avec Dim meteo.s(0) je n'arrive pas à le remplir de nouveau et que le programme plante.

Publié : sam. 24/janv./2009 21:05
par Le Soldat Inconnu
car y n'est pas remis à 0

donc première lecture,
y va de 0 à 14
à la seconde, y va de 14 à 28, oups, y est trop grand
avant de lire, mets toujours y à 0

Code : Tout sélectionner

Case #Gadget_FormDonnees_Button89 
          Resultat.s = GetGadgetItemText(#GadgetWebMETAR, #PB_Web_HtmlCode) 
             Dim meteo.s(14) ;création du tableau à 15 éléments 
              y = 0
              For x=1 To 18 ;(nombre de #) 
               info.s = StringField(Resultat, x, "#") ;découpage de la chaîne Resultat.s 
              If x <> 5 And x <> 11 And x <> 12 and y <= 14 ;on ne prend pas en compte les éléments 5, 11 et 12, on vérifie aussi que y est plus petit que le tableau
               meteo(y) = info.s ;remplissage du tableau avec info.s 
                y+1 
              EndIf 
              Next x 
               SetGadgetText(#Gadget_FormSite_StringHeureDate,meteo(0)) 
               SetGadgetText(#Gadget_FormDonnees_StringTemperature, meteo(1)) 
               SetGadgetText(#Gadget_FormDonnees_StringHumidite, meteo(2)) 
               SetGadgetText(#Gadget_FormDonnees_StringVitesseVent, meteo(3)) 
               SetGadgetText(#Gadget_FormDonnees_StringVitesserafale,meteo(4)) 
               SetGadgetText(#Gadget_FormDonnees_StringDirectionVent, meteo(5) + " " + meteo(12)) 
               SetGadgetText(#Gadget_FormDonnees_StringPression, meteo(6)) 
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitationsCours, meteo(8)) 
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitations6, meteo(9)) 
               SetGadgetText(#Gadget_FormDonnees_StringPrecipitations24, meteo(7)) 
               SetGadgetText(#Gadget_FormDonnees_StringPointRosee, meteo(10)) 
               SetGadgetText(#Gadget_FormDonnees_StringVisibilite, meteo(11)) 
               SetGadgetText(#Gadget_FormDonnees_Editor, meteo(13)) 
               SetGadgetText(#Gadget_FormDonnees_StringHumidex, meteo(14)) 
              Dim meteo.s(0) 
              info.s = "" 

Publié : sam. 24/janv./2009 21:16
par flaith
j'ai fait un test

Code : Tout sélectionner

Procedure make(resultat.s)
Dim meteo.s(14) ;création du tableau à 15 éléments
y = 0
For x=1 To 18 ;(nombre de #)
  info.s = StringField(Resultat, x, "#") ;découpage de la chaîne Resultat.s
  If x <> 5 And x <> 11 And x <> 12 ;on ne prend pas en compte les éléments 5, 11 et 12
    meteo(y) = info.s ;remplissage du tableau avec info.s
    y+1
  EndIf
Next x

For i = 0 To 14
  Debug Str(i)+"-"+meteo(i)
Next i

Dim meteo(0)
info = ""
EndProcedure

make("0000#111#222#3333333#44444#55555#66666#77777777777#88888#9999#10101010#11111111111#12121212121#131313#141414#151515#1616#1717#18")
make("AAAA#BBBBB#CCCC#DDD#EEEEEE#FFFFFFFFFF#GGGGG#HHHH#III#JJJJJJJJJ#K#L#M#N#O#P#Q#R#SSSSS#TTTT#UUUU#VV")
ca marche nikel avec y=0

*** EDIT *** : oups grillé par LSI :wink:

Publié : sam. 24/janv./2009 21:31
par Ollivier
@MetalOS

En m'éloignant un petit peu de ton sujet, je te mets le lien au cas où tu veuilles faire une version compatible IE.

Publié : dim. 25/janv./2009 1:00
par MetalOS
Super merci Soldat ca marche nikel maintenant.

Ollivier je ne comprend pas trop ce que tu veut que je fasse de compatible avec IE ????

Publié : dim. 25/janv./2009 2:21
par Ollivier
@MetalOS

InternetExplorer (IE) était un outil fortement utilisé chez l'homme il y a 1 800 000 ans, un peu après la naissance du biface. Il permettait aux hommes de communiquer entre eux. Malheureusement, les fresques intempestives vantant les promotions de femmes à moins de trente chameaux pièce, étaient plus que rageantes. Sans parler des nombreuses failles laissant la vie privée du Cro-magnon Lambda trahi par des papyrus espion. D'où l'apparition de FireFox (FF) il y a environ 400 000 ans.

Trève de plaisanterie : je te vois découper ton tableau HTML avec des caractères "dièses". J'en déduis que tu navigues sous FF. Cela me rappelle une galère rencontrée dans un autre sujet. Car les caractères de séparation sont différents entre FF et IE. Cf lien 2 posts plus haut.

Mais bon, si tu ne bosses que sur une seule bécane, ce détail t'importe peu...

Publié : dim. 25/janv./2009 11:13
par flaith
MetalOS a écrit :Super merci Soldat ca marche nikel maintenant.
8O Dire que je me suis pris la tête pour t'aider, ca fait plaisir :?

Publié : lun. 26/janv./2009 6:09
par MetalOS
Merde désoler flaith je t'avais oublié merci à toi aussi de m'avoir aidé.

@Ollivier

non en faite je reçois mes données sous cette forme

120###214#45#548####

est j'utilise le tableau pour les traiter c tous. En faite c un simple fichier html avec aucune balise mais simplement ce genre de ligne.