spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013
-
3 avril 2013 à 09:04
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013
-
4 avril 2013 à 12:53
Bonjour à tous,
Je dois réaliser un programme en VB6 afin de récupérer des données d'un fichier ASCII pour en consulter les informations.
Je cherche à ranger convenablement des données en provenance d'un fichier. Ce fichier se présentent sous forme de colonne. La première ligne me donne le nom des grandeurs, la deuxième les unités suivi des données. La première colonne étant la base de temps ou frequence, les suivantes les mesures.
Je parviens à récupérer toutes ces données et je souhaite les ranger pour les retrouver aisemment. Le but? l'utilisateur souhaite visualiser une listbox avec le nom des mesures et sélectionner celle dont il veut consulter les infos.
Je souhaite utiliser un dictionnaire ou une collection à deux niveaux (excusez mon faible vocabulaire informatique). Au premier niveau, les clés sont les noms des mesures, identiques aux noms de la listbox (j'atteind ainsi la bonne donnée). Au second niveau les clés "Name", "Xunit", "Xdata", "Yunit", "Ydata".
Voici les codes que j'ai tenté, qui interviennent pour ranger les éléments issus du fichier :
dim dDictDatas
set dDictDatas = CreateObject(Scripting.Dictionary)
for i=0 to iNbVal
dim dDictData
set dDictData = CreateObject(Scripting.Dictionary)
dDictData.Add "Name", sName
dDictData.Add "Xunit" = Xunit
dDictData.Add "Xdata", Xdata
dDictData.Add "Yunit" = Yunit
dDictData.Add "Ydata", Ydata
dDictDatas.Add sName, dDictData
next
dim cDictDatas as collection
set cDictDatas = new collection
for i=0 to iNbVal
dim cDictDatas as collection
set cDictDatas = new collection
cDictData.Add Item:= sName, Key "Name"
cDictData.Add Item:= Xunit, Key "Xunit"
cDictData.Add Item:= Xdata, Key "Xdata"
cDictData.Add Item:= Yunit, Key "Yunit"
cDictData.Add Item:= Ydata, Key "Ydata"
cDictDatas.Add Item:=cDictData, Key:=sName
next
Dans les deux cas, les dictionnaires ou collections sont créées, j'arrive à les visualiser avec l'espion de variable
J'arrive aussi à afficher les valeurs de cDictData avec des msgbox
ex : msgbox(dDictData("Name")) renvoi le bon nom.
Le problème vient quand je veux récupérer les données. Au cliquage d'une ligne dans la liste je veux récupérer les bonnes données :
sName = listbox.text
dim DictData
set DictData = CreateObject(Scripting.Dictionary)
ou
dim DictData as collection
set DictData = new collection
à la ligne
dDictData = dDictDatas(sName)
J'ai le message d'erreur :
erreur d'execution 450
nombre d'argument incorrect ou affectation de propriété incorrecte.
Désolé, j'ai pensé trop simplement que le contenu de l'un allait facilement se transférer au second et à présent je ne trouve pas de solution.
Pourriez vous me dire si ce double rangement est autorisé?
quel objet est le mieux à utiliser (collection ou dictionnaire)?
et comment récupérer les données de la bonne variable?
D'avance merci à tous et merci à ceux qui ont lu toute cette tartine et me répondront.
Merci également à ceux qui m'ont déjà aidé sur un précédent forum et en désolé pour mon erreur de fonctionnement du forum.
Bonjour Spluiss.
Je n'arrive pas à croire que vous ayez pu exécuter le code suivant :
dim cDictDatas as collection
set cDictDatas = new collection
for i=0 to iNbVal
dim cDictDatas as collection
set cDictDatas = new collection
cDictData.Add Item:= sName, Key "Name"
cDictData.Add Item:= Xunit, Key "Xunit"
cDictData.Add Item:= Xdata, Key "Xdata"
cDictData.Add Item:= Yunit, Key "Yunit"
cDictData.Add Item:= Ydata, Key "Ydata"
cDictDatas.Add Item:=cDictData, Key:=sName
next
En effet
1) Aux lignes 4 et 5, vous avez probablement voulu mettre cDictData et non pas cDictDatas.
2) Vb6 aurait mal digéré un next sans i.
3) Vb6 aurait mis des majuscules et des espaces là où il veut qu'il y en ait.
En conséquence, je vous prie de nous redonner votre code par un copier-coller, après l'avoir testé.
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 3 avril 2013 à 09:53
Bonjour,
Je travail sur un réseau non connecté au net, je ne peux pas faire de copier-coller. Il est possible qu'en recopiant le code j'y ai omis certaines majuscules et espaces.
Pour les variables cDictData et cDictDatas, c'est bien ce que je souhaite. Le cDictDatas contient tous les cDictData ; façon pour moi de savoir si je suis en train de traiter les données en individuelle dans la boucle ou la variable contenant toutes les données.
En effet, il y a
next i
excusez moi pour cet oubli.
Toutefois, j'ai bien ce code qui fonctionne et me transmet des variables complètes dans les espions. Il s'agit d'un extrait du code correspondant à la création des variables. Le code précédent n'est que l'étude du fichier et la récupération des informations et mesures.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 3 avril 2013 à 09:54
Bonjour, (et un salut à Zermelo, que je "plussoie")
et que dire de cette ligne qui n'a aucun sens :
cDictDatas.Add Item:=cDictData, Key:=sName
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
À mon avis, cette ligne démontre que l'ami Spluiss n'aime pas typer ses variables, raison pour laquelle il se réfugie dans un Dictionary.
Ce cas me paraît désespéré (on dit que ce sont les plus beaux).
Amicalement.
Étant illettré, je signe d'une croix : ×
Vous n’avez pas trouvé la réponse que vous recherchez ?
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 3 avril 2013 à 10:52
Bonjour,
Pour extraire les données du fichier il faut que j'utilise des données typées, ça semble logique, je n'ai pas de problème pour typer mes données.
Je part d'un programme qui fonctionne très bien , je souhaite mieux ranger mes données et un dictionnaire ou une collection permet de s'en éclairer et de les labéliser.
ligne qui n'a aucun sens aussi pour moi initialement :
cDictDatas.Add Item:=cDictData, Key:=sName
pourtant issu des aides de msdn ou de forum et elle permet de préciser la clé et la valeur qu'on y donne. Elle a aussi l'avantage de fonctionner...
C'est un forum d'aide ici, qui a la réputation d'être constructif.
Je ne comprend pas bien pourquoi vous vous obstinez à critiquer un code qui fonctionne. Suite au premier commentaire de Zermelo j'ai vérifié le code, il n'a pas besoin de plus pour marcher et obtenir des variables bien formatés. Mon problème vient au moment où je souhaite récupérer le dictionnaire cDictData correspondant à la variable dont le nom est la clé du dictionnaire cDictDatas, il me manque un argument pour bien la récupérer, d'où cette question. En avez vous la solutions?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 3 avril 2013 à 11:33
Je ne comprend pas bien pourquoi vous vous obstinez à critiquer un code qui fonctionne
Je ne vois pas trop comment le code que tu as montré pourrait "fonctionner" !
Montre donc (par copier/coller) celui que tu as réellement écrit
pourtant issu des aides de msdn ou de forum
Ah bon ! Montre donc un de ces liens !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 3 avril 2013 à 11:46
Pour tout te dire :
le code que tu as montré est à ce point étonnant qu'il n'est même pas corrigeable !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 3 avril 2013 à 13:32
Bonjour,
Ne prenez pas cela pour une echappatoire, toujours est il que j'ai trouvé la solution et donc tout fonctionne.
Ce n'est peut être pas suffisant pour des spécialistes reconnus tel que vous, je n'ai fait simplement que
dim sName As String
, je n'ai pas ensuite les automatismes suffisants pour créer des types moi même tel que VB le propose.
En tout cas, j'ai donc trouvé la solution et le code tel que je vous l'ai transmis fonctionne, il n'a pas besoin d'être corrigé, il était là pour le context, c'est la récupération de mes données qui ne fonctionnait pas.
Ce forum aura eu l'avantage de me pousser à rechercher plus profondemment la solution et replonger dans mon code pour répondre à vos investigations. Ces forums ont bien des avantages mais tout dépend sur qui on tombe... Pourquoi je n'ai pas obtenu de vous une solution mais seulement des commentaires pour vérifier mes compétences et aller à l'encontre de ce que VB pouvais accepter? Je vois bien que des éléments dans mes exemples doivent manquer pour être parfaitement clairs, mais ces lignes sont exactement celles que j'utilise et me donnent les résultats escomptés.
Comme je vous l'ai dit, je ne peux pas faire de copier/coller, je travaille sur un réseau fermé de tout contact internet et les sorties de données n'en sont pas autorisées. Toutefois, je l'imprimerai pour le recopier sur le site et récolter vos remarques peu agréable mais sans doute constructives pour mes futures programmations.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 3 avril 2013 à 14:39
Amen !
Voilà une "fausse" discussion qui peut donc être close.
N'en parlons surtout plus.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 3 avril 2013 à 16:25
Quant à :
Toutefois, je l'imprimerai pour le recopier sur le site
Aies alors la simple décence de l'isoler et de l'essayer avant de le "poster" ici.
Si tu avais simplement pris cette précaution élémentaire, tu te serais rendu tout seul compte de l'incohérence du code que tu as montré (et qui ne risque pas de fonctionner, ni de près, ni de loin).
Voilà voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 4 avril 2013 à 09:43
Penses tu vraiment que je n'ai pas isolé ce code avant afin d'identifier mon problème et chercher la solution? Biensur que si.
Je dois croire qui?
Toi qui t'obstine à me répéter que le code ne marche pas et est incohérent?
Ou Visual Basic qui fonctionne avec les lignes exactes, donc non corrigeables en effet, que j'ai montrées? (oui la réponse est dans la question!!!)
Il ne manque que la déclaration des variables sName, Xunit, Xdata, Yunit, Ydata, et leur typage (dont j'ai du aussi me justifier). Ici c'est un forum de développeurs et la déclaration et typage des variables est la première chose qu'on apprend en se lançant en programmation VB6, était-ce utile d'en ajouter encore à ma question déjà très longue? ou cela t'a t il vraiment destabilisé au point de déclarer ma question "fausse discussion" et à laquelle tu as préféré ajouter des commentaires sans intérêt plutôt que d'apporter une solution constructive?
Je n'avais jamais utilisé de collection avant en VB, l'exemple de msdn ne fonctionnait pas et je n'ai pas trouvé d'autre exemple sur VBfrance donc je l'ai posté. J'ai posté un code qui fonctionne pour donner le contexte et y ai ajouté la ligne qui me posait problème.
Je ne vais pas reposter tout le code, avec tes réponses ça semble inutile. Pour confirmer que ça marche il faut simplement déclarer et typer les tableaux sName, Xunit, Xdata, Yunit et Ydata et les ranger dans la collection tel que le code le fait. Un point d'arrêt et un espion de variable permet de les consulter et de voir que tout est bien rangé (comme je le dis depuis le début de cette discussion).
Donc en effet, Amen! j'ai trouvé la solution. Ce n'est pas le début du code qui pose problème mais le
set cDictData = new collection
cDictData = cDictDatas(sName)
qu'il fallait simplement remplacer par
set cDictData = cDictDatas(sName)
N'ayant jamais utilisé de collection dans vb je ne me suis pas douté d'une solution aussi simple. Solution simple, à laquelle il ne fallait qu'un seul post et que tu ne m'as pas apportée, préférant commenter un code qui fonctionne.
Donc les forums ont l'avantage de repondre souvent à beaucoup de problèmes et vbfrance fait parti de ces forums de qualité où on peut trouver beaucoup de réponse et de programmation pertinentes. Le problème reste toujours le même : tout dépend sur qui on tombe!!!
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 4 avril 2013 à 09:52
Je m'excuse auprès de zermelo car je disais que les lignes 4 et 5 sont bien celles que je souhaite en confirmant ensuite que c'est cDictData qu'il devrait y être, erreur de frappe sur ces deux lignes ou oublie d'enlever les "s" après un copier-coller. Erreur qui se confirme par le code au dessus ou qui est évidente.
Donc désolé pour cette mauvaise confirmation Zermelo et merci pour ce commentaire.
Bonne continuation
Ce n'est pas la première fois que je tombe sur quelqu'un difficile à aider. Mais je dois vous rendre hommage : vous battez tous les records. Vous ne vous rendez même pas compte que si vous aviez exposé toutes vous déclarations, la question aurait été réglée en deux coups de cuiller à pot.
Désormais, quand je verrai le mot Spluiss, je fuirai à toutes jambes : trop d'emmerdes.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 4 avril 2013 à 11:53
Bonjour, Zermelo,
Idem en ce qui me concerne. Motif principal : très mauvaise foi caractérisée.
(il suffit d'ailleurs de comparer son premier message avec le dernier).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
spluiss
Messages postés27Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention 4 avril 2013 4 avril 2013 à 12:53
Je suis taxé de "mauvaise foi caractérisée" par deux personnes qui accablent un code qui marche et, une fois la solution trouvée, me disent que "la question aurait été réglée en deux coups de cuiller à pot" en se cachant derrière des excuses aussi simple que "si vous aviez exposé toutes vos déclarations", chose évidente en VB6...
le tout justifié par "trop d'emmerdes" et "il suffit d'ailleurs de comparer son premier message avec le dernier"...
En effet, je me serait passé de tous ces commentaires inutiles. Une simple étude de vos premières réponses avant de les envoyer vous aurait convaincu de vous abstenir vu leur utilité.