Richtextbox

Résolu
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004 - 28 juil. 2004 à 19:14
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 - 31 juil. 2004 à 12:42
LowenLowen
J'ai un fichier RTF que j'ouvre avec un rich text box, je dois identifier chacun des mots et je dois aussi les comptés.

si j'execute un find ca fonctionne assez bien pour un mot en particulier , mais je ne trouve pas le code pour que la routine me retourne chacun des mots un par un contunu dans le fichier.

Votre aide serait grandement apprécié.

Merci

21 réponses

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 19:36
Ah, je pense à un dernier truc : tu pourrais rajouter :

if d = 0 then

d = instr(last, rich.text, vbcrlf)

if d <> 0 then

--- Tu reprends le code d'opération sur le mot ---

else

mot = mid(rich.text, last)

end if

end if

Cela évitera un bug et permettra de séléctionner 2 mot qui sont séparés seulement par un vbcrlf.

Voilà, @+ et bonne prog.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 juil. 2004 à 19:36
Salut Lowen
Ta question n'est pas très claire ... mais je suppose que tu veux rechercher l'emplacement d'un second mot identique au premier qui serait plus loin dans le texte ?
Regarde dans l'aide la fonction Find :
La première fois, tu vas faire ta recherche avec :
Position = RTB.Find("LeMot", 0)
Ensuite, si tu veux chercher une deuxième occurence de cette recherche, simplement tape :
Position = RTB.Find("LeMot", Position + 1)

Vala
Jack
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 juil. 2004 à 21:06
pour séparer tes mots, il te suffit de faire :

Dim Mots() As String

Mots = Split ( RichTextBox1.Text , " " )



ensuite, le tableau Mots contient les groupes de caractères séparés par des espaces.
0
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004
29 juil. 2004 à 00:16
Jack, renfield
Merci de m'avoir répondu

j'utilise le rtf.find pour trouvé les mots que je recherche jusqu'ici ca fonctionne bien. je peut les surligner changer la couleur, etc,
ce que je recherche c'est une proc qui débute au début du fichier et qui énumèrerais automatiquement tout les mots jusqu'à la fin du document.

Merci de votre aide !

Voici un exemple de mon code...

Public Sub ToutMot()
'*******Nombre de ligne*************
Dim lettres As Integer, i As Integer, Lignenumber As Integer, temp As Integer
Dim mot As String
lettres = Len(RtfMain.Text)
Pgbar.Max = lettres
Pgbar.Text = "Identifie tout les mots"
Pgbar.Visible = True
STBar.Panels(1).Text = lettres & "Charactères"
'**************************************
Dim compteur As Integer
For compteur = 0 To lettres
Pgbar.Value = compteur
Foundpos = RtfMain.Find(" ", compteur, , 2)
RtfMain.SelColor = RGB(256, 0, 0)
RtfMain.SelBold = True
Lignenumber = RtfMain.GetLineFromChar(compteur)
If Lignenumber <> temp Then
STBar.Panels(2).Text = temp & " lignes"
temp = Lignenumber
End If
Next compteur

Pgbar.Visible = False
STBar.Panels(7).Text = "Terminé"
End Sub



LowenLowen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 01:36
Tu fais une boucle du genre :

Dim Last as integer
Dim mot as string
Last = 1
begin:

d = instr(last, rich.text, " ")

if d <> 0 then

mot = mid(rich.text, last, mot - last)

---ton opération sur le mot---

last = d + 1

goto begin

end if

voilà
0
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004
29 juil. 2004 à 18:51
merci scalpWeb c'est presque ca,

Cette routine fonctionne mais j'ai du remplacé mot - last par d-last

le problème que j'ai maintenant c'est que le dernier mot de mon texte n'est pas traité si il n'y a pas d'espace à la fin de ce dernier

de plus, quelques fois elle traite plus d'un mot en même temps, comme si elle oubliais qu'il y a un espace entre chacun des mots

mais j'aime ce code , ca mérite reflexion !
Merci encore !
Lowen/font=Tahoma
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 19:29
Dsl pour le :
mot - last
erreur de débutant, lol...
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 19:31
Pour le pbm de ton dernier mot, tu pourrais rajouter :

if d = 0 then

mot = mid(rich.text, last)

end if
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
29 juil. 2004 à 19:32
Au fait, pense à cliquer sur "réponse acceptée" quand ton pbm est résolu, ça permettra aux membres de répondre au questions d'autres personnes...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 juil. 2004 à 10:34
Il est possible d'utiliser les Expressions régulières !!!

ici, un exemple qui permet de connaitre le nombre de mots....
ont peut facilement le modifier pour renvoyer la liste des mots...

Private Sub Text1_Change()
    Me.Caption = GetWordCount(Text1.Text) & " Mot(s) trouvé(s)"
End Sub

Function GetWordCount(Str As String) As Integer
    Dim REG As Object
    Set REG = CreateObject("VbScript.RegExp")
    With REG
        .Pattern = "[\wéëèçàêïîùü]+"
        .Global = True
        GetWordCount = .Execute(Str).Count
    End With
