Texte justifié [Résolu]

Micoute - 5 févr. 2013 à 12:03 - Dernière réponse :  Micoute
- 7 févr. 2013 à 17:00
Bonjour à tous,
pour ne pas changer, j'ai un problème surement parce que je n'utilise pas les bons types.

Ce que je souhaite faire est indiqué dans le titre, c'est à dire qu'à partir d'une chaîne, je voudrais faire un tableau de mots que j'affiche les uns derrière les autres, mais sans jamais dépasser la limite imposée.

Ensuite, j'aimerais faire une Sub pour afficher les mots à la position x, y

Si vous le désirez, ça me ferait très plaisir de recevoir votre aide et je vous en remercie grandement par avance.

Module Module1
    Dim y1, nb_ligne, h, nb_space, longueur, largeur, largeur_space, espace, curs As Long
    Dim partie, mot, mot1, t1, len1 As String
    Dim attention As Byte
    Structure TextJustif
        Dim Texte As String
        Dim longueur As Long
    End Structure

    Public Function CountString(Chaine As String, ChaineCherchee As String, Optional RespecterCase As Boolean = False) As Long
        Return (Len(Chaine) - Len(Replace(Chaine, ChaineCherchee, "", , , 0))) / Len(ChaineCherchee)
    End Function

Public Function TexteJustifie(ByVal x As Long,ByVal y As Long,ByVal Texte As String,ByVal _
                         largeur_de_justification As Long,ByVal _
                         coefficient_d_acceptation_de_retour_a_la_ligne As long = 5)
        ' Dessine un texte sur la surface de dessin, on appliquant une justification, retourne la hauteur du texte justifié

        ' initialisation

        y1 = y ' nécessaire pour retourner la hauteur de tout le texte écrit

    nb_ligne = CountString(Texte, Chr($0D)) + 1
        ' nombre de ligne séparée par un chr(13)

        Dim lstMot As New List(Of TextJustif)
        Dim taille_espace As Long = Len(" ")

        ' on itère pour chaque ligne
        For a As Integer = 1 To nb_ligne
            'partie = InStr(Texte, a, Chr(13)) ' stockage de la ligne
            partie = String.Compare(partie, Chr(13))
            h = 1 ' hauteur de la ligne courante

            nb_space = CountString(partie, " ") + 1

            ' initialisation de tout les paramètres
            lstMot.Clear()

            largeur = 0
            largeur_space = 0


            ' on itère pour chaque mot
            Dim lstTmp As New TextJustif With {.Texte InStr(partie, " "), .longueur Len(.Texte)}
            For b As Integer = 1 To nb_space
                lstTmp.Texte = InStr(partie, " ") ' stockage du mot en cours
                lstTmp.longueur = Len(lstTmp.Texte) ' calcul de sa longueur graphique

                If lstMot.Count = 0 And lstTmp.longueur > largeur_de_justification Then
                    ' si il n'y a pas de mot en mémoire, et que le mot est trop long, 
                    'alors on le stocke pour le découper plus bas
                    lstMot.Add()
                    lstMot.Texte = lstTmp.Texte
                    lstMot.longueur = lstTmp.longueur



                ElseIf largeur + taille_espace + lstTmp.longueur > largeur_de_justification Then
                    ' Si le mot courant fait que la ligne ne tient plus dans la largeur de justification, 
                    ' alors on ecrit la ligne, et on stocke le mot courant pour la ligne suivante

                    ' définition de la taille des espaces
                    If lstMot.Count > 1 Then
                        espace = (largeur_de_justification - largeur_space) / lstMot.Count - 1)
                    Else
                        espace = taille_espace
                    End If

                    ' içi on regarde le rapport de grandissement des nouveaux espaces par rapport aux normaux : en gros, 
                    ' si les espaces sont trop grand, on les remet à leur taille normal et la ligne n'est pas justifiée
                    ' (mais sinon c'est moche), on peut régler ça avec le paramètre  'coefficient_d_acceptation_de_retour_a_la_ligne'
                    If espace / taille_espace > coefficient_d_acceptation_de_retour_a_la_ligne Then
                        espace = taille_espace
                    End If

                    Dim curs As Integer = 0

                    ' on itère pour chaque mot à écrire
                For Each lstMot()

                        ' on dessine la même chose, mais comme il faut tenir compte des paramètres optionnels de couleur, c'est la galère !
                        ' j'ai essayé d'émuler ça avec les valeurs par défaut de -1 et des IF partout...

                        Ecrire(x + curs, y, lstMot.Texte)

                        ' on avance le curseur
                        curs = curs + lstMot.longueur + espace

                    Next

                    ' initialisation d'une nouvelle ligne
                    largeur = 0
                    largeur_space = 0
                    largeur = lstTmp.longueur
                    largeur_space = largeur

                    lstMot.Clear()

                    lstMot.Add()
                    lstMot.Texte = lstTmp.Texte
                    lstMot.longueur = lstTmp.longueur

                    ' incrémentation de l'ordonnée
                    y = y + h

                Else
                    ' ajout de mots dans la mémoire, tant qu'ils ne dépassent pas de la justification

                    If largeur = 0 Then
                        largeur = lstTmp.longueur
                        largeur_space = largeur
                    Else
                        largeur = largeur + taille_espace + lstTmp.longueur
                        largeur_space = largeur_space + lstTmp.longueur
                    End If

                    lstMot.Add()
                    lstMot.Texte = lstTmp.Texte
                    lstMot.longueur = lstTmp.longueur
                End If

                ' boucle nécessaire pour s'occuper des mots trop long pour entrer sur une ligne
                While largeur <= largeur_de_justification
                    If lstMot.Count() = 1 And lstMot.longueur > largeur_de_justification Then
                        ' on a donc un seul mot, trop grand pour une ligne

                        mot = ""

                        mot1 = lstMot.Texte

                        ' on test pour chaque nouvelle lettre du mot si ca rentre dans la ligne
                        For c = 1 To Len(mot1)
                            mot = mot & Mid(mot1, c, 1)

                            If Len(mot & "-") > largeur_de_justification Then

                                ' correction (en fait c'était tout simple) ><
                                c -= 1
                                attention = False

                                If c = 0 Then
                                    c += 1

                                    attention = True
                                End If

                                ' on regarde si c'est la fin du mot, ou si faut mettre un tiret
                                If c < Len(mot1) Then
                                    t1 = Mid(mot1, 1, c) + "-"

                                    len1 = Len(t1)
                                    Ecrire(x, y, t1)

                                    lstMot.Remove()

                                    lstMot.Add()

                                    lstMot.Texte = Mid(mot1, c + 1, Len(mot1) - c)
                                    lstMot.longueur = Len(lstMot.Texte)

                                    largeur = lstMot.longueur
                                    largeur_space = lstMot.longueur
                                Else
                                    t1 = Mid(mot1, 1, c)

                                    len1 = Len(t1)

                                    Ecrire(x, y, t1)

                                    lstMot.Remove()

                                    largeur = 0
                                End If

                                'Sortir de la boucle (je n'ai pas trouvé l'instruction)
                            End If

                        Next

                        ' incrémentation de l'ordonnée
                        y = y + h
                    End If

                End While

            Next

            ' on répète le code de tout à l'heure pour traiter les dernières lignes
            If lstMot.Count() > 0 Then

                If lstMot.Count() > 1 Then
                espace = (largeur_de_justification - largeur_space) / lstMot.Count() - 1)
                Else
                    espace = taille_espace
                End If

                If espace / taille_espace > coefficient_d_acceptation_de_retour_a_la_ligne Then
                    espace = taille_espace
                End If

                curs = 0

            For Each lstMot()

                    Ecrire(x + curs, y, lstMot.Texte)

                    curs = curs + lstMot.longueur + espace

                Next

                y = y + h
            End If

