Numéro d'article: 176643 - Dernière mise à jour: jeudi 1 juillet 2004 - Version: 3.1

Comment faire pour rechercher plusieurs occurrences d'une chaîne dans une RichTextBox

Sommaire

Agrandir tout | Réduire tout

Résumé

Recherche d'une seule occurrence d'une chaîne de texte dans un RichTextBox est relativement simple. La fonction Instr() a été conçue pour que cela. Pour rechercher plusieurs occurrences d'un bloc de texte, toutefois, vous devez écrire une routine qui s'appellent la fonction Instr() autant de fois que nécessaire pour rechercher le bloc de texte pour la chaîne souhaitée, ensemble lors du déplacement progressivement le point de départ de la recherche vers l'avant pour éviter de recherche l'occurrence même plusieurs fois.

Vous pouvez effectuer cela en utilisant une routine récursive, qui appelle elle-même de dans son propre code. Si vous n'êtes pas attention, toutefois, récursion peut provoquer des problèmes, comme boucles infinies et les erreurs de pile. Mais récursivité autorise des solutions élégante aux situations sinon difficiles.

Cet article illustre récursivité par exemple. La routine FindIt() elle-même appelle récursivement tant que la valeur renvoyée de la fonction Instr() ne différente de celle de zéro. Si cette valeur est non nulle, cela signifie que Instr() trouver une autre occurrence de la chaîne qu'il a été recherchez. Si la valeur est égale à zéro, la chaîne n'est pas contenue dans le bloc de texte Rechercher en cours soit toutes les occurrences de la chaîne ont déjà été trouvés. Vérifier cette valeur chaque fois que la routine s'exécute empêche une boucle sans fin.

Plus d'informations

Les étapes suivantes de créer un exemple d'utilisation de plusieurs occurrences de la même chaîne dans un plus grand bloc de texte de recherche.

Exemple pas à pas

  1. Démarrez un nouveau projet EXE standard Visual Basic. Form1 est créé par défaut.
  2. Redimensionner le formulaire est aussi grand que possible, puis lui ajouter un RichTextBox et un bouton de commande à l'écran.
  3. Rendre le RichTextBox aussi grand que possible et définir ses barres de défilement à 3-rtfBoth propriété.
  4. Ajoutez le code suivant à l'écran :
         Private Sub Form_Load()
    
             'Edit the following line to point to your license.txt or another
             'text file
    
             RichTextBox1.LoadFile "license.txt"
    
          End Sub
    
          Private Sub Command1_Click()
    
          Dim strval As String    'Inputbox returns a string
          Dim nStrings As Long
    
             'Reload the file to undo the previous selections
             'Edit the following line to point to your license.txt or another
             'text file
    
             RichTextBox1.LoadFile "license.txt"
    
             'Ask the user what string to find. Defaults to finding all
             'occurrences of the word "the." In this example, you are
             'concatenating spaces onto each end of the search string to
             'prevent the FindIt routine from finding occurrences of the
             'search string within other words, ie; finding "the" in "there"
             'or "these." If you want to find the string within other strings,
             'simply eliminate the concatenation.
    
             strval = " " & InputBox("Enter the string to find.", "Findit", _
                "the") & " "
    
             If strval <> "" Then
    
             'the user didn't click cancel call the FindIt routine
             'and pass it the
    
                nStrings = FindIt(RichTextBox1, strval)
                MsgBox (Str$(nStrings) & " instances found.")
             End If
    
          End Sub
    
          '********************************************************************
          'Findit takes three arguments; two required, and one optional. The
          'required arguments, Box and Srch, are a RichTextBox object and a
          'string to search for. The optional argument, Start, is a Long
          'integer that is used in the recursive calls.
          '********************************************************************
    
          Private Function FindIt(Box As RichTextBox, Srch As String, _
             Optional Start As Long)
    
          Dim retval As Long      'Instr returns a long
          Dim Source As String    'variable used in Instr
    
             Source = Box.Text   'put the text to search into the variable
    
             If Start = 0 Then Start = 1 'the initial call doesn't pass a value
                                         'for Start, so it will equal 0
    
                retval = InStr(Start, Source, Srch) 'do the first search,
                                                    'starting at the beginning
                                                    'of the text
    
                If retval <> 0 Then  'there is at least one more occurrence of
                                     'the string
    
                'the RichTextBox doesn't support multiple active selections, so
                'this section marks the occurrences of the search string by
                'making them Bold and Red
    
                   With Box
                      .SelStart = retval - 1
                      .SelLength = Len(Srch)
                      .SelColor = vbRed
                      .SelBold = True
                      .SelLength = 0          'this line removes the selection
                                              'highlight
                   End With
    
                   Start = retval + Len(Srch) 'move the starting point past the
                                              'first occurrence
    
                   'FindIt calls itself with new arguments
                   'this is what makes it Recursive
                   FindIt = 1 + FindIt(Box, Srch, Start)
                End If
          End Function
    						
  5. Exécutez le projet et cliquez sur le bouton de commande. Vous pouvez accepter la valeur par défaut de rechercher des occurrences du mot « les » ou entrez votre propre chaîne à rechercher. Pensez à inclure un espace avant et après les mots court à empêcher FindIt() de trouver la chaîne de recherche dans le milieu de mots plus.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 6.0 Édition initiation
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Édition Standard
  • Microsoft Visual Basic 4.0 Édition professionnelle
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Mots-clés : 
kbmt kbhowto KB176643 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 176643  (http://support.microsoft.com/kb/176643/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
 

Traductions disponibles