Decouper un chaine string tous les 5 charactere ??? [Résolu]

NeoRonin - 31 oct. 2012 à 16:24 - Dernière réponse :  NeoRonin
- 3 nov. 2012 à 03:19
Salut,

Voila j 'ai une chaine de caractere qui contient uniquement du binaire.
Et je voudrais pouvoir decouper cette chaine tous les 5 carcteres afin de les attribues soit dans un tableau soit dans plusieur variable.

Ex:

Dim stg As string = "0011000001"

' je voudrais decouper cette chaine tous les 5 charactere de facon à avoir:

Stg1 = 00110
stg2 = 00001


J ai vu qu il y avait la fonction split, mais il faut un separateur pour decouper la ou l 'on a besoin.
Or ma chaine ne contiendra que des 0 et 1

C'est pour effectuer une convertion de binaire en charactere.

J'ai cree un dico avec les cles et valeurs qui font reference pour convertir apres.

Merci
Afficher la suite 

Votre réponse

17 réponses

Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 2 nov. 2012 à 23:57
+3
Utile
Si je reprend les codes existants avec quelques modifications

Note en VB.NET :
"" devient la constante String.Empty
Len(texte) devient texte.Length
Concaténation A = A & B devient A &= B
Mid(texte, start, length) devient texte.Substring(start, length)
La fonction Mid commence à l'indice 1, Substring commence à l'indice 0


Dim i As Integer 'Declaration variable de travail
TextBox2.Text = String.Empty ' La le textbox initialise sans caractere.
For i = 0 To TextBox1.Text.Length - 1 Step 5 ' Calcul le nombre de groupe de 5 caractere
  Dim p As String = TextBox1.Text.Substring(i, 5) ' Extraction du bloc de 5 caracteres
  TextBox2.Text &= Dico(p) 'Ajoute dans textbox2 la conversion du bloc de 5 via le Dico
Next i


Attention pour la déclaration de ton dico, les clés sont de type String (les blocs de 5) et les valeurs sont de type Integer (correspondance pour la conversion). Il faut donc que tu inverse ces deux types
Dim Dico As New Dictionary(Of String, Integer)



Reste à gérer les erreurs.

_____________
Kenji
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Charles Racaud
jordane45 21137 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 24 mai 2018 Dernière intervention - 31 oct. 2012 à 16:56
0
Utile
Bonjour,

je voudrais decouper cette chaine tous les 5 charactères


Je pense qu'une solution serait de faire une boucle sur ta chaine ( For i=1 to StringLen / Next)
De lire chaque charactère l'un après l'autre puis de les mettre dans un tableau par exemple.
Regarde du cote des fonctions LEN , MID ....

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 31 oct. 2012 à 23:19
0
Utile
Bonjour,

Réponse à main levée (de tête) :

dim taChaine as string = "????"
dim nb as double = (len(taChaine) / 5) + 1
nb = int(nb)
dim t(nb) as string
dim i as integer
dim j as integer = 1
for i = 1 to len(taChaine) step 5
 t(j) = mid(taChaine, i, 5)
j = j + 1
next i


Cordialement,Joe.
Commenter la réponse de ehjoe
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 1 nov. 2012 à 17:07
Commenter la réponse de Charles Racaud
0
Utile
Merci pour vos reponses.

Par contre je suis debutant.

Si vous pouviez mettre des commentaires dans vos codes cela m aiderai.

Merci
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 1 nov. 2012 à 20:30
0
Utile
Bonsoir,

dim taChaine as string = "????" ' variable qui reçoit ta chaîne de caractères, égalité à remplacer par la source qui constitue ta chaîne
dim nb as double = (len(taChaine) / 5) + 1 ' compte combien de fois y a 5 espaces (+ 1 pour les morceaux éventuels)
nb = int(nb) ' nombre d'éléments entiers
dim t(nb) as string ' déclaration de la variable tableau indexée (nb) par le nombre d'éléments
dim i as integer ' variable de travail
dim j as integer = 1 ' idem
for i = 1 to len(taChaine) step 5 ' avec ka variable i va de 1 à la longueur de ta chaîne contebue dans ka variable taChaine en avançant de 5 en 5 jusqu'à la fin.
 t(j) = mid(taChaine, i, 5) ' la variable tablkeau t indexée par j récupère grâce à la fonction MID une partie de ta variable taChaine à la position i en porenant 5 caractères.
