IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Conversion de richttextbox vers un tableau de lignes


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut Conversion de richttextbox vers un tableau de lignes
    Re-bonjour a tous

    Je me posait la question si il est possible de prendre le contenu d'un richttextbox et de placer les lignes dans un tableau de type string, MAIS dont la longueur des lignes dans le tableau ne peut excéder 47 caractères

    Le but étant de récupérer le contenu du RTB et le transférer dans un autre programme.

    En clair ( j'espère )
    Mon RTB contient 5 lignes de +-130 caractères chacune, et je dois convertir cela en 14 lignes de 47 caractères
    La Connaissance est comme la joie elle s'accroît en la partageant!

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Hum je ne vois pas où tu bloques...

    Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      Dim res As New List(Of String)
      Dim continuer As Boolean = True
      Dim Index As Integer = 0
      Dim Longueur As Integer = 47
     
      While continuer
          Try
              res.Add(RichTextBox1.Text.Substring(Index, Longueur))
              Index += Longueur
          Catch ex As ArgumentOutOfRangeException
              continuer = False
          End Try
      End While

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je voulais utiliser la collection LInes du RTB, mais quand la "ligne" s'est révélée être une phrase de 3 ou 4 lignes à l'écran. Après quelques autre essais non-concluants, J'ai fini par extraire les 47 premiers caractères du texte du RTB, et de boucler sur la partie restante du texte, jusqu'à épuisement du texte.

    Sauf que :

    La présence d'espaces donne parfois des résultats bizarres. Je te laisse le plaisir de les éliminer au besoin.
    Je n'ai rien fait pour corriger les mots séparés par la coupure qui leur arrive en plein milieu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub Réaménager_Click(sender As Object, e As EventArgs) Handles Réaménager.Click
            Dim NombreCaractères As Integer = 47
            Dim res As New List(Of String)
            Dim extrait As String = String.Empty
            Dim Reste As String = String.Empty
            Dim Aucomplet As String = RichTextBox1.Text
            Dim IlReste As String = 0
            Dim LeTotal As Integer = Aucomplet.Length
            Do
                extrait = Aucomplet.Substring(0, NombreCaractères)
                res.Add(extrait)
                Reste = Aucomplet.Substring(extrait.Length, Aucomplet.Length -
                extrait.Length)
                IlReste = Reste.Length
                Aucomplet = Reste
            Loop While IlReste > NombreCaractères
            If Aucomplet.Length > 0 Then
                res.Add(Aucomplet)
            End If
            'Vérification du résultat
            RichTextBox1.Clear()
            Dim BoutDeTexte As String = String.Empty
            For Each item As String In res
                BoutDeTexte = String.Concat(item, ControlChars.NewLine)
                RichTextBox1.AppendText(BoutDeTexte)
            Next
        End Sub
    P.S. Quand j'y pense, cela ressemble un peu pas mal beaucoup à avoir réinventé la roue de ZenZitone. J'aurais dû être plus attentif quand j'ai modifié mes plans.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Bonjour a vous deux

    la solution de ZenZiTone me parait être la plus efficace , je vais regarder pour la mettre en œuvre et faire les modif pour essayer de ne pas coupé les mots et voir avec la détections des espaces

    Merci bien de votre aide
    La Connaissance est comme la joie elle s'accroît en la partageant!

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,
    Moi j'aurais imaginé quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
            Dim Lignes As New List(Of String)
            Dim Nombre As Integer = 47
            For Each Str As String In RichTextBox1.Lines
                If Str.Length <= Nombre Then
                    Lignes.Add(Str)
                Else
                    While Str.Length > 0
                        If Str.Length <= Nombre Then
                            Lignes.Add(Str)
                            Exit While
                        Else
                            Lignes.Add(Str.ToCharArray(0, Nombre))
                            Str = Str.Replace(Str.ToCharArray(0, Nombre), "")
                        End If
                    End While
                End If
            Next
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    J'ai essayé sans tronquer les mots.En verifiant le 47 eme caractère si c'est une ponctuation donc le mot qui précède n'est pas tronqué
    autrement je reviens en arrière pour trouver le début du mot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Function RTBTolist(ByVal maxcharperlin As Integer) As List(Of String)
            Dim listline As New List(Of String)
            Dim ponctuation As New List(Of Char) From {"?"c, ","c, ":"c, "."c, "!"c, ";"c, " "c}
            Dim count As Integer
            Dim characters As Integer
            characters = maxcharperlin
            While count < rtb1.TextLength
                characters = maxcharperlin
                If maxcharperlin + count >= rtb1.TextLength Then
                    listline.Add(rtb1.Text.Substring(count))
                    count += characters
                Else
                    'verifie le 47 eme charactère si c'est une ponctuation  pour verifier si  le mot n'est pas tronqué
     
                    If ponctuation.Contains(Convert.ToChar(rtb1.Text.Substring(maxcharperlin + count, 1))) Then
                        listline.Add(rtb1.Text.Substring(count, maxcharperlin))
                        count += maxcharperlin
                    Else
                        'on est au milieu d'un mot on cherche le début du mot
                        While Not ponctuation.Contains(Convert.ToChar(rtb1.Text.Substring(characters + count, 1)))
                            characters -= 1
                        End While
                        listline.Add(rtb1.Text.Substring(count, characters))
                        count += characters
                    End If
                End If
            End While
            Return listline
        End Function
    bon code

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Ok, voici une autre approche alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
            Dim Nombre As Integer = 20
            Dim Liste As New ListBox
            Dim St As String = ""
            Dim Mots() As String
            Dim Rtb1 As New RichTextBox
            Rtb1.Text = "Bonjour comment vas tu?" & Environment.NewLine & _
                        "Moi ça va et la famille comment va?" & Environment.NewLine & _
                        "Bref tout ça c'est un test à la noix..."
            For Each Str As String In Rtb1.Lines
                Mots = Str.Split(" "c)
                For i As Integer = 0 To Mots.GetUpperBound(0)
                    St &= Mots(i) & " "
                Next
            Next
            Mots = St.Split(" "c)
            St = ""
            For i As Integer = 0 To Mots.GetUpperBound(0)
                If St.Length + Mots(i).Length + 1 < Nombre Then
                    St &= Mots(i) & " "
                Else
                    Liste.Items.Add(St)
                    St = Mots(i) & " "
                End If
                If i = Mots.GetUpperBound(0) Then
                    Liste.Items.Add(St)
                End If
            Next
            Me.Controls.Add(Liste)
            Liste.Size = New Size(Liste.Size.Width * 2, Liste.Size.Height * 2)
            Me.Controls.Add(Rtb1)
            Rtb1.Location = New Point(Liste.Location.X + Liste.Size.Width, 0)
            Rtb1.Size = New Size(Rtb1.Size.Width * 3, 100)
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

Discussions similaires

  1. [XL-2007] Copier des lignes d'une plage vers un tableau
    Par Excel_man dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/03/2013, 04h40
  2. Conversion de tableau EXCEL vers table HTML en ligne
    Par superccman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/01/2010, 11h55
  3. conversion type Image vers tableau
    Par elektronik-17 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/08/2008, 01h47
  4. Algorithme de conversion de RTF vers HTML
    Par youtch dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/09/2002, 13h35
  5. Réponses: 2
    Dernier message: 30/05/2002, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo