COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 9 janv. 2012 à 07:30
cs_alpha5 Messages postés 74 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 24 mars 2013 - 11 janv. 2012 à 22:43
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
11 janv. 2012 à 22:43
Merci à tous de vos conseils.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 janv. 2012 à 09:54
sur le fond, nous sommes d'accord... je ne voulait pas trop chambouler le code de notr ami
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
9 janv. 2012 à 09:51
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 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 janv. 2012 à 09:11
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.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 janv. 2012 à 08:49
Const NB_MOTS_MAX As Short = 5000

pourquoi ce chois arbitraire ?
pourquoi prédéfinir une valeur ?

probleme de design géneral...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 janv. 2012 à 07:30
Ce code n'a pas grand chose de .Net...
Rejoignez-nous