j = j + 1 ' fait avancer de un l'indice de ta variable tableau pour passer au suivant
next i ' fin de la boucle i


Cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
Merci Joe.

Bon j ai du mal à l integrer à mon code.
Donc je poste le tout.
C'est un convertisseur.

Dim Dico As New Dictionary(Of Integer, String)
        Dico.Add("00001", 0)
        Dico.Add("00011", 1)
        Dico.Add("00111", 2)
        Dico.Add("01111", 3)
        Dico.Add("11111", 4)
        Dico.Add("11110", 5)
        Dico.Add("11100", 6)
        Dico.Add("11000", 7)
        Dico.Add("10000", 8)
        Dico.Add("00000", 9)

        Dim binaire As String
        binaire = TextBox1.Text

        

        Dim taChaine As String = binaire ' variable qui reçoit ta chaîne de caractères
        Dim nb As Double = (Len(taChaine) / 5) + 1 ' compte combien de fois y a 5 espaces (+ 1 pour les morceaux éventuels)
        nb = Int(nb) ' nombre d'éléments entiers
        Dim t(nb) As String ' déclaration de la variable tableau indexée (nb) par le nombre d'éléments
        Dim i As Integer ' variable de travail
        Dim j As Integer = 1 ' idem
        For i = 1 To Len(taChaine) Step 5 ' avec la variable i va de 1 à la longueur de ta chaîne contebue dans la variable taChaine en avançant de 5 en 5 jusqu'à la fin.
            t(j) = Mid(taChaine, i, 5) ' la variable tableau t indexée par j récupère grâce à la fonction MID une partie de ta variable taChaine à la position i en porenant 5 caractères.
            j = j + 1 ' fait avancer de un l'indice de ta variable tableau pour passer au suivant
        Next i ' fin de la boucle i



        TextBox2.Text = Dico(binaire) ' Alors j avais mis sa mais sa fonctionne seulement avec un groupe de 5 caractere



En fait il faudrait que je recupere ensuite les bloc de 5 caractere stoker et le convertir pour les afficher dans la textebox.

MErci.


PS: J ai plus de facilite avec des exemple concret :)
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 2 nov. 2012 à 08:34
0
Utile
Bonjour,

Remplace cette partie :


Dim binaire As String
binaire = TextBox1.Text

Dim taChaine As String = binaire ' variable qui reçoit ta chaîne de caractères
Dim nb As Double = (Len(taChaine) / 5) + 1 ' compte combien de fois y a 5 espaces (+ 1 pour les morceaux éventuels)
nb = Int(nb) ' nombre d'éléments entiers
Dim t(nb) As String ' déclaration de la variable tableau indexée (nb) par le nombre d'éléments
Dim i As Integer ' variable de travail
Dim j As Integer = 1 ' idem
For i = 1 To Len(taChaine) Step 5 ' avec la variable i va de 1 à la longueur de ta chaîne contebue dans la variable taChaine en avançant de 5 en 5 jusqu'à la fin.
t(j) = Mid(taChaine, i, 5) ' la variable tableau t indexée par j récupère grâce à la fonction MID une partie de ta variable taChaine à la position i en porenant 5 caractères.
j = j + 1 ' fait avancer de un l'indice de ta variable tableau pour passer au suivant
Next i ' fin de la boucle i

TextBox2.Text = Dico(binaire) ' Alors j avais mis sa mais sa fonctionne seulement avec un groupe de 5 caractere



Par cette partie :

Dim i As Integer
textbox2.text = ""
For i = 1 To Len(TextBox1.Text) Step 5
  TextBox2.Text = TextBox2.Text & Mid(TextBox1.Text, i, 5) & vbCrLf
