Comment : automatiser la recherche et le remplacement de texte
Visual Studio vous permet de rechercher et de remplacer du texte présent dans des documents ouverts dans l'environnement de développement intégré (IDE) et enregistrés dans des fichiers sur le système.Le principal moyen d'y parvenir consiste à utiliser les méthodes FindReplace et Execute de l'objet Find.Les objets TextSelection et EditPoint fournissent également la méthode FindPattern.Pour plus d'informations, consultez la méthode FindPattern dans Comment : contrôler l'éditeur de code (Visual Basic).
[!REMARQUE]
La valeur de constante vsFindOptionsMatchInHiddenTex[t] dans l'énumération [vsFindOptions] ne s'applique pas à la méthode FindPattern car elle applique sa recherche à l'intégralité du texte, y compris au texte masqué.
La version de Find dans l'espace de noms EnvDTE80 est nommée Find2.Elle est identique à l'objet Find, mais offre une nouvelle propriété nommée WaitForFindToComplete.Lorsque cette propriété booléenne a la valeur True, l'opération de recherche ne s'arrête pas tant que tous les documents sélectionnés n'ont pas été parcourus.
Par exemple, si vous recherchez un mot dans 100 documents, vous pouvez recevoir des résultats incomplets à moins d'utiliser la propriété WaitForFindToComplete ou de gérer l'événement FindDone.Si les deux méthodes fonctionnent, la définition de la propriété WaitForFindToComplete n'en reste pas moins une méthode plus rapide et plus facile de garantir que tous les documents ont été examinés avant d'afficher les résultats de la recherche.
[!REMARQUE]
Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.
Exemple
Les exemples suivants montrent comment référencer et utiliser les différents membres du modèle Automation Find.Cet exemple crée un document texte qui contient du texte, puis recherche et remplace du texte à l'aide de différentes méthodes.Pour exécuter cet exemple, remplacez la méthode OnConnection dans un complément simple par le code ci-dessous.Pour exécuter différentes sections de cet exemple, supprimez les marques de commentaire du code approprié.Avant d'exécuter ce code, assurez-vous que la propriété « Embed Interop Types » de la référence d'assembly EnvDTE a la valeur False.
Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
searchReplace(_applicationObject)
End Sub
Public Sub searchReplace(ByVal dte As DTE2)
Dim findWin As Find2
Dim doc As Document
Dim textDoc As TextDocument
Dim textSel As TextSelection
Dim iCtr As Integer
' Create a new text file.
dte.ItemOperations.NewFile("General\Text File")
' Set up references for the text document, Find object, and
' TextSelection object.
doc = dte.ActiveDocument
textDoc = CType(doc.Object("TextDocument"), TextDocument)
textSel = textDoc.Selection
findWin = CType(dte.Find, Find2)
' Make sure all docs are searched before displaying results.
findWin.WaitForFindToComplete = True
' Insert ten lines of text.
For iCtr = 1 To 10
textDoc.Selection.Text = "This is a test" & vbCr
Next iCtr
textDoc.Selection.Text = "This is a different word"
' Uses FindReplace to find all occurrences of the word, test, in
' the document.
MsgBox("Now changing all occurrences of 'test' to 'replacement'.")
findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test", _
vsFindOptions.vsFindOptionsMatchCase, "replacement", _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
' Uses Find2.Execute to find the word, different, in the document.
' findWin.FindWhat = "different"
' findWin.MatchCase = True
' findWin.Execute()
' Uses Find2.Execute to replace all occurrences of the word, Test,
' with the word, replacement.
' findWin.FindWhat = "test"
' findWin.ReplaceWith = "replacement"
' findWin.Action = vsFindAction.vsFindActionReplaceAll
' findWin.Execute()
End Sub
public void OnConnection(object application, ext_ConnectMode
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
searchReplace(_applicationObject);
}
public void searchReplace(DTE2 dte)
{
Find2 findWin;
Document doc;
TextDocument textDoc;
TextSelection textSel;
int iCtr;
// Create a new text file.
dte.ItemOperations.NewFile("General\\Text File"
,"New file",Constants.vsViewKindTextView);
// Set up references for the text document, Find object, and
// TextSelection object.
doc = dte.ActiveDocument;
textDoc = (TextDocument) doc.Object("TextDocument");
textSel = textDoc.Selection;
findWin = (Find2) dte.Find;
// Make sure all docs are searched before displaying results.
findWin.WaitForFindToComplete = true;
// Insert ten lines of text.
for(iCtr=1; iCtr<=10; iCtr++)
{
textDoc.Selection.Text = "This is a test"+Environment.NewLine;
}
textDoc.Selection.Text = "This is a different word";
// Uses FindReplace to find all occurrences of the word, test, in
// the document.
System.Windows.Forms.MessageBox.Show(
"Now changing all occurrences of 'test' to 'replacement'.");
findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test",
(int) vsFindOptions.vsFindOptionsFromStart, "replacement",
vsFindTarget.vsFindTargetCurrentDocument, "",
"",vsFindResultsLocation.vsFindResultsNone);
// Uses Find2.Execute to find the word, different, in the document.
// findWin.FindWhat = "different"
// findWin.MatchCase = True
// findWin.Execute()
// Uses Find2.Execute to replace all occurrences of the word, Test,
// with the word, replacement.
// findWin.FindWhat = "test"
// findWin.ReplaceWith = "replacement"
// findWin.Action = vsFindAction.vsFindActionReplaceAll
// findWin.Execute()
}
Voir aussi
Tâches
Comment : compiler et exécuter les exemples de code du modèle objet Automation
Comment : contrôler l'éditeur de code (Visual Basic)
Procédure pas à pas : création d'un Assistant
Concepts
Graphique Modèle d'objet Automation
Autres ressources
Création et contrôle de fenêtres d'environnement