Next

        Return y - y1
    End Function
End Module


La langue française est gratuite, seules les fautes d'orthographe sont en option.
Afficher la suite 

Votre réponse

28 réponses

Meilleure réponse
Utilisateur anonyme - 7 févr. 2013 à 12:34
3
Merci
Comme le montre mon exemple ci-dessus, cette ligne :
Dim ln As Integer = Me.CreateGraphics.MeasureString(mot, ft, 200).Width

permet de mesurer la longueur d'un mot selon la police utilisée (ft déclarée plus haut)
Donc, lors de l'énumération de tes mots et connaissant la largeur exacte de ta zone d'affichage :
1/ mesurer les mots en ajoutant un espace minimum standard entre eux
2/ si la somme du tout dépasse la largeur de la zone retirer un mot
3/ agrandir chaque espace entre les mots de la ligne d'une distance calculée comme suit :
- longueur du mot retiré divisé par le nombre de mots restants sur la ligne moins un.

Le plus simple est de faire deux boucles, la première analysant le texte, longueur des mots, nombre d'espaces par ligne et ensuite une deuxième boucle pour la mise en forme finale.

Le résultat devrait donner une justification parfaite de ton texte.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour Micoute.

En quoi consiste l'aide que vous demandez ? Une critique de votre code ? Un dépannage parce que le code ne fait pas ce que vous voulez ? Ou parce qu'il se plante ?


