Decouper une chaine de caractères

Résolu
dailyvb Messages postés 3 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 20 juin 2008 - 15 juin 2008 à 00:14
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 21 juin 2008 à 07:30
Comment decouper une chaine de  caractères en fonction dune suite numérique .
exemple  ma chaine  " gfhdmkg/*rfz"
la suite = 23421

alors je cherche comme resultat   =     gf   hdm    kg/*   rf   z

J'ai essayé  la  fonction  split ca marche pas

;)
                                                           

11 réponses

dailyvb Messages postés 3 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 20 juin 2008
20 juin 2008 à 20:28
bonjour

jai un grand probleme  le code me don des resulta  faus si je remplace le  mot par text 1

Private Sub Command3_Click()
mot = Text1
  decoup = Text2
  For i = 1 To Len(decoup)
     lg = lg + Val(Mid(decoup, i, 1))
     mot = Left(mot, lg + i - 1) & " " & Right(mot, Len(mot) - lg - i + 1)
  Next
 
  Debug.Print mot
Text3 = mot
End Sub

et
Private Sub Command1_Click()
Dim Valeur As Variant
    Dim nomFichier As String
    Dim numFic As Integer
   
    numFic = FreeFile
    nomFichier = "c:/mathmot.txt"
    Open nomFichier For Input Shared As #numFic
    Do While Not EOF(numFic)
        Input #numFic, Valeur
        Text1.Text = Text1.Text & vbCrLf & Valeur
    Loop
    Close #numFic
End Sub

Private Sub Command2_Click()
Dim Valeur As Variant
    Dim nomFichier As String
    Dim numFic As Integer
   
    numFic = FreeFile
    nomFichier = "c:/decoup.txt"
    Open nomFichier For Input Shared As #numFic
    Do While Not EOF(numFic)
        Input #numFic, Valeur
        Text2.Text = Text2.Text & vbCrLf & Valeur
    Loop
    Close #numFic
End Sub
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 juin 2008 à 00:24
Sers-toi de mid sur ta chaine suite pour déterminer chacun de sesq caractères, un  par un
Pour chaque caractère (donc un nombre) , tu te sers encore de left  pour extraire de ta chaine ce nombre de caractères à gauche et tu les supprimes de ta chaine, et ainsi de suite ...
Au boulot (c'est un exercice, je le sens...)
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 juin 2008 à 21:34
Bonsoir,

Sub es()



'"gfhdmkg/*rfz"
'23421



mot = "gfhdmkg/*rfz"
decoup = "23421"



depart = 1
For t = 1 To Len(decoup)
    lg = Val(Mid(decoup, t, 1)) ' extraction du chiffre converti en nb
    extraction = Mid(mot, depart, lg) 'extraction
    depart = depart + lg 'futur position du pointeur
    chaine = chaine & "  " & extraction 'memorisation de la chaine
Next t
Debug.Print chaine



End Sub



Amicalement,
Us.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 juin 2008 à 22:36
ou encore (ce que j'ai dit plus haut) :

 mot = "gfhdmkg/*rfz"
  decoup = "23421"
  nouv = ""
  For i = 1 To Len(decoup)
     lg = Val(Mid(decoup, i, 1))
     nouv = nouv & " " & Left(mot, lg)
     mot = Mid(mot, lg + 1)
  Next
  MsgBox Trim(nouv)
0

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

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 juin 2008 à 23:09
Hum...


ou encore qu'en 2 lignes dans la boucle :



 mot = "gfhdmkg/*rfz"
  decoup = "23421"
  For i = 1 To Len(decoup)
     lg = lg + Val(Mid(decoup, i, 1))
     mot = Left(mot, lg + i - 1) & " " & Right(mot, Len(mot) - lg - i + 1)
  Next
 
  Debug.Print mot



na !

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 juin 2008 à 23:11
... et une variable de moins... oupsss...


Us.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 juin 2008 à 23:43
For i = 1 To Len(decoup)
     lg = lg + Val(Mid(decoup, i, 1)) + 1
     mot = Replace(mot, Left(mot, lg - 1), Left(mot, lg - 1) & " ")
 Next
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 juin 2008 à 00:06
Et hop ...

On fait maintenant disparaître la variable lg :

  decoup = Array(2, 3, 4, 2, 1)
  For i = 0 To UBound(decoup) - 1
     mot = Replace(mot, Left(mot, decoup(i)), Left(mot, decoup(i)) & " ")
     decoup(i + 1) = decoup(i) + decoup(i + 1) + 1
  Next
0
dailyvb Messages postés 3 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 20 juin 2008
16 juin 2008 à 11:23
bien fi
merci a tou
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2008 à 10:20
Hum...  
Bonjour Jmfamrques et dailyvb,

OK, une seule variable... beau boulot... 20/20 !

A+
Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
21 juin 2008 à 07:30
Bonjour,


Euh... avant de dire que les codes sont faux (ce n'est pas vrai), il faudrait que tu respectes leurs constructions...


IL faut définir correctement les variables mot et decoup...


Dans l'exemple, il y avait :



 mot = "gfhdmkg/*rfz"
  decoup = "23421"


Est-tu certain que Text1 et Text2 sont bien correctes ?

De plus, il faut indiquer le typage des variables :
Dim mot as string
Dim decoup as string
puis
mot=text1.text
decoup=text2.text

et on espère que text2 contient que des nombres, dont la longueur est correct par rapport à text1.... Ici il faudrait compléter par des tests...

Amicalement,
Us.

PS : Mettre réponse acceptée sur un problème, rajoute à la confusion...
0
Rejoignez-nous