End Function
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
30 juil. 2004 à 11:51
Ah oui, effectivement, c'est assez rapide comme ça... Mais bon, j'avoue avoir encore pas mal de pbm avec certaine expressions régulières.
0
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004
30 juil. 2004 à 17:38
Renfield, Ta solution est intéressante par contre elle traite du texte pur, alors que ma routine utilise un Richtextbox et que j'y introduit un fichier de type Microsoft Word sauvegardé en RTF,

Le problème est que je rencontre du Code RTF. je pouurais toujours traité le fichier en texte mais son contenu en serait altéré.
esc-ce que les expressions régulières fonctionne sur un Richtextbox , mais je vais quand même essayer cela.
__________________________________________________

ScalpWeb , ta solution est la bonne par contre, j'ai un blanc de mémoire à savoir comment utiliser efficacement le code de ton dernier envoi. je vais fignoler quelque chose, la théorie est bonne.

En terminant, Merci à vous deux de m'avoir guidé aux meilleurs de vos connaissances, et excusé le délais de mes retours car je uis à 6 heures d'intervalle.

Lowen .
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 juil. 2004 à 18:17
avec les RegExp, tu traite du texte.... peu importe sa provenance

je vois pas queln traitement particulier tu appliques a ton texte "RTF" ...
0
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004
30 juil. 2004 à 21:36
renfield, ou puisje me renseigner sur les RegExp, ca me semble assez puissant, as tu un bouquin en particulier qui en parle...

en attendant ca fonctionne... voici le code

Public Sub IdentifiMot()
Dim Last As Integer
Dim mot As String
Dim CompteMot As Integer

Last = 1
begin:
d = InStr(Last, RtfMain.Text, " ")
Pgbar.Value = d
If d <> 0 Then
mot = Mid(RtfMain.Text, Last, d - Last)
If mot <> "" Then
CompteMot = CompteMot + 1
End If
Last = d + 1
GoTo begin
Else
If d = 0 Then
d = InStr(Last, RtfMain.Text, vbCrLf)
mot = Mid(RtfMain.Text, Last)
If mot <> "" Then
CompteMot = CompteMot + 1
End If
Last = d + 1
End If
End If
End Sub

Tu semble Etre en mesure de coder quelque chose de mieux en beaucoup moins de lignes avec les RegExp

Se serait interressant !!

A+

--Lowen--
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 juil. 2004 à 23:11
dis moi ce que fait ta procédure, et je te filerai un code qui inclues les Regex....

d'autant que dans ton code, tu compte la ponctuation comme des mots ;)
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
31 juil. 2004 à 00:43
Bonne chance Lowen, hesite pas à me demander si tu as d'autres pbm...
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
31 juil. 2004 à 00:45
Tiens j'y pense Lowen... Je n'avais pas pensé aux expressions régulières, mais je connais quand même quelques trucs là dedans, donc si tu as des pbm je suis là.

Mais renfield à l'air bien motivé ! ;-)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 juil. 2004 à 04:59
... pour avoir le dernier mot :
Les premières propositions étaient les bonnes, mais la sélection du mot recherchée était fausse :
Dim Position As Long, MotàChercher As String
MotàChercher = "Jack"
Position = 0 ' les RTB indexent à partir de 0 et pas 1
Do While Position <> -1 ' Find renvoie -1 quand il ne trouve pas
Position = RTB.Find(MotàChercher, Position)
' Sélection du mot trouvé :
RTB.SelStart = Position
RTB.SelLength = Len(MotàChercher)
Debug.Print RTB.SelText & " trouvé en position " & CStr(Position)
DoEvents
MsgBox "Trouvé"
Position = Posistion + 1 ' pour ne pas retrouver le même
Loop


Vala
Jack
0
cs_Lowen Messages postés 7 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 31 juillet 2004
31 juil. 2004 à 05:16
Renfield, Scalpweb
Merci encore pour votre aide...

La procédure que j'écris est comparable à la fonction statistique de Microsoft Word mais de façon amélioré dont voici un résumé

Le richtextbox est utilisé ici parce qu'il accepte les images et le texte et que les polices y sont traité de la même facon que dans un éditeur de texte commercial.

Je dois identifier tous les mots, les comptabiliser,
compter le nombre de paragraphes
compter le nombre de caractères
compter le nombre de pages
compter le nombre de photos, les identifier par leurs noms si possible.

identifier le type police utilisé pour chaques mot
Nbtres de ligne par page

pour chacun des items ci-haut je dois les identifier sur un time line
c-a-d à quelle caractères

avoir la possibilité d'effectuer une recherche sur un ou plusieurs mots en mème temps.

Avoir la possibilité de surligner le texte lors de recherche trouvé

Finalement tous les résultats seront stoké sur une bdn pour produire un résultat de statistique final.

Voilà ... si le challenge vous tente moi je suis preneur, je trouve que votre expertise de programmation est très enrichissante pour moi. cela me donne comme un deuxième souffle de motivation.

A+

Lowen
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
31 juil. 2004 à 07:55
ouah ! rien que ca...

OK - Je dois identifier tous les mots, les comptabiliser,
OK - ("paragraphe" a definir) compter le nombre de paragraphes
OK - compter le nombre de caractères
OK - compter le nombre de pages
OK - (pas de nom dans les images) compter le nombre de photos, les identifier par leurs noms si possible.

tout cela est faisable...

MSN@ thomas_reynald@msn.com

si cela t'interesse...
0
Rejoignez-nous