Cordialement.

Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
0
Merci
Re bonjour,
je vous remercie de prendre ma demande en considération.

En fait,je sais ce que je veux qu'il fasse, mais je ne sais pas ce qu'il fait étant donné qu'il n'est pas abouti, le compilateur me répond 'Texte' n'est pas un membre de 'System.Collections.Generic.List(Of TexteJustifie.Module1.TextJustif)'.

L’ennui c'est que je ne comprend pas ce que ça veut dire, je sais juste que c'est pas ça qu'il faut que je mette.

Evidemment, je ne peux pas continuer mon programme tant que je ne sais pas ce que je dois faire.

La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
0
Merci
Vous avez défini une List(Of TextJustif), dont les éléments sont donc de type TextJustif. Il est probable que vous avez voulu lire ou écrire dans cette liste une variable nommée 'Texte' et de type String. Dans un tel cas, VB.net voit rouge.


Cordialement.


Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
0
Merci
Bonsoir Zermalo,
bien sûr, j'ai compris, mais que devrais-je mettre à la place ?

Je ne trouve pas d'exemple équivalent, alors je bloque , car je ne connait pas assez la syntaxe, pourtant Visual Studio 210 Express, c'est de la balle, comme disent les jeunes.

La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
0
Merci
Bonsoir Micoute.

En ce qui concerne la syntaxe, je peux seulement vous dire que dans une List(Of TextJustif), vous ne pouvez écrire ou lire qu'un objet de type TextJustif (qui comprend d'ailleurs un champ Texte As String, ce qui est peut-être la cause de votre erreur). Mais en ce qui concerne le sens, il me faudrait comprendre le fil conducteur de votre code. Or, j'ai le regret de vous dire qu'il me paraît très alambiqué.
Ah j'oubliais une autre erreur de syntaxe : vous n'avez pas indiqué le type que doit retourner votre fonction TexteJustifie. La déclaration d'une fonction doit se terminer par As MachinChose.
Par ailleurs, je suis surpris que vous ne fassiez pas mention de la police de caractères avec laquelle vous voulez écrire vos lignes de texte.

Cordialement.



Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
0
Merci
Bonsoir, merci pour ces explications, pour résumer mon programme, je voudrais lui transmettre une chaîne plus longue que ne peut afficher l'écran, la fenêtre ou l'afficheur et transformer cette chaîne en liste de mots que la fonction transmet à une autre sub qui les affiche les uns derrière les autres tant que la limite imposée moins la longueur du mot ne soit atteinte et qui tienne compte des retours chariot.

Il me faut pour cela créer une fonction pour compter les mots, une autre pour extraire les mots de ma chaîne en lui indiquant la position de chaque mot, mais je pense que ces fonctions doivent être natives, dommage que je ne connaisse pas les fonctions de visual studio 2010 et surtout la syntaxe, ce qui fait que je me retrouve avec de multiples erreurs de syntaxes et des erreurs de type ne correspondant.

Il me faut aussi une Sub pour afficher ma liste de mots, qui doit être capable de passer à la ligne suivante quand la limite est atteinte, déjà que je ne sais même pas comment faire un Locate ou un DrawText, alors j'ai encore pas mal de travail, mais quand j'aurai fini, je souhaite que tout le monde en profite.

Pour la police de caractère, je pense que ça n'a pas beaucoup d'importance pour l'instant, vu que je ne sais pas comment on mesure la hauteur des caractères et la longueur des mot en pixels, ce qui serait très utile.

Je vous remercie de tout l'intérêt que vous portez à mon programme.

La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
0
Merci
Je vois.

Vous avez beaucoup de choses à apprendre, et cela n'est pas un problème. Ce qui pose problème, c'est de savoir ce qu'il faut apprendre pour résoudre votre problème. Et cela est vrai pour tout le monde.
Il se fait tard. Je vais, si vous l'acceptez, vous proposer des exercices simples qui vous permettront d'avancer progressivement. Mais il faudra attendre un peu pour que je vous les prépare.

