cs_alpha5
Messages postés74Date d'inscriptionjeudi 10 août 2006StatutMembreDernière intervention24 mars 2013 11 janv. 2012 à 22:43
Merci à tous de vos conseils.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 janv. 2012 à 07:30
11 janv. 2012 à 22:43
9 janv. 2012 à 09:54
9 janv. 2012 à 09:51
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);
}
9 janv. 2012 à 09:11
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.
9 janv. 2012 à 08:49
pourquoi ce chois arbitraire ?
pourquoi prédéfinir une valeur ?
probleme de design géneral...
9 janv. 2012 à 07:30