cs_ccmf
Messages postés5Date d'inscriptionjeudi 18 mai 2006StatutMembreDernière intervention 3 septembre 2006
-
3 sept. 2006 à 18:13
cs_ccmf
Messages postés5Date d'inscriptionjeudi 18 mai 2006StatutMembreDernière intervention 3 septembre 2006
-
3 sept. 2006 à 21:50
Bonjour,
voilà, je suis en train de faire un petit programme en vb pour
calculer l'empreinte numérique d'un texte avec l'algo SHA-1, pour ce
faire j'ai besoin de variables qui font références à d'autres variables
et je n'arrive pas à les enchaîner.
Par exemple, j'ai la possibilité d'avoir x mots(MotCount(i)) qui sonts eux mêmes divisés en 16 (W0->W16), voici ce que je pensais qu'il fallait écrire :
For i 0 To i MotCounter
MotCount(i).W0 = Mid(text, 1, 4)
MotCount(i).W1 = Mid(text, 5, 4)
MotCount(i).W2 = Mid(text, 9, 4)
.
.
.
Mais lorsque je veux exécuter j'ai une erreur de compilation : Qualificateur incorrect.
Si quelqu'un pouvait me dire comment faire ça serait sympa.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 sept. 2006 à 20:26
Oui, donc, au vu de ton code, MotCount n'est dimensionné que comme un tableau de type String.
Normal qu'il refuse cette syntaxe, MotCount et W0 n'ont aucun lien.
Il faut que tu définisse W comme une structure :
Structure typeDesW
Dim W0
As
String
Dim W1
As
String
Dim W2
As
String
Dim W3
As
String
Dim W4
As
String
Dim W5
As
String
Dim W6
As
String
Dim W7
As
String
Dim W8
As
String
Dim W9
As
String
Dim W10
As
String
Dim W11
As
String
Dim W12
As
String
Dim W13
As
String
Dim W14
As
String
Dim W15
As
String
End
Structure
Et que tu définisses MotCount comme un ensemble ressemblant à cette sutruture :
Dim MotCount()
As typeDesW
Ensuite, tu as encore du pain sur la planche :
- 16 variables de 4 Bytes, pour moi, ça fait 64 bytes, pas 32 ! à éclaircir avant de continuer
- Tu recherches le nombre de mots nécessaires. Pourquoi ces signes - dans la syntaxe ?
- "Mid(text, 1, 4)" te renverra toujours la même chaine puisée parmi les 4 premiers caractères du texte contenu dans "text"
Tu ne gères pas du tout le décalage du découpage du mot
Tu devrais avoir un truc du genre :
For i = 0 To MotCounter
Décalage = i * 8
MotCount(i).W0 = Mid(text, 1 + Décalage, 4)
MotCount(i).W1 = Mid(text, 5 + Décalage, 4)
Quand tu auras tout résolu, il pourras voir que tu peux aussi indexer tes variables W : ça t'évitera les répétitions de code (modif de la structure + nouveau For (avec la syntaxe "Step") à l'intérieur du premier ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 3 sept. 2006 à 19:16
bah tout dépend, tes MotCount c'est un tableau de type ?
Sinon, évite ce genre de titre pour tes messages, ca n'attirera pas plus de personnes, bien au contraire, crois moi !
Un bon titre est un titre qui décrit le problème brièvement, là ceux qui s'y connaissent viennent t'aider, mais un titre URGENT, ou A L'AIDE, ca donne pas vraiment envie de lire le post !
cs_ccmf
Messages postés5Date d'inscriptionjeudi 18 mai 2006StatutMembreDernière intervention 3 septembre 2006 3 sept. 2006 à 19:38
Mes MotCount dépendent du nombre de caractères dans le texte à traiter,
un mot peut contenir 64 caractères pour chaque 64 caractères en plus
j'ai un MotCount de plus, chacun divisé en 16 variables (W0->W15)
Dans mon code je récupère une valeur texte, j'affecte ensuite des
paquets de 4 caractères à mes variables Wx, donc si j'ai moins de 64
caractères j'aurais uniquement
MotCount(1).W0 = "abcd"
MotCount(1).W1 = "abcd"
jusqu'à
MotCount(1).W15 = "abcd"
Au delà de 64 caractères j'aurais
MotCount(2).W1 = "abcd"
.
.
.
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 sept. 2006 à 19:41
Combien vaut ta variable "i" quand le défaut apparait ?
0 : Tu n'as pas défini le tableau MotCount
10 : Idem, tu n'as pas prévu assez de lignes dans ton tableau
Sinon, comme le dis Dark (tu me permets de t'appeler Dark, Dark ?), vérifie sous quel type de varaiable est défini W0 (ici, "As String" puisque tu lui colles du texte)
Si tu as défini W0 "As Long" par exemple, tu utilises alors la conversion implicite des types de variable (Chaine -> numérique).
C'est pratique que VB s'en occupe seul, mais quand on lui envoie des données de type incompatible (autre chose que des chiffres), ça peut donner ce genre d'erreur.
Alors vérifie ce qu'il y a dans "Mid(text, 1, 4)"
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
cs_ccmf
Messages postés5Date d'inscriptionjeudi 18 mai 2006StatutMembreDernière intervention 3 septembre 2006 3 sept. 2006 à 19:45
L'erreur se produit au moment de la compil, pour ce qui est de la
déclaration de mes varaibles elle sont en string et je fais un Redim
MotCount en fonction de mon i.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 sept. 2006 à 19:51
Là, dans ton exemple de code, tu ranges dans un tableau "MotCounter fois" les portions du mot "text", c'est à dire pleins de tableaux identiques ....
A quoi correspond MotCounter ?
Si tu veux indexer la lecture du mot à décomposer, il faut bien sûr indexer le "text" renfermant le mot à traiter. Ici, c'est toujours le même.
Alors :
- Soit tu nous montres tout ton code (parce que Redim seul réinitialise le tableau, c'est encore un autre bug possible)
- Soit tu expliques avec des exemples clairs ce que tu veux faire, parce que je ne pense pas que ce soit une histoire de syntaxe, mais d'organisation.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 3 sept. 2006 à 19:55
ok pour dark jack si tu me permet de t'appeler jack, jack ? ;)
Sinon, moi ce qui me choque c'est les MotCount(i).W0
Tu n'as le droit de faire cà que si MotCount est un tableau de type ou d'objet ! Donc déjà, est-ce bien le cas ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 sept. 2006 à 20:05
Dark : n'un autre côté, il est sous .Net, donc les syntaxes farfelues seraient piégées dès la saisie (soulignés).
En VB6, on aurait pu faire ceci, mais je crois que .Net refuse les références éloignées dans le dimensionnement :
Private Type typeMesChaines
W(0 To 15) As String
End Type
Dim MotCount(0 To ???) As typeMesChaines
et donc, indexer aussi les sous-champs
Et la syntaxe du For : Je viens de faire l'essai.Cette syntaxe "For i 0 To i 32", bien que acceptée, ne donne pas du tout le même résultat que "For i = 0 To 32"
A revoir aussi ...
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 3 sept. 2006 à 21:08
Hello,
Pour mettre mon grain de sel.
Es tu sur d'avoir bien compris l'algo de départ ?
Es-ce que tu ne serai pas en train de traduire l'algo d'un autre langage ?
Es ce qu'il n'y a pas déjà une classe qui fait tout ca trés bien ?
Jcbé[^]
La meilleure réponse à une question est souvent... LA bonne question.
cs_ccmf
Messages postés5Date d'inscriptionjeudi 18 mai 2006StatutMembreDernière intervention 3 septembre 2006 3 sept. 2006 à 21:50
Merci à tous pour vos réponses, elles m'ont été d'une grande utilité.
Mon problème initial est résolu. Il est vrai que certaines valeurs ne
sont pas bonnes mais je fais des essais et j'essaye plusieurs
paramètres.
Pour répondre à Jcbé, je pense avoir compris l'algo et devant faire un
projet de math pour mes études par mes propres moyens (n'ayant jamais
pris de cours d'informatique) je programme comme je peux.