Cordialement.



Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
Utilisateur anonyme - 6 févr. 2013 à 02:55
0
Merci
Bonjour,

Je ne suis pas en mesure de tester du code pour l'instant, et je vais me limiter à quelques remarques sur ton code d'origine et à une "inspiration" à partir de ta dernière réponse.

Public Function TexteJustifie(ByVal x As Long,ByVal y As Long,ByVal Texte As String,ByVal largeur_de_justification As Long,ByVal _
coefficient_d_acceptation_de_retour_a_la_ligne As long = 5)


Je te recommanderais de déclarer ta fonction as string, comme ceci:

Public Function TexteJustifie(ByVal x As Long,ByVal y As Long,ByVal Texte As String,ByVal largeur_de_justification As Long,ByVal _
coefficient_d_acceptation_de_retour_a_la_ligne As long = 5) as string.


Peut-être que d'autres me corrigeront, mais je ne pense pas que l'on puisse utiliser List(of) avec une structure). Mais il ne devrait pas y avoir de problème, sauf peut-être un peu de gymnastique supplémentaire avec:

Dim lstMot As New List(Of string)



Il me faut pour cela créer une fonction pour compter les mots


En supposant que les mots sont séparés par des espaces, et qu'il n'y a pas de surprise du genre Charles de Gaulle ou John de Chastelain; je pense que l'on peut "détourner" un peu la méthode string.split.

Function NombreDeMots(texte as string) as integer
     'Je suis trop paresseux pour ajouter ByVal, parce que
     'c'est la valeur par défaut en VB.net.
     dim tableaudemots() as string = texte.split(" ")
     dim lenombre as integer = tableaudemots.length
     return lenombre
end function


Pour le reste, j'ai enregistré la page web et je vais voir plus tard, si je ne peux pas dégoter quelque chose.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 6 févr. 2013 à 04:29
0
Merci
Bonjour,

une autre pour extraire les mots de ma chaîne en lui indiquant la position de chaque mot


Un petit coup d'expressions régulières avant d'aller me coucher.

Cela va te prendre une Form avec :

1 textbox bien ordinaire, avec une seule ligne.

1 textbox assez grand pour afficher quelques lignes et, pour faire sur, les "scrollbars" à both (Dans la fenêtre de propriétés)

1 bouton pour lancer la séparation.

Pour arrêter le programme, je clique sur le X en au à droite de la form.

Le code suivant dans le module de la form. Le Form_load pour mettre le texte automatiquement le texte de démonstration. Et le code du bouton pour lancer les opérations.

Imports System.Text.RegularExpressions
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs)  _ 
        Handles Button1.Click
        Dim re As Regex = New Regex("\w+")
        Dim résultat = re.Matches(TextBox1.Text)
        Dim laligne As String = String.Empty
        For Each unmatch As Match In résultat
            laligne String.Concat("Position ", unmatch.Index, _ 
                      " Mot trouvé = ", unmatch.Value, ControlChars.NewLine)
            TextBox2.Text = String.Concat(TextBox2.Text, laligne)
        Next
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.TextBox1.Text = "J'ai fait ce programme, même si c'est pour aider Dayvid"
    End Sub
End Class
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 6 févr. 2013 à 04:38
0
Merci
Bonjour,

