Chercher un mot dans les fichiers d'un dossier
Résolu/Fermé
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
-
2 janv. 2017 à 16:30
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 8 janv. 2017 à 19:20
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 8 janv. 2017 à 19:20
A voir également:
- Rechercher un mot dans plusieurs fichiers txt
- Rechercher ou entrer l'adresse - Guide
- Piratage facebook changer mot de passe - Guide
- Adresse IP locale : comment la trouver facilement - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer plusieurs fichiers - Guide
10 réponses
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
2 janv. 2017 à 16:34
2 janv. 2017 à 16:34
Bonjour,
quel VB?
quel VB?
- VBS
- VBA
- Word
- Excel
- Access
- Powerpoint
- Autre
- VB6
- VB.Net
- Winform
- WPF
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
2 janv. 2017 à 16:52
2 janv. 2017 à 16:52
Je suis en Application Windows Form sous visual studio 2013.
Voila mon code pour situer un peu.
Merci
Voila mon code pour situer un peu.
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim openMe As New OpenFileDialog() Dim selectedFile As String = String.Empty If openMe.ShowDialog() = Windows.Forms.DialogResult.OK Then RichTextBox1.LoadFile(openMe.FileName, RichTextBoxStreamType.PlainText) selectedFile = openMe.FileName SourceTextbox.Text = selectedFile Else End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click System.IO.File.WriteAllText(SourceTextbox.Text, RichTextBox1.Text) End Sub Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles SourceTextbox.TextChanged End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim i, j As System.Int32 Dim strTexte As String = String.Empty Dim strChaine As String = String.Empty strTexte = RichTextBox1.Text strChaine = SearchTextBox.Text For i = 0 To strTexte.Length - strChaine.Length Step 1 If strTexte.Substring(i, strChaine.Length) = strChaine Then j += 1 RichTextBox1.Select(i, strChaine.Length) RichTextBox1.Focus() RichTextBox1.SelectionStart = i RichTextBox1.SelectionLength = strChaine.Length End If Next End Sub Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles SearchTextBox.TextChanged End Sub Private Sub Dossier_Click(sender As Object, e As EventArgs) Handles Dossier.Click Dim selectedos As String = String.Empty FolderBrowserDialog1.Description = "Veuillez sélectionner le dossier de recherche." FolderBrowserDialog1.ShowNewFolderButton = False FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.SpecialDirectories.Desktop If FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Dim dossier_selectionner As String = FolderBrowserDialog1.SelectedPath selectedos = FolderBrowserDialog1.SelectedPath DossierTextBox.Text = selectedos Else End If End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click End Sub Private Sub DossierTextBox_TextChanged(sender As Object, e As EventArgs) Handles DossierTextBox.TextChanged End Sub End Class
Merci
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
Modifié par Whismeril le 2/01/2017 à 17:20
Modifié par Whismeril le 2/01/2017 à 17:20
Pour récupérer la liste des fichiers d'un répertoire, il faut utiliser la classe Directory et sa méthode de classe GetFiles.
https://docs.microsoft.com/fr-fr/dotnet/api/system.io.directory.getfiles?redirectedfrom=MSDN&view=netframework-4.8
Selon la surcharge tu peux spécifier un pattern à chercher et s'il faut chercher dans les sous répertoires.
Ça va te retourner un tableau avec les chemins de tous les fichiers.
Il va te falloir tous les ouvrir (avec une boucle foreach par exemple) et File.ReadAllText, et chercher si le texte contient ton code, avec la méthode Contains (attention à la casse) de string.
A chaque fois que tu trouves le code tu ajoutes le chemin du fichier dans une Liste de String, et une fois fini, tu peux afficher tous les fichier contenant ton code.
Pour ce bout de code, je ne tiens pas compte de la casse ni des accents, cédilles, etc...
Ça peut être réduit avec une requête Linq.
PS, je n'ai pas lu ton code.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
https://docs.microsoft.com/fr-fr/dotnet/api/system.io.directory.getfiles?redirectedfrom=MSDN&view=netframework-4.8
Selon la surcharge tu peux spécifier un pattern à chercher et s'il faut chercher dans les sous répertoires.
Ça va te retourner un tableau avec les chemins de tous les fichiers.
Il va te falloir tous les ouvrir (avec une boucle foreach par exemple) et File.ReadAllText, et chercher si le texte contient ton code, avec la méthode Contains (attention à la casse) de string.
A chaque fois que tu trouves le code tu ajoutes le chemin du fichier dans une Liste de String, et une fois fini, tu peux afficher tous les fichier contenant ton code.
Private Function FichiersContenantTexte(ByVal Repertoire As String, ByVal TexteATrouver As String) As List(Of String) Dim resultat As New List(Of String)() For Each fichier As String In Directory.GetFiles(Repertoire,"*.txt",SearchOption.TopDirectoryOnly) If File.ReadAllText(fichier).Contains(TexteATrouver) Then resultat.Add(fichier) End If Next fichier Return resultat End Function
Pour ce bout de code, je ne tiens pas compte de la casse ni des accents, cédilles, etc...
Ça peut être réduit avec une requête Linq.
PS, je n'ai pas lu ton code.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
2 janv. 2017 à 17:21
2 janv. 2017 à 17:21
Ha tiens, y'a un bogue dans la coloration syntaxique.
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
2 janv. 2017 à 17:26
2 janv. 2017 à 17:26
Ok merci c'est beaucoup plus clair pour moi. Je te tiens au jus :-)
Ps: c'est pas grave c'est brouillon pour le moment ^^.
Ps: c'est pas grave c'est brouillon pour le moment ^^.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
2 janv. 2017 à 23:04
2 janv. 2017 à 23:04
Du coup je n'arrive pas à l'associer avec mon bouton pour lancer la recherche du code inscrit dans la textbox. Et ouvrir du coup le resultat dans la richtextbox. Je suis sur qu'il n'y aura pas de doublon.
Enfin dans l'idée c'est clair mais la pratique beaucoup moins. Je suis vraiment débutant et apprend des sources que je trouve pour satisfaire mon application.
Si tu pouvais m'aider à l'implémenter, se serai super. Sinon j'ai trouvé une solution alternative mais beaucoup moins pratique. Donc te sens pas obligé. Ca aidera aussi d'autre personne d'avoir un code complet.
Merci de ton temps en tous cas. Et bonne soirée
ps:
Et pour suite une textbox pour le code a chercher
Un bouton pour chercher (la ou j'aimerai intégré ce bout de code plus haut)
Enfin dans l'idée c'est clair mais la pratique beaucoup moins. Je suis vraiment débutant et apprend des sources que je trouve pour satisfaire mon application.
Si tu pouvais m'aider à l'implémenter, se serai super. Sinon j'ai trouvé une solution alternative mais beaucoup moins pratique. Donc te sens pas obligé. Ca aidera aussi d'autre personne d'avoir un code complet.
Merci de ton temps en tous cas. Et bonne soirée
ps:
Private Sub Dossier_Click(sender As Object, e As EventArgs) Handles Dossier.Click Dim selectdos As String = String.Empty FolderBrowserDialog1.Description = "Veuillez sélectionner le dossier de recherche." FolderBrowserDialog1.ShowNewFolderButton = False FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.SpecialDirectories.Desktop If FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Dim dossier_selectionner As String = FolderBrowserDialog1.SelectedPath selectdos = FolderBrowserDialog1.SelectedPath DossierTextBox.Text = selectdos Else End If End Sub
Et pour suite une textbox pour le code a chercher
Un bouton pour chercher (la ou j'aimerai intégré ce bout de code plus haut)
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
2 janv. 2017 à 23:32
2 janv. 2017 à 23:32
Si tu es sur qu'il n'y aura pas de doublon
Private Function FichiersContenantTexte(ByVal Repertoire As String, ByVal TexteATrouver As String) As String For Each fichier As String In Directory.GetFiles(Repertoire,"*.txt",SearchOption.TopDirectoryOnly) If File.ReadAllText(fichier).Contains(TexteATrouver) Then Return fichier End If Next fichier Return String.Empty 's'il n'y a pas d'occurrence ça retourne une chaine vide End Function
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
3 janv. 2017 à 22:24
3 janv. 2017 à 22:24
Salut, du coup c'est bon ça fonctionne, merci beaucoup. Juste une question pour le premier code. Quand on à des doublons par exemple, il m'affiche les fichiers dans ma listbox. Mais comment puis-je faire pour les afficher respectivement dans plusieurs richtextbox. Merci encore pour ton aide.
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
3 janv. 2017 à 23:24
3 janv. 2017 à 23:24
Tu as plusieurs possibilités:
- créer dynamiquement autant de richtextbox qu'il y a de fichiers, mais ça risque de charger ton interface
- faire des onglets dynamiquement, un par fichier
- utiliser une listbox, ou un combobox et afficher le fichier sélectionné
- tous les concatèner dans un seul richtextbox
- ....
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
4 janv. 2017 à 22:10
4 janv. 2017 à 22:10
Une dernière question, Voila un bout du code:
Là, il m'affiche que le 1er résultat pour le moment.
Il faut lire <fichier> et traiter chaque ligne j'imagine.
Mais quel est la syntaxe. Je n'y arrive pas. Merci
For Each fichiers As String In Directory.GetFiles(Repertoire, "*.txt") If File.ReadAllText(fichiers).Contains(findtxt) Then resultat.Add(fichiers) ListBox1.Items.Add(fichiers) RichTextBox1.LoadFile(fichiers, RichTextBoxStreamType.PlainText) End If
Là, il m'affiche que le 1er résultat pour le moment.
Il faut lire <fichier> et traiter chaque ligne j'imagine.
Mais quel est la syntaxe. Je n'y arrive pas. Merci
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
4 janv. 2017 à 23:14
4 janv. 2017 à 23:14
oui, mais ça dépend d'abord de comment tu imagines l'afficher....
Je t'ai proposé quelques options, si tu en préfères une autre c'est ton choix, mais chaque type d'affichage aura un code particulier.
Donc commence par choisir ce que tu veux obtenir.
Je t'ai proposé quelques options, si tu en préfères une autre c'est ton choix, mais chaque type d'affichage aura un code particulier.
Donc commence par choisir ce que tu veux obtenir.
Flamouth2
>
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
5 janv. 2017 à 13:01
5 janv. 2017 à 13:01
Excuse moi. Oui je te l'ai pas dit. Le 1er choix. J'ai créé 3 richtextbox pour tester. Je n'arrive qu'à récupérer qu'une ligne de liste de string.
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
5 janv. 2017 à 19:02
5 janv. 2017 à 19:02
Le premier choix je te proposer de les créer dynamiquement les richtexbox.
C'est ce que j'ai codé
C'est ce que j'ai codé
Private Sub AfficheLesFichiers() Dim lesFichiers As List(Of String) = FichiersContenantTexte("C:\temp", "toto") For i As Integer = 0 To lesFichiers.Count - 1 Dim r As New RichTextBox() r.Location = New System.Drawing.Point(i * 50, i * 50) 'pose les controles en diagonale, tous les 50, à toi de gérer ça mieux r.Name = "rtbFichier" & (i+1).ToString()'c'est pas forcement nécessaire r.Size = New System.Drawing.Size(100, 100) r.Text = File.ReadAllText(lesFichiers(i)) Me.Controls.Add(r) r.BringToFront()'place le controle par dessus les autres, il faut le faire après l'avoir ajouté à la form Next i End Sub
flamouth1
Messages postés
10
Date d'inscription
dimanche 1 janvier 2017
Statut
Membre
Dernière intervention
10 janvier 2017
Modifié par flamouth1 le 8/01/2017 à 18:25
Modifié par flamouth1 le 8/01/2017 à 18:25
Tous comptes fait c'est trop brouillon en dynamique, du coup j'ai fait une condition pour chaque richtexbox, J'utilisais "fichiers" au lieu de "resultat" et évidement ça ne fonctionnait pas.
Voila le code terminé pour ceux qui rechercherai la même chose.
Merci Whismeril pour ton aide.
Voila le code terminé pour ceux qui rechercherai la même chose.
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() TextBox4.Clear() RichTextBox1.Clear() RichTextBox2.Clear() RichTextBox3.Clear() RichTextBox4.Clear() Dim Repertoire As String = String.Empty Dim findtxt As String = String.Empty Dim resultat As New List(Of String) Repertoire = DossierTextBox.Text findtxt = FindTextBox.Text For Each fichiers As String In Directory.GetFiles(Repertoire, "*.txt") If File.ReadAllText(fichiers).Contains(findtxt) Then resultat.Add(fichiers) End If Next fichiers '1 If resultat.Count = 1 Then TextBox1.Text = resultat.Item(0) RichTextBox1.LoadFile(TextBox1.Text, RichTextBoxStreamType.PlainText) End If '2 If resultat.Count = 2 Then TextBox1.Text = resultat.Item(1) TextBox2.Text = resultat.Item(0) RichTextBox1.LoadFile(TextBox1.Text, RichTextBoxStreamType.PlainText) RichTextBox2.LoadFile(TextBox2.Text, RichTextBoxStreamType.PlainText) End If '3 If resultat.Count = 3 Then TextBox1.Text = resultat.Item(2) TextBox2.Text = resultat.Item(1) TextBox3.Text = resultat.Item(0) RichTextBox1.LoadFile(TextBox1.Text, RichTextBoxStreamType.PlainText) RichTextBox2.LoadFile(TextBox2.Text, RichTextBoxStreamType.PlainText) RichTextBox3.LoadFile(TextBox3.Text, RichTextBoxStreamType.PlainText) End If '4 If resultat.Count = 4 Then TextBox1.Text = resultat.Item(3) TextBox2.Text = resultat.Item(2) TextBox3.Text = resultat.Item(1) TextBox4.Text = resultat.Item(0) RichTextBox1.LoadFile(TextBox1.Text, RichTextBoxStreamType.PlainText) RichTextBox2.LoadFile(TextBox2.Text, RichTextBoxStreamType.PlainText) RichTextBox3.LoadFile(TextBox3.Text, RichTextBoxStreamType.PlainText) RichTextBox4.LoadFile(TextBox4.Text, RichTextBoxStreamType.PlainText) End If End Sub
Merci Whismeril pour ton aide.
Whismeril
Messages postés
19027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 avril 2024
931
8 janv. 2017 à 19:20
8 janv. 2017 à 19:20
'est trop brouillon en dynamiqueje t'avais dit
mais ça risque de charger ton interface
Pour moi le meilleur rapport ergonomie/simplicité de code est la listeBox (ou le combobox) ou l'on sélectionne quel fichier afficher dans un seul et unique RichTextBox