Decouper une chaine de caractère tous les 8 caracteres

Résolu
remy4wer Messages postés 28 Statut Membre -  
 Utilisateur anonyme -
bonjour je suis actuellement sur un logiciel de cryptage, seulement je voudrais que lorseque l'utilisateur tape un long texte dans une text box, puis clique sur un bouton. je voudrai que le texte se separe tous les "8" caracteres ... pouvais vous m'aider?
merci d'avance :)

13 réponses

Résumé de la discussion

La problématique centrale est de découper un long texte saisi dans une text box en segments de huit caractères chacun dès l'appui sur un bouton, afin d'obtenir des blocs séparés. Plusieurs réponses proposent d'utiliser une boucle avec index pour parcourir la chaîne et assembler ou stocker des blocs de 8 caractères, en VB.Net, VBA ou pseudo-code, avec des exemples et ajustements. Des échanges soulignent des soucis de syntaxe et évoquent des solutions comme Mid, Substring ou Split, en gérant correctement les indices et en testant diverses variantes de code.

Bobot (l'IA à votre service)
  1. unknown_programmer Messages postés 1880 Statut Membre 266
     
    Bonsoir,

    c'est souvent prise de tête ce genre de chose, ce que je ferais, je créerais une boucle gérer par une variable qui parcourt la chaîne de caractère. Je prendrais la première lettre de la chaîne de caractère (emplacement[0]) et je la stockerais dans une autre variable, je l'incrémente et je recommence jusqu'à arrivé a la huitième (emplacement[7]), je ne sais pas si j'ai été très claire.
    1
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    En VB.Net ça ne doit pas être très compliqué de boucler sur tous les caractères d'un String...

    Voici comment je ferais en VBA (on ne doit pas être très loin niveau syntaxe...)

    Dim monTab()
    Dim monString$
    Dim i&, k&
    
    monString = "La phrase que j'aimerais découper en partie de 8 caractères"
    ReDim monTab(Round(Len(monString) / 8))
    
    For i = 1 To Len(monString) Step 8
        monTab(k) = Mid(monString, i, 8)
        k = k + 1
    Next i
    For i = 0 To UBound(monTab)
        Debug.Print monTab(i)
    Next i

    1
  3. remy4wer Messages postés 28 Statut Membre
     
    je te remerci enormement de tous m'avoir expliquais en detail, d'avoir pris de ton temps.maleureusement je debutant sur vb.net et je n'ai pas reussi a y arriver dessus (les boucle c'est pas trop mon truc...)j'espere que quelqu'un pourra m'aider en language vb.net.
    0
  4. remy4wer Messages postés 28 Statut Membre
     
    Mais quand meme un grand merci de t'etre donner du mal a m'expliquer :)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. remy4wer Messages postés 28 Statut Membre
     
    je te remerccie du fond du coeur et m'excuse d'avoir créer plusieur sujet ,je n'avais pas compris pourquoi je n'arrivais pas a acceder au post , je te remerci de ta patience avec moi
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      pas de souci.
      Ton problème est-il résolu?
      0
  7. remy4wer Messages postés 28 Statut Membre
     
    en revenche pourrait tu me dire ce que veux dire round , len , mid , ubound
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      pas de souci.
      Round = arrondi
      Len = nombre de caractères de la chaine
      Mid : extrait une portion de chaine
      ubound : indice le plus élevé d'une variable tableau

      Un conseil pour la suite, consulte le site de microsoft pour ce type de renseignements.
      Exemple : taper dans google : msdn+Len donne ,en premier lien de la recherche : https://docs.microsoft.com/fr-fr/previous-versions/visualstudio/visual-studio-2008/dxsw58z6(v=vs.90)?redirectedfrom=MSDN

      msdn = site de microsoft...

      Ton problème est-il résolu?
      0
    2. remy4wer Messages postés 28 Statut Membre
       
      e bien non apres ma traduction sur vb.net ; la chaine de caractere se divise en 8 mais dans un autre sens ( eeeeeeee devient e )
      0
    3. remy4wer Messages postés 28 Statut Membre
       
      je ne comprend pas d'ou vient le probleme :(
      0
    4. remy4wer Messages postés 28 Statut Membre
       
      merci pour les traduction
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      donne nous le code que tu as écris...
      0
  8. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    En cas d'erreur dans le code, voir ce lien : https://docs.microsoft.com/fr-fr/dotnet/api/system.string.substring?redirectedfrom=MSDN&view=netframework-4.8
    Dim monString$, i&, FinBoucle&

    monString = TextBox1.Text
    FinBoucle = Len(monString) + Len(monString) Mod 9
    For i = 8 To FinBoucle Step 9
    monString = monString.Substring(0, i) & "_" & monString.Substring(Len(monString) - i), i),
    Next i
    TextBox1.Text = monString


    0
    1. Utilisateur anonyme
       
      Une petite correction qui (chez moi...) fonctionne

              Dim monString$, i&, FinBoucle&
      
              monString = "Laphrasequejaimeraisdécouperenpartiede8caractères"
      
              FinBoucle = Len(monString) + Len(monString) Mod 9
              For i = 8 To FinBoucle Step 9
                  monString = monString.Substring(0, i) & "_" & monString.Substring(i) 'c'est ici, il faut prendre la fin de la chaine sans plus de calcul
              Next i
              TextBox1.Text = monString
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Whismeril,

      Pour tout dire, j'aime bien la version d'ucfoutu avec Split et Chr(0).
      Peut on imaginer la même chose en VB.Net?

      Encore un sujet à défi...
      0
    3. Utilisateur anonyme
       
      Je vais regarder en détail la version d'Uc, mais dans l'autre post j'en ai de j'ai proposé un avec split
      0
  9. remy4wer Messages postés 28 Statut Membre
     
    c'est le bon code mais il doit y avoir une erreur de syntaxe car le logiciel me souligne ca : , i),
    et me dis fin d'instruction attendu
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Dim monString$, i&, FinBoucle&

      monString = TextBox1.Text
      FinBoucle = Len(monString) + Len(monString) Mod 9
      For i = 8 To FinBoucle Step 9
      monString = monString.Substring(0, i) & "_" & monString.Substring(Len(monString) - i, i)
      Next i
      TextBox1.Text = monString
      0
    2. remy4wer Messages postés 28 Statut Membre
       
      MERCI il y a encore un petit probleme de code mais ce n'est pas grave je vais me debrouiller
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      de rien.
      Il y a certainement un petit problème, mais comme je n'ai pas VB.Net (comme quoi débuter n'est pas une excuse, je n'en avais jamais fait avant aujourd'hui, mais, comme je supprimais tous tes sujets, je me suis senti "obligé" de te filer un coup de main...) je ne peux pas tester...
      Bonne continuation.
      A+
      0
    4. remy4wer Messages postés 28 Statut Membre
       
      merci pour ta patience , merci pour tous
      :)
      0
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    pijaku, j'ai VB2010 et ton dernier code ne fonctionne pas. Par contre ton 1er code en vba que j'ai mis en VB.NET fonctionne.
    Voici le code:

     Dim monTab() As String
            Dim monString As String
            Dim i, k As Integer
    
            monString = "Laphrasequejaimeraisdécouperenpartiede8caractères" 'j'ai supprimé les espaces pour la comprehension
            ReDim monTab(CInt(Math.Round(Len(monString) / 8)))
    
            For i = 1 To Len(monString) Step 8
                monTab(k) = Mid(monString, i, 8)
                k = k + 1
            Next i
            For i = 0 To UBound(monTab)
                TextBox1.AppendText(monTab(i) & " ")
            Next i


    Bonne programmation
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut le pivert,

      Merci de ton intervention.
      J'ai tenté...

      Je suis tout de même étonné que SubString ne fonctionne pas.
      Peux tu nous en dire davantage, au cas ou quelqu'un lirait ce sujet un jour...

      Merci encore
      A+
      0
  11. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Tu as les 8 premiers caractères un tiret les 8 derniers caractères , 5 fois de suite

    Voici le code :

     Dim monString As String
            Dim i, FinBoucle As Integer
    
            monString = "Laphrasequejaimeraisdécouperenpartiede8caractères"
            FinBoucle = Len(monString) + Len(monString) Mod 9
            For i = 8 To Len(monString) Step 9
                monString = monString.Substring(0, i) & "_" & monString.Substring(Len(monString) - i, i)
            Next i
            TextBox1.Text = monString

    0
  12. ucfoutu Messages postés 18223 Statut Modérateur
     
    Bonjour,
    Juste pour m'aider à refaire peu à peu surface.
    Un peu de rigolade avec VBA :
    toto = "Voiciunephrasequin'estpasd'unelonhueurmultipledeladécoupe.Lecodeseraitbienplussimplesimultiplededeladécoupe."
    decoupe = 8
    ou = Len(toto) - Len(toto) Mod decoupe
    toto1 = Left(toto, ou)
    flt = " " & String(decoupe, "@")
    Do While Len(flt) < Len(toto1) + Len(toto) Mod decoupe
    flt = flt & flt
    Loop
    MsgBox Trim(Format(toto1, flt) & " " & Mid(toto, ou + 1))
    --
    ________________________
    Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
    Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Ça fait plaisir de vous revoir.

      Merci du coup de main, je commençais à galérer...

      Bonne journée à vous
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Bonjour ucfoutu, content de te relire.

      Tu as toujours des trouvailles de ton cru à nous soumettre!

      Bonne journée
      0
  13. ucfoutu Messages postés 18223 Statut Modérateur
     
    Bonjour, Le Pivert,
    - Avant tout : ma solution était en VBA et non en .Net.
    - il y a toujours mille et une manières d'aborder une difficulté. Il est vrai que j'aime les manières rigolotes
    - Tiens : en voilà une autre, toujours avec VBA (et donc à transposer pour VB.Net) :
    Elle est très simple :
     toto = "benvoilalaphrasequel'onvoudraitmettreenmorceauxde#decoupecaractères"
    decoupe = 8 ' pour dire tous les combien découper
    titi = Split(StrConv(toto, vbUnicode), Chr(0))
    For i = decoupe - 1 To Len(toto) Step decoupe
    titi(i) = titi(i) & " "
    Next
    MsgBox Join(titi, "")
    0
    1. Utilisateur anonyme
       
      Alors la traduction "littérale" en VB.Net, mais ça s'optimise sûrement.
              Dim toto As String = "benvoilalaphrasequel'onvoudraitmettreenmorceauxde#decoupecaractères"
              Dim decoupe As Int16 = 8 ' pour dire tous les combien découpe
              Dim titi As String() = toto.ToCharArray().Select(Function(c) c.ToString()).ToArray() 'comme le split crée un tableau de caractères, mais on doit le convertir en string VB.net qui est plus typé que VBA n'accepte pas titi(i) = titi(i) & " " dans le cas contraire
              For i = decoupe - 1 To Len(toto) Step decoupe
                  titi(i) = titi(i) & " "
              Next
              MsgBox(String.Join(" ", titi))
      
      0
    2. Utilisateur anonyme
       
      Bonjour là avec une liste plutôt qu'un tableau.
      J'évite la méthode ToCharArray et donc une boucle en faisant le Select directement sur les caractères du string (en .Net un string est déjà une sorte de tableau de string).
      Mais dans l'absolue pour un texte aussi petit ça ne change pas grand chose.
              Dim decoupe As Int16 = 8 ' pour dire tous les combien découpe
              Dim titi As List(Of String) = "benvoilalaphrasequel'onvoudraitmettreenmorceauxde#decoupecaractères".Select(Function(c As Char) c.ToString()).ToList()
              For i = decoupe - 1 To titi.Count() Step decoupe
                  titi(i) = titi(i) & " "
              Next
              MsgBox(String.Join(" ", titi))
      
      0
  14. unknown_programmer Messages postés 1880 Statut Membre 266
     
    Re,

    ton post m'a donné envie de coder ^^

    j'ai coder ce petit truc en python, je ne maîtrise que ce langage mais ça pourrais sûrement t'aider.

    code:

    source = 'exemple de contenu textuel inserer par un utilisateur lambda'

    emplacement = 0
    resultat = ''
    boucle = 0

    while emplacement < len(source):

    lettre = source[emplacement]
    resultat = resultat + lettre

    emplacement = emplacement + 1
    boucle = boucle + 1

    if boucle == 8:
    print(resultat)
    resultat = ''

    boucle = 0

    if emplacement == 60 and boucle < 8:
    print(resultat)
    --------------------------------------------------------------------------
    Quand je l'exécute ça me retourne ça:

    exemple
    de conte
    nu textu
    el inser
    er par u
    n utilis
    ateur la
    mbda
    -1