Nombre de lettres dans deux variables égaux

Résolu
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 - 1 mars 2011 à 12:13
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 - 1 mars 2011 à 21:02
Bonjour,

Voila je possède un mot qui est enregistré dans une variable dite Key
Et un texte qui est enregistré dans une variable dite Clair.

Je les déclare ainsi :

Dim Key as string = "toto"
Dim Clair as string = "Il fait un beau temps"


Ensuite, J'enlève tous les espaces du texte

Je les enlève ainsi :

Clair = replace(clair, " " , "")



Voila mon problème :

Je cherche à ce que qu'en je clique sur un bouton, le nombre de lettre dans la variable key et texte soit égaux toute en gardant les mêmes caractère de la variable key:

Exemple :

Key : toto
Texte (après enlèvement des espace) : Totovaàlaplage

Résultat voulu :

Key : tototototototo
Texte (après enlèvement des espace) : Totovaàlaplage



Autre exemple :

Key : Chiffre
Texte (après enlèvement des espace) : Jevaisàlacaserne

Résultat voulu :

Key : ChiffreChiffreCh
Texte (après enlèvement des espace) : Jevaisàlacaserne


Merci.

48 réponses

Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 13:56
J'ai jamais dit que c'était de cette façon qu'il fallait s'en servir, d'ailleurs c'est pas une obligation non plus, j'ai trouvé une autre façon de faire sans.

Quant à l'algorithme je l'ai déjà précisé plus haut, mais en essayant de reformuler plus en pseudo-code

Initialiser résultat à vide
Pour chaque caractère de "valeur" faire
Ici faire ce qu'il faut pour récupérer le caractère "suivant" de clef"
ajouter à résultat le caractère récupéré
Fin Pour

Renvoyer résultat

Exemple
"clef" = "aie"
"valeur" = "hello"

"resultat" = ""
on boucle sur les caractères de "hello"
on est donc sur le "h"
on entre dans la boucle on récupère le caractère "suivant" de "clef" (on récupère donc "a"
on ajoute à résultat -> résultat contient donc "a"

on boucle sur le "e"
on récupère le suivant -> "i"
on ajoute à résultat -> "ai"

on boucle sur le "l"
on récupère le suivant -> "e"
on ajoute à résultat -> "aie"

on boucle sur le "l" (le 2ème)
on récupère le suivant (là trouver un moyen de revenir au début de clef) -> "a"
on ajoute à résultat "aiea"

on boucle sur le "o"
on récupère le suivant -> "i"
on ajoute à résultat -> "aieai"

sortie de boucle on renvoie "aieai"
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 14:06
Tu entend quoi par on boucle sur les caractères de Hello ?
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 14:07
euh.. ben on boucle lol je vois pas comment le dire autrement, après que ce soit une boucle For, For Each, While, Do Loop ça c'est à toi de voir, chaque possibilité est faisable (plus ou moins facilement)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 14:17
Okay merci,

Je pensais aussi à sa :

key : azer
Clair : azerty


On compte les caractère de Key et de Clair :
Key : 4
Clair : 6

On met dans NewKey les 4 caractère de key
NewKey : azer

On extrait les 4 caractère de Clair
Key : 2
Clair : 2

On prend les deux premier caractère de key et on ajoute à NewKey :
NewKey : azeraz


Tu en pense quoi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 14:23
Oui ça peut marcher aussi (d'ailleurs celle-ci je la verrais en tant que fonction récursive mais ça c'est une autre histoire )

La méthode utilisée importe peu (dans un premier temps) le but c'est que ça marche (sans trop cochonner le boulot quand même)

Une fois que c'est fait, qu'on peut dire au patron/prof/etc. "c'est bon on a une version exploitable" on la garde au chaud et on essaie à côté de voir si on peut pas l'améliorer, rapidité, gestion mémoire, exceptions, etc. (parce que c'est rare que du premier coup ça soit parfait)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 14:26
Okay merci ;)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 14:43
Voila, regarde :

Soit NbrCharacterClair le nombre de caractères qu'il y a dans le texte.
Soit NbrCharacterKey le nombre de caractères qu'il y a dans la clé.
Soit NewKey la nouvelle clé
Soit NewNbrCharacterClair le nouveau nombre de caractère.

        If NbrCharacterClair > NbrCharacterKey Then
            NewKey = Key
            NewNbrCharacterClair = NbrCharacterClair - NbrCharacterKey

            If NewNbrCharacterClair > NbrCharacterKey Then
                ' Trop grand
            Else
                FirstClair = Key.Substring(0, NewNbrCharacterClair)
                NewKey = NewKey + FirstClair
                MsgBox(NewKey)
            End If

        Else
            'moin grand
        End If



Mais il y a quand même un défaut ^^
Je te laisse le découvrir ;)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 14:46
Imagine, Si je met tous sa dans une boucle while, existe t'il un moyens de relancer la boucle ?


while 1

If NewNbrCharacterClair > NbrCharacterKey Then
                ' On relance la boucle
            Else
                FirstClair = Key.Substring(0, NewNbrCharacterClair)
                NewKey = NewKey + FirstClair
                MsgBox(NewKey)
            End If

End while


Ce code n'est qu'un exemple
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 15:51
Pour "relancer" une boucle tu as l'instruction Continue For/While/Do (selon la boucle utilisée)
Je t'avouerais par contre que je vois pas trop où tu vas aller avec ton début de code (mais ça vient peut-être du fait que j'ai pas du tout la même approche)

