Fusionner chaînes en alternant les lettres.
Résolu/Fermé
libellule123
Messages postés
4
Date d'inscription
dimanche 11 septembre 2016
Statut
Membre
Dernière intervention
19 septembre 2016
-
11 sept. 2016 à 19:35
acive Messages postés 125 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 14 décembre 2016 - 12 sept. 2016 à 17:10
acive Messages postés 125 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 14 décembre 2016 - 12 sept. 2016 à 17:10
A voir également:
- Fusionner chaînes en alternant les lettres.
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment fusionner des pdf sans logiciel - Guide
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Fusionner fichier excel - Guide
- 100 € en lettres - Forum Réseaux sociaux
7 réponses
acive
Messages postés
125
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
7
11 sept. 2016 à 19:41
11 sept. 2016 à 19:41
Bonjour,
On veux bien, mais on a pas vu le début de ton code...
On veux bien, mais on a pas vu le début de ton code...
Bonsoir, merci de me répondre.
Pour le code j'avais débuté comme suis:
je sais que le code n'est pas bon puisqu'il m'affiche même des lettres que je n'ai pas saisies.
jusqu'a présent je n'avais travailler que sur une chaîne comme le code qui suit :
Pour la fonction que je souhaite créer je ne sais pas par quoi commencer.
Pour le code j'avais débuté comme suis:
Public Function fusion(ByVal mot1 As String, ByVal mot2 As String) As String Dim res As String = "" For i = 0 To mot1.Length And mot2.Length - 1 mot1 = mot1.Substring(0) mot2 = mot2.Substring(0) res = mot1 & mot2 Next Return res End Function
je sais que le code n'est pas bon puisqu'il m'affiche même des lettres que je n'ai pas saisies.
jusqu'a présent je n'avais travailler que sur une chaîne comme le code qui suit :
Public Function tri(ByVal lexie As String) As String 'On déclare la variable test qui est de type booleen qui prend la valeur "vraie". Dim Test As Boolean = True 'On déclare la variable res qui est de type chaîne. Dim res As String 'On déclare la variable car qui est de type caractère. Dim car As Char 'On affecte à res la valeur de "lexie" res = lexie 'booleen qui devient Vrai uniquement si le tri est correct. While Test = True 'On affecte à "test" la valeur "faux" Test = False 'boucle qui parcours le res tant que le booléen est à faux: 'Pour i allant de res à la longueur du mot -2 (pourquoi pas -1 simplement car la comparaison du tri d'effectue sur 2 céllules donc à la fin du tri on se retrouverai en dehors du tableau) For i = 0 To res.Length - 2 'si la valeur de la cellule est supérieur à la cellule qui suit, les inverser: 'Tant que res de i est suppérieur à res de i+1 Alors If res(i) > res(i + 1) Then 'On affecte à car la valeur de res de i. car = res(i) res = res.Remove(i, 1) res = res.Insert(i + 1, car) Test = True End If Next End While Console.ReadLine() Return res
Pour la fonction que je souhaite créer je ne sais pas par quoi commencer.
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
acive
Messages postés
125
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
7
Modifié par acive le 11/09/2016 à 22:21
Modifié par acive le 11/09/2016 à 22:21
Ta formule me pose problème...
Et si tu fais :
Ca fonctionne...
Mais que se passera-t-il quand le mot2 sera plus court que le mot1 ??? => Erreur...
Et si tu fais :
Public Function fusion(ByVal mot1 As String, ByVal mot2 As String) As String Dim res As String = "" For i = 0 To mot1.Length -1 res &= mot1.ToCharArray(i, 1) & mot2.ToCharArray(i, 1) Next Return res End Function
Ca fonctionne...
Mais que se passera-t-il quand le mot2 sera plus court que le mot1 ??? => Erreur...
Bonsoir acive,
Quand mot2 sera plus court que mot1 (ou inversement, quand mot1
sera plus court que mot2), il y aura effectivement un problème, car
il faut gérer ce que j'appelle le « reliquat » : quand une chaîne est
plus courte que l'autre.
Dans ta boucle For .. Next, tu as mis : res &= ... ; j'ai été bien déçu,
car j'ai cru que tu avais trouvé un moyen plus court pour mettre :
res = res & ... ; hélas, avec mon VBA Excel 2007, ça produit une
erreur de compilation ! Est-ce que tu as une version ultérieure
avec laquelle ça marche ?
Cordialement. 😊
acive
Messages postés
125
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
7
Modifié par acive le 11/09/2016 à 22:36
Modifié par acive le 11/09/2016 à 22:36
Re:
Oui pour moi c'est du VB.net avec une légère façon de réfléchir à la manière VB6
Le problème n'est pas pas du tout le langage de programmation, c'est plutôt la façon de réfléchir que se passera-il quand la longueur des deux mots seront différents?
Et d'ailleurs quel est le but concrètement?
Oui pour moi c'est du VB.net avec une légère façon de réfléchir à la manière VB6
Le problème n'est pas pas du tout le langage de programmation, c'est plutôt la façon de réfléchir que se passera-il quand la longueur des deux mots seront différents?
Et d'ailleurs quel est le but concrètement?
1) Comme je l'ai indiqué à Whismeril dans mon message #8, je ne connais
que le VBA Excel, pas les autres.
2) libellule123 a bien précisé dans son énoncé initial qu'elle s'exerce à créer
des fonctions, donc c'est peut-être juste un exercice d'entraînement (jeu)
ou peut-être a-t-elle un exercice pour lequel le but est plus concret.
3) Ma fonction Alterner() fait son travail sur les 2 chaînes jusqu'à la longueur
de la chaîne la plus courte (alternance, donc) ; ensuite, si une chaîne est
plus courte que l'autre, ajout du reliquat au résultat retourné ; reliquat :
caractères en plus de la chaîne la plus longue. Une autre solution serait
de ne pas concaténer ce reliquat au résultat, donc on ignorerait alors
purement et simplement les caractères en trop (par rapport à la chaîne
la plus courte).
Bonjour albkan, avant tout merci pour tes conseils.
pour répondre a ce que tu as dit(libellule123 a bien précisé dans son énoncé initial qu'elle s'exerce à créer des fonctions, donc c'est peut-être juste un exercice d'entraînement (jeu) ou peut-être a-t-elle un exercice pour lequel le but est plus concret.)
en fait je suis assistante maternelle et cela fait quelques mois que je me forme à la programmation afin de créer un programme qui me permettra de gérer aux mieux mes contrats. Pour cela j'ai commencer par étudié le langage SQL et par la suite je me suis lancé sur visual basic 2010 afin de m'exercer sur la créations de fonctions pour avoir des bases solides.
C'est quelque chose qui me plait vraiment.
voilà en tout cas encore merci pour ton aide, bien sur je ne vais pas faire du copier coller j'ai étudié ta façons de procéder et je pense que j'ai compris ou était mon erreur.
Je dois bien penser lorsque je fait mon algo a ce que je souhaite retrouver dans mon programme en entrée et en sortie.
En tout cas c'est plus clair pour moi.
pour répondre a ce que tu as dit(libellule123 a bien précisé dans son énoncé initial qu'elle s'exerce à créer des fonctions, donc c'est peut-être juste un exercice d'entraînement (jeu) ou peut-être a-t-elle un exercice pour lequel le but est plus concret.)
en fait je suis assistante maternelle et cela fait quelques mois que je me forme à la programmation afin de créer un programme qui me permettra de gérer aux mieux mes contrats. Pour cela j'ai commencer par étudié le langage SQL et par la suite je me suis lancé sur visual basic 2010 afin de m'exercer sur la créations de fonctions pour avoir des bases solides.
C'est quelque chose qui me plait vraiment.
voilà en tout cas encore merci pour ton aide, bien sur je ne vais pas faire du copier coller j'ai étudié ta façons de procéder et je pense que j'ai compris ou était mon erreur.
Je dois bien penser lorsque je fait mon algo a ce que je souhaite retrouver dans mon programme en entrée et en sortie.
En tout cas c'est plus clair pour moi.
Bonjour libellule123,
Merci pour ta réponse et tes éclaircissements. J'ai bien vu ton message #16
et j'en ai parlé dans mon message #17.
Ne culpabilise pas d'avoir indiqué avec du retard ta version de VBA : beaucoup
d'autres membres n'indiquent jamais, malheureusement, la version du logiciel
qu'ils utilisent, même pour Word et Excel.
Bonne chance pour tes programmes de gestion de contrats
d'assistante maternelle ; et c'est un très beau métier !
Attention quand même à ne pas créer de nouveau baby boom : augmenter
la démographie du pays, c'est très bien ; mais point trop n'en faut ! 😉
Cordialement. 😊
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par Whismeril le 11/09/2016 à 22:48
Modifié par Whismeril le 11/09/2016 à 22:48
Bonsoir
ToCharArray sert à convertir toute la chaine en tableau de char si on a besoin de faire plein de chose avec un tableau de char.
C'est un peu long à l'exécution, donc dommage de le faire à chaque itération, pour optimiser le temps d'exécution (même si c'est peanuts) il est plus judicieux de convertir une fois les 2 tableaux et ensuite de travailler dessus.
Une autre option est d'utiliser la méthode Chars(Index) qui retourne uniquement le caractère à l'index demandé.
Comme acive le fait remarquer, il faut gérer les potentielles différences de taille.
Voici une solution
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
ToCharArray sert à convertir toute la chaine en tableau de char si on a besoin de faire plein de chose avec un tableau de char.
C'est un peu long à l'exécution, donc dommage de le faire à chaque itération, pour optimiser le temps d'exécution (même si c'est peanuts) il est plus judicieux de convertir une fois les 2 tableaux et ensuite de travailler dessus.
Une autre option est d'utiliser la méthode Chars(Index) qui retourne uniquement le caractère à l'index demandé.
Comme acive le fait remarquer, il faut gérer les potentielles différences de taille.
Voici une solution
Public Function Fusion(ByVal Mot1 As String, ByVal Mot2 As String) As String 'liste contenant les caractères mélangés, c'est moins contraignant qu'un tableau Dim debut As New List(Of Char)() Dim i As Integer 'Mélange les lettres jusqu'à la fin du mot le plus court For i = 0 To Math.Min(Mot1.Length, Mot2.Length) - 1 debut.Add(Mot1.Chars(i)) debut.Add(Mot2.Chars(i)) Next i 'ajoute la fin du mot le plus long s'il y a Dim fin As String = "" Select Case Math.Sign(Mot1.Length - Mot2.Length) Case 1 'Mot1 est le plus long fin = Mot1.Substring(i) Case -1 'Mot2 est le plus long fin = Mot2.Substring(i) End Select Return String.Join("", debut) & fin End Function 'testé avec Dim toto As String = Fusion("bonjour", "1234567") Dim tota As String = Fusion("bonjour", "123456789") Dim toti As String = Fusion("bonjour", "12345")
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
acive
Messages postés
125
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
7
12 sept. 2016 à 12:53
12 sept. 2016 à 12:53
Oui... il existe pas mal de façons de le faire...
Public Function Fusionne(ByVal a As String, ByVal b As String) Dim res As String = "" Dim mot1 As List(Of Char) = a.ToList Dim mot2 As List(Of Char) = b.ToList Dim i As Integer If mot2.Count > mot1.Count Then For i = 0 To mot1.Count - 1 res &= mot1(i) & mot2(i) Next res &= b.Substring(i, b.Length - i) Else For i = 0 To mot2.Count - 1 res &= mot1(i) & mot2(i) Next res &= a.Substring(i, a.Length - i) End If Return res End Function
acive
Messages postés
125
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
14 décembre 2016
7
>
libellule123
12 sept. 2016 à 17:10
12 sept. 2016 à 17:10
De rien...
N'oublie pas le fameux sujet résolu...
N'oublie pas le fameux sujet résolu...
Utilisateur anonyme
11 sept. 2016 à 22:08
11 sept. 2016 à 22:08
Bonsoir libellule123,
Je te propose cette solution : Fichier Excel 2007
que j'ai faite avant ton message #2.
Sur la feuille de calcul, tu verras 3 exemples ; et la fonction
est dans le Module1. Je te laisse adapter ton propre code
VBA selon ma fonction Alterner().
Regarde attentivement le problème du reliquat, quand une
chaîne de caractères est plus courte que l'autre.
Dis-moi ce que tu en penses, et si ça te convient. Si oui,
merci d'aller en haut de page pour cliquer sur le lien
« Marquer comme résolu ».
Cordialement. 😊
Je te propose cette solution : Fichier Excel 2007
que j'ai faite avant ton message #2.
Sur la feuille de calcul, tu verras 3 exemples ; et la fonction
est dans le Module1. Je te laisse adapter ton propre code
VBA selon ma fonction Alterner().
Regarde attentivement le problème du reliquat, quand une
chaîne de caractères est plus courte que l'autre.
Dis-moi ce que tu en penses, et si ça te convient. Si oui,
merci d'aller en haut de page pour cliquer sur le lien
« Marquer comme résolu ».
Cordialement. 😊
Bonsoir Whismeril,
J'avais bien précisé dans mon article que j'ai fait ma solution avant que
libellule123 poste son message #2. Donc, comme rien n'était précisé
pour la version du VB, j'ai pensé que c'était peut-être du VBA Excel.
Je connais seulement le VBA Excel, pas les autres ; tu as probablement raison,
et dans ce cas tu as bien fait de noter mon article -1, sauf qu'en VBA Excel,
ça marche parfaitement bien, et ça pourrait servir à d'autres.
Cordialement. 😊
Bonjour,
Sur CodeS SourceS cette séparation existe, et 90% des questions posées ne le sont pas dans le bon forum. Une majorité parce que les gens ne savent même pas avec quel language ils travaillent et les autres par feignantise/bêtise (il arrive régulièrement qu'un membre à qui la modération a déplacé plusieurs messages s'obstine à poster dans le mauvais forum).
Une remise à plat des catégories est demandée au moins depuis que CCM a racheté CS, avant je ne sais pas.
Le débat a récemment été relancé sur CS http://codes-sources.commentcamarche.net/forum/affich-10068031-choisir-les-priorites-pour-codes-sources , mais ça ne déchaîne pas les foules.
Seuls les employés de CCM (et ils sont peu) peuvent modifier les catégories, je te conseille donc, si tu y tiens, d'en parler à Noctambule ou Crashounette.
Sur CodeS SourceS cette séparation existe, et 90% des questions posées ne le sont pas dans le bon forum. Une majorité parce que les gens ne savent même pas avec quel language ils travaillent et les autres par feignantise/bêtise (il arrive régulièrement qu'un membre à qui la modération a déplacé plusieurs messages s'obstine à poster dans le mauvais forum).
Une remise à plat des catégories est demandée au moins depuis que CCM a racheté CS, avant je ne sais pas.
Le débat a récemment été relancé sur CS http://codes-sources.commentcamarche.net/forum/affich-10068031-choisir-les-priorites-pour-codes-sources , mais ça ne déchaîne pas les foules.
Seuls les employés de CCM (et ils sont peu) peuvent modifier les catégories, je te conseille donc, si tu y tiens, d'en parler à Noctambule ou Crashounette.
Bonjour Whismeril,
Merci pour ta réponse très claire. Compte tenu de ce que tu as écris, je renonce
à demander la création d'un forum "Programmation:VBA Excel" spécifique.
Quand je vois une chose spéciale dans un code VBA, je me dis parfois que
c'est peut-être une nouveauté des versions ultérieures de VBA Excel, et pas
forcément d'une autre version VB (VB6, VB.Net, ou autre...).
Si je refais la même erreur à l'avenir, je compte sur ta diligence (ou celle
d'un autre intervenant) pour me noter à nouveau -1 comme il se doit.
Bien sûr, l'idéal serait tout simplement que le demandeur précise toujours
la version de VBA qu'il utilise (et cela de façon systématique) !
Pour ce sujet, merci à libellule123 d'avoir indiqué dans son message #16
qu'elle utilise Visual Basic 2010.
Cordialement. 😊
Merci pour ta réponse très claire. Compte tenu de ce que tu as écris, je renonce
à demander la création d'un forum "Programmation:VBA Excel" spécifique.
Quand je vois une chose spéciale dans un code VBA, je me dis parfois que
c'est peut-être une nouveauté des versions ultérieures de VBA Excel, et pas
forcément d'une autre version VB (VB6, VB.Net, ou autre...).
Si je refais la même erreur à l'avenir, je compte sur ta diligence (ou celle
d'un autre intervenant) pour me noter à nouveau -1 comme il se doit.
Bien sûr, l'idéal serait tout simplement que le demandeur précise toujours
la version de VBA qu'il utilise (et cela de façon systématique) !
Pour ce sujet, merci à libellule123 d'avoir indiqué dans son message #16
qu'elle utilise Visual Basic 2010.
Cordialement. 😊