Et puis, pour tous ceux que cela intéresse. Ce qui me semble être le nec plus ultra pour monter et tester des expressions régulières. Expresso. (Et c'est gratuit.)
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour cmarcotte et grand merci pour l'aide que vous m'avez apportée, j'ai essayé le petit programme plus haut et je n'ai pratiquement rien changé, mais ça ne fonctionne pas !

Voici mon code modifié.

Imports System.Text.RegularExpressions
Public Class Form1
    'contrôles à rajouter sur le formulaire
    Dim ecran As Screen = Screen.PrimaryScreen
    Dim largeur As Integer = 1200
    Dim hauteur As Integer = 300
    Dim Txt1 As New TextBox With {.Parent Me, .Location _
        New Point(10, 10), .Width = largeur - 40}
    Dim Txt2 As New TextBox With {.Parent Me, .Location _
        New Point(10, 50), .Width largeur - 40, .ScrollBars ScrollBars.Both}
    Dim WithEvents bouton1 As New Button With {.Parent Me, .Location _
        New Point((largeur / 2) - .Width / 2, hauteur - 100), .Text = "Séparer"}

    Private Sub Bouton1_Click(sender As System.Object, e As System.EventArgs)
        Dim re As Regex = New Regex("\w+")
        Dim résultat = re.Matches(Txt1.Text)
        Dim laligne As String = String.Empty
        For Each unmatch As Match In résultat
            laligne = _
                String.Concat(" Position ", unmatch.Index, " mot trouvé ", _
                                    unmatch.Value, ControlChars.NewLine)
            Txt2.Text = String.Concat(Txt2.Text, laligne)
        Next
    End Sub

    Private Sub Frm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.Width = largeur
        Me.Height = hauteur
        Me.Txt1.Text = "Les lapins sont présents un peu partout sur la planète et se " & _
            "répartissent en neuf genres, tous classés dans la famille des léporidés, " & _
            "avec leurs proches parents les lièvres. Ce ne sont donc pas des rongeurs " & _
            "mais des lagomorphes, une branche cousine qui comprend les lièvres, les " & _
            "lapins et les pikas." + vbCr + "Les « lapins » sont classés dans les genres " & _
            "suivants de la famille des Léporidae : Brachylagus, Bunolagus, Caprolagus, " & _
            "Nesolagus, Oryctolagus (lapin commun), Pentalagus, Poelagus, Pronolagus, " & _
            "Romerolagus ou Sylvilagus." + vbCr + "Sept de ces genres ne comprennent qu'une " & _
            "seule espèce, le genre Nesolagus comprend deux espèces, le genre Pronolagus " & _
            "en comprend trois et le genre Sylvilagus ou lapins d'Amérique, comprend quinze " & _
            "espèces, soit au moins 27 espèces différentes de lapins en tout."
    End Sub
End Class


Je ne perd pas confiance, car il y aura une solution qui va se pointer à un moment ou à un autre.

Encore une fois, merci beaucoup pour l'aide, car ça me permet de progresser.

La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
Utilisateur anonyme - 6 févr. 2013 à 12:52
0
Merci
Bonjour,

Ca ne marche pas car tu n'as pas rattaché d'événement à ton bouton (Handles)
Private Sub Bouton1_Click(sender As System.Object, e As System.EventArgs) handles bouton1.click
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour, voila ce que je veux faire :

http://dl.free.fr/rm.pl'h=jPV9fcgSt&i=55196788&s=wT96ssXpc6iD5JALP3DXiil5tVxDHoNV

merci à tous pour l'aide que vous m'apportez.


La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
0
Merci
Merci beaucoup banana32, effectivement ça marche beaucoup mieux, mais j'aurais aimé que le deuxième textbox s'agrandisse en hauteur. Existe t'il une solution ?

La langue française est gratuite, seules les fautes d'orthographe sont en option.
Commenter la réponse de Micoute
0
Merci
Bonsoir, j'ai un peu retoucher mon programme, alors je poste mon travail, mais il y a comme un défaut, comme disait Fernand Raynaud, c'est que j'ai toujours la même réponse quoique je mette comme caractère de recherche.

Public Class Form1

    'contrôles à rajouter sur le formulaire
    Dim ecran As Screen = Screen.PrimaryScreen
    Dim largeur As Integer = 1200
    Dim hauteur As Integer = 300
    Dim Txt1 As New TextBox With {.Parent Me, .Location _
        New Point(10, 10), .Width = largeur - 40}
    Dim Txt2 As New TextBox With {.Parent Me, .Location _
        New Point(10, 50), .Width 40, .ScrollBars ScrollBars.Both}
    Dim WithEvents bouton1 As New Button With {.Parent Me, .Location _
        New Point((largeur / 2) - .Width / 2, hauteur - 100), .Text = "Chercher"}
    Dim TableauDeMots() As String
    Dim LeNombre As Integer

    'Compter le nombre de mots dans la chaîne
    Public Function NombreDeMots(Texte As String) As Integer
        TableauDeMots = Texte.Split(" ")
        LeNombre = TableauDeMots.Length
        Return LeNombre
    End Function

    Dim Position As Integer

    'Cherche une sous-chaîne dans une chaîne de caractères. 
    'ChaineATrouverLa chaîne de caractère à trouver. 
    'Chaine : La chaîne de caractère à utiliser. 
    'PositionDepart : Position du caractère à partir de laquelle la recherche commence. 


    Public Function TrouverChaine(Chaine As String, ChaineATrouver As String, _
                                  Optional PositionDepart As Integer = 0) As Integer

        Position = PositionDepart
        While Position < NombreDeMots(Chaine)
            Position += 1
            Position = TrouverChaine(Chaine, ChaineATrouver, Position)
        End While

        Return Position
    End Function

    Dim c As Integer

    'Renvoie un champ d'une chaîne à l'index spécifié. 
    'Chaine : La chaîne de caractère à utiliser. 
    'Index : La position du champ. 
    'Delimiteur : Le caractère choisi comme séparateur des champs de la chaîne 
    '(un seul caractère de longueur autorisée). 

    Public Function ChampChaine(Chaine As String, Index As Integer, _
                                Delimiteur As String) As String
        Dim ld As String = Len(Delimiteur)
        Dim sauvegarde As Integer = 1
        Dim x As Integer
        While x <= NombreDeMots(Chaine)
            x = TrouverChaine(Chaine + Delimiteur, Delimiteur, sauvegarde + 1)
            If x > 0 Then
                c += 1
                If c = Index Then
                    Return Mid(Chaine, sauvegarde, x - sauvegarde)
                End If
                sauvegarde = x + ld
            End If
        End While
        Return sauvegarde
    End Function

    Private Sub Bouton1_Click(sender As System.Object, e As System.EventArgs) _
    Handles bouton1.Click
        Me.Txt2.Text = ChampChaine(Txt1.Text, 0, Chr(13))
    End Sub

    'Texte à analyser

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.Bounds = New Rectangle(100, 300, largeur, hauteur)
        Me.Txt1.Text = "Les lapins sont présents un peu partout sur la planète et se " & _
            "répartissent en neuf genres, tous classés dans la famille des léporidés," & _
            " avec leurs proches parents les lièvres. Ce ne sont donc pas des rongeur" & _
            "s mais des lagomorphes, une branche cousine qui comprend les lièvres, le" & _
            "s lapins et les pikas." + Chr(13) + "Les « lapins » sont classés dans le" & _
            "s genres suivants de la famille des Léporidae : Brachylagus, Bunolagus, " & _
            "Caprolagus, Nesolagus, Oryctolagus (lapin commun), Pentalagus, Poelagus," & _
            " Pronolagus, Romerolagus ou Sylvilagus." + Chr(13) + "Sept de ces genres" & _
            " ne comprennent qu'une seule espèce, le genre Nesolagus comprend deux es" & _
            "pèces, le genre Pronolagus en comprend trois et le genre Sylvilagus ou l" & _
            "apins d'Amérique, comprend quinze espèces, soit au moins 27 espèces diff" & _
            "érentes de lapins en tout."
    End Sub
End Class


Je vous remercie d'avance de bien vouloir m'aider. Je suis un gros boulet.


Tout homme doit être poli ; mais il doit aussi être libre.
Commenter la réponse de Micoute
Utilisateur anonyme - 6 févr. 2013 à 22:37
0
Merci
Bonjour,

Je n'ai pas tout repris. J'ai juste soumis le texte complet à mon programme d'expressions régulière et la séparation des mots se fait bien sauf pour "d'Amérique". Split.length (avec la fonction que je t'ai fournie) donne 119 mots et d'Amérique compte pour un mot. Avec les expressions régulières (résultat.count), on arrive à 120 mots et d'Àmérique compt pour 2 mots : d et Amérique". Tu pourrais utiliser les expressions régulières pour remplacer ChampChaine(). Je vais voir si je ne pourrais pas regarder cela à tête reposée après le souper.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 6 févr. 2013 à 22:42
0
Merci
Bonjour,

c'est que j'ai toujours la même réponse quoique je mette comme caractère de recherche.


Ce bout-là, je se saisis pas vraiment. Quel caractère et à quel endroit ?
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonsoir et merci beaucoup

Il faut dire que je cherche tellement que je change ceci et cela dans mon programme et que si je ne mets pas la bonne sortie et bien ça ne donne pas le bon résultat, là j'en suis arrivé à un point où il me dit le nombre de fois ou se trouve le délimiteur dans mon texte, alors je vais analyser ça demain, car il est 23 heures et d'habitude je ne traîne pas à ces heures indues, mais je pense avoir créé une nouvelle fonction.

Bonne nuit, à demain !

Tout homme doit être poli ; mais il doit aussi être libre.
Commenter la réponse de Micoute

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.