COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE

Signaler
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
cs_alpha5
Messages postés
74
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
24 mars 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53961-compteur-de-nombre-de-mots-dans-un-texte

cs_alpha5
Messages postés
74
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
24 mars 2013

Merci à tous de vos conseils.
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
sur le fond, nous sommes d'accord... je ne voulait pas trop chambouler le code de notr ami
cs_Warny
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

Pour la recherche des mots, une bonne regex me parait une bonne idée.
Pour la version simple, ça donne ça :

using System.Text;

Regex findWords = new Regex("\S+"); //un mot est une suite de caractères concomitants autre qu'un espace ou qu'un saut à la ligne.

foreach(Match word in findWords.Matches(text)) {
Mots.Add (word.Value);
}
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Un peu de ménage plus tard (et d'ajout de .NET) :

Public Class Form1
Dim Mots As New List(Of String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Buffer As String
If TextBox1.Text.Length > 0 Then
IndexEtRepérage()
Buffer = "Les mots sont :" & Environment.NewLine
For Each Mot As String In Mots
Buffer &= Mot & Environment.NewLine
Next
TextBox1.Text = Buffer
Button1.Enabled = False
End If
End Sub

Public Sub IndexEtRepérage()
Dim car As Char
Dim CAR_SEP As String = Convert.ToChar(10) & Convert.ToChar(13) & Convert.ToChar(9) & ". !:;,?)({[]}"""
Dim LETTRES As String = "-'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèàùçâêëïîûô1234567890"
Dim Mot As String = String.Empty

Mots.Clear()
For Each car In TextBox1.Text & "."
If LETTRES.Contains(car) Then '1ère lettre d'un mot
Mot &= car
ElseIf CAR_SEP.Contains(car) AndAlso Mot.Length > 0 Then '1er caractère derrère un mot
If Not Mots.Contains(Mot) Then
Mots.Add(Mot)
End If
Mot = String.Empty
End If
Next
TextBox2.Text = Mots.Count.ToString()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Text = "0"
Button1.Enabled = True
End Sub
End Class

te reste a remettre si tu le souhaites la gestion des multiples, etc.