Juste pour info, même si While 1 est "correct" il vaut mieux écrire While True (après tout un While attend un Boolean et à chaque tout tu as une conversion implicite de ton 1 en True)

D'ailleurs While 1/True on évite au maximum ce genre de boucle infinie (sauf cas spécifique) tu dois bien pouvoir trouver une condition adéquate à y mettre, non ?
Par rapport à ton début de code une condition portant sur les nombres de caractères déjà parcourus (bon je le répète je vois pas trop où en venir donc trouver la condition adéquate n'est pas aisée)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 16:08
Voila mon application avec le code :

http://files.webopload.net/1688491927.crypterdncriypteruntexteavecunecln.rar

Il y a juste un problème, lorsque je remplie mes champs et je clique sur le button crypter, une erreur apparait, je te laisse découvrir laquelle ;)

Si tu pouvais y jeté un coup d'œil sa serait super

Merci
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 16:09
Je t'es tous bien commenté
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 16:16
J'ai pas Visual Studio sous la main pour tester le code, et puis pour résoudre ce problème, j'en ai pas vraiment besoin...

D'ailleurs la première solution de NHenry marchait plutôt bien, c'est juste les méthodes utilisées qui me plaisent moins mais en remplaçant les méthodes Len et Left par des trucs moins VB6-like ça irait (techniquement ça va aussi tel quel, ça répond au besoin c'est simple et court)

Après des méthodes différentes on peut s'amuser à en trouver plein !
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 16:19
Oui, le seul problème est qu'avec ce code :

Do while len(Key)<len(clair)
    key=key & key
loop
key=left$(key,len(clair))


dans la ligne :

key=left$(key,len(clair))


une erreur apparait :

Le caractère de type '$' ne correspond pas au type de données déclaré 'Integer'
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 16:24
Si je reprend mon code :
Clair est le texte

Dim FirstClair As String = Clair
Dim NbrCharacterKey As Integer = Len(Key)
Dim NbrCharacterClair As Integer = Len(Clair)
Dim NewNbrClair As String = NbrCharacterClair


 FirstClair = FirstClair.Substring(NbrCharacterKey, NewNbrClair)


Une erreur apparait :

L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
Nom du paramètre : length
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 16:32
Pour l'histoire du Left$ c'est l'écriture VB6 il existait 2 versions Left et Left$ (me rappelle plus exactement la différence) donc ici tu "pourrais" mettre Left et ça marcherait ou mieux remplacer par l'équivalent VB.Net (que tu connais, suffit juste de comprendre ce que fais le code)

Quant à ton problème si on résumé ce qu'il se passe:

NbrCharacterKey contient le nombre de caractères de la clef
NbrCharacterClair contient le nombre de caractères de la valeur
(NewNbrClair je sais pas trop à quoi il sert car dans ce que tu as écrit c'est la représentation en texte du nombre d'avant ex: 123 -> "123")

ensuite tu utilises Substring, qui prend en paramètre (suffit de lire la documentation) en premier l'indice de départ pour extraire la sous-chaine et tu lui donnes la longueur totale de la chaîne (en gros tu places ton "curseur" sur le dernier caractère) et tu veux extraire NewNbrClair caractères (bon déjà merci les options laxiste qui convertissent implicitement ton texte en nombre) mais tu cherches à écrire n caractères à partir du dernier, forcément ça dépasse et ça plante

Et puis c'est quoi cette foutue manie d'utiliser Len() partout, la classe String propose une propriété Length faire pour ça c'est pas fait pour rien (c'est ma minute coup de gueule)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 16:47
Pour le Substring, je démarre au nombre de caractère du key et ce termine au nouveaux nombre de caractère du clair.

Regarde mon code complet :

Do While NbrCharacterKey < NewNbrClair
            NewKey = NewKey + Key
            FirstClair = FirstClair.Substring(NbrCharacterKey, NewNbrClair)
            NewNbrClair = NewNbrClair - NbrCharacterKey
            MsgBox(NewKey)
            If NewNbrClair < NbrCharacterKey Then
                EtatKey = True
            Else
                ' on relance la boucle
            End If

        Loop


        If EtatKey = False Then
            NewKey2 = Key.Substring(0, NbrCharacterClair)
            NewKey = NewKey + NewKey2
        End If


        MsgBox(NewKey)
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 17:02
arf l'affichage à plantouiller sur mon exemple du azertyuiop lol bref je voulais montrer qu'on partait du "e" pour aller jusqu'au "p" (jusqu'au bout quoi)
0
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
1 mars 2011 à 17:11
Je ne comprend pas pourquoi tu fais : clair.longueur > 0
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 17:13
Ben tu voudrais l'arrêter quand ta boucle exactement sinon, là à chaque tour tu réduis clair (toujours en partant du principe que j'ai compris l'idée) donc quand tu l'as réduit au point qu'elle soit vide tu vas bien t'arrêter non ?
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
1 mars 2011 à 17:25
Lol NHenry à part le fait que sur mon brouillon j'ai mis un While plutôt qu'un Do While on a la même (enfin j'ai 3 versions ... pour le moment) la remarque était pas spécialement dirigée contre toi personnellement, mais je suis allergique aux mix VB6/VB.Net et tu passais par là (note que j'ai quand même souligner que ta solution était parfaitement valide, mais non je cherche pas à me rattraper ^^)
0
Rejoignez-nous