Next i


Cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
Alors j'ai ajouter le code en faisant une modif pour que cela passe par le dico

Dim i As Integer
        TextBox2.Text = ""
        For i = 1 To Len(TextBox1.Text) Step 5
            TextBox2.Text = Dico(TextBox2.Text & Mid(TextBox1.Text, i, 5) & vbCrLf)
        Next i


Par contre il affiche que le dernier dans le textbox.

Par exe :
textbox1 = 0000100011

et la textbox2 me donne comme resultat 1 au lieu de 01

merci
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 2 nov. 2012 à 15:11
0
Utile
Bonjour,

Et ça :

[i]textbox2.text = ""
For i = 1 To Len(TextBox1.Text) Step 5
TextBox2.Text = TextBox2.Text/i

T'en fais quoi !
Il faut cumuler ce qui va dans textbox2...

Cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
Salut Joe,

C'est pas pour faire le lourd mais je vois pas trop.
Comme explqiué plus haut je suis novice dans le VB. Donc il y a des chose qui ne me saute pas au oeil directement

En fait pour moi le textbox2 doit afficher le resultat de la convertion de ce qui est saisi dans le textbox1.

Dim i As Integer 'Declaration variable de travail
TextBox2.Text = "" ' La le textbox initialise sans caractere. Je comprend pas celui ci pourquoi il se trouve la 
For i = 1 To Len(TextBox1.Text) Step 5 ' Calcul le nombre de groupe de 5 caractere
    TextBox2.Text = TextBox2.Text & Mid(TextBox1.Text, i, 5) & vbCrLf 'Affiche textbox2 + retourne i par bloc de 5
Next i


Pour moi "Dico" devrait etre dans le textbox2 pour retourner des valeurs des clées
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 2 nov. 2012 à 19:45
0
Utile
Bonsoir,

Je ne comprends pas tout.

Je ne sais pas exactement ce que vient faire "Dico" là-dedans...

Si j'ai compris, tu écris dans textbox1 une suite binaire, par exemple 1001011111000001010001010 ensuite tu découpe cette séquence par bloc de 5 catactères dans textbox2. Dico il sert à quoi, il a quelle place dans ton organisation ?

Quel est le but final, la fonction, dans la mesure ou PC éteint il ne reste plus rien je présume ?

Cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
Voila,

En fait je cree un convertisseur de binaire en caractere.

Voila mon dico

Dim Dico As New Dictionary(Of Integer, String)
        Dico.Add("00001", 0)
        Dico.Add("00011", 1)
        Dico.Add("00111", 2)
        Dico.Add("01111", 3)
        Dico.Add("11111", 4)
        Dico.Add("11110", 5)
        Dico.Add("11100", 6)
        Dico.Add("11000", 7)
        Dico.Add("10000", 8)
        Dico.Add("00000", 9)



Je souhaites que lorsque je saisi du binaire dans mon textbox1, qu 'il soit decoupe par bloc de 5 caracteres et comparer dans mon dico pour etre convertie.
Afin que le textbox2 affiche le resultat.

Ex:
Textbox1 = 000010001100000
Resultat obtenu dans le textbox apres avoir cliquer sur un bouton
textbox2 = 019

Apres peut etre que ma methode est mauvaise......
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 2 nov. 2012 à 21:49
0
Utile
Attends...

Tu veux en somme convertir un nombre binaire en nombre décimal, est-ce ça ?

Cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
oui :)

Mais selon mon propre code de convertion.


Voila :)
Commenter la réponse de NeoRonin
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 2 nov. 2012 à 22:51
0
Utile
Bon,

Je t'ai montré comment couper 5 par 5, j'abandonne car ce n'est pas de mon niveau, je ne peux te venir en aide.

Au plaisir, cordialement, Joe.
Commenter la réponse de ehjoe
0
Utile
Merci Joe pour ta participation :)
Merci Charles sa marche nikel :)
Commenter la réponse de NeoRonin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.