Base de connaissance recherchant des documents sur le réseau par le titre

Tutorial base de connaissance

Voici à quoi ressemble la base de connaissance finie :

Nom des contrôles utilisés

textbox : Txt_search

combobox : cb_Clients

Bouton recherche : bttn_search

Listbox : lb_result

Checkbox : chkArchive

Le code complet

Imports System.IO

Imports System.Windows.Forms.WebBrowser

Imports System.Windows.Forms.Application

Imports Microsoft.VisualBasic

Imports Microsoft.Office

Imports Microsoft.Office.Interop


Public Class FRMKB

    'variable des répertoires
    Dim sDirectory As String

    'Variable de lecture des fichiers texte (Liste Client, Source Client, répertoire Archives)
    Dim sClientFile = IO.File.ReadAllLines("\\chemin\lsClient.txt", System.Text.Encoding.Default)

    Dim sLienClient As String() = IO.File.ReadAllLines("\\chemin\lsSource.txt", System.Text.Encoding.Default)

    Dim sLienArchive As String() = IO.File.ReadAllLines("\\chemin\lsArchive.txt", System.Text.Encoding.Default)

    Private Sub BttnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BttnSearch.Click

        'On vide la listbox
        lb_result.Items.Clear()

        If sDirectory = "" Then
            MsgBox("Renseigner l'ensemble des champs", MsgBoxStyle.Critical)
        End If

        'Défini les mots clés pour la recherche. Répertoire et mot clés inscrits dans les zones de texte
        Dim sKW1 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search.Text & "*")
        Dim sKW2 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search2.Text & "*")
        Dim sKW3 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search3.Text & "*")
        Dim sKW4 As IEnumerable = Directory.GetFiles(sDirectory, "*" & txt_search4.Text & "*")

        'Si la zone de texte 1, n'est pas vide, on affiche le mot clé dans la listbox
        If Not txt_search.Text = String.Empty Then
            For Each sR1 As String In sKW1
                lb_result.Items.Add(sR1)
            Next
        End If

        'Si la zone de texte 2, n'est pas vide, on affiche le mot clé dans la listbox
        If Not txt_search2.Text = String.Empty Then
            For Each sR2 As String In sKW2
                lb_result.Items.Add(sR2)
            Next
        End If

        'Si la zone de texte 3, n'est pas vide, on affiche le mot clé dans la listbox
        If Not txt_search3.Text = String.Empty Then
            For Each sR3 As String In sKW3
                lb_result.Items.Add(sR3)
            Next
        End If

        'Si la zone de texte 4, n'est pas vide, on affiche le mot clé dans la listbox
        If Not txt_search4.Text = String.Empty Then
            For Each sR4 As String In sKW4
                lb_result.Items.Add(sR4)
            Next

        'Si la zone de texte 1 est vide, on demande de saisir 1 mot clé minimum
        ElseIf txt_search.Text = "" Then
            MsgBox("Veuillez Entrer un mot clé", MsgBoxStyle.Information)
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'Chargement du fichier client pour le ComboBox (il ouvre le fichier texte comportant la liste des clients
        Me.cb_Clients.Items.AddRange((System.IO.File.ReadAllLines("\\chemin\lsClient.txt", System.Text.Encoding.Default)))

        'Charge la flashnews
        rtb_Info.LoadFile("\\chemin\FlashNews.txt", RichTextBoxStreamType.PlainText)
        rtb_Info.SelectionAlignment = ContentAlignment.TopCenter

        'Expiration de la licence (a supprimer si vous ne souhaitez pas que ça expire
        Dim sDateEnd As Date = #4/1/2014#
        Dim sDate As Date = Date.Today
        Dim result As Integer = DateTime.Compare(sDateEnd, sDate)
        Dim relationship As String

        If result < 0 Then
            relationship = MsgBox("Licence Expirée", MsgBoxStyle.Critical)
            Me.Close()
        End If

    End Sub

    Private Sub cb_Clients_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_Clients.SelectedIndexChanged

        'on vide la listbox
        lb_result.Items.Clear()
        'Alors là c'est plus embêtant, je vais tâcher d'être clair.
        'On va faire 2 actions. 
        'Action 1 : transformer le répertoire initial de recherche pour aller faire une recherche dans le répertoire archive
        'Action 2 : Si on sélectionne le client 0 (première ligne du fichier lsclient.txt), il va chercher dans le fichier lsSource.txt le chemin réseau pour ce client

        'Le gros inconvéniant : Si on rajoute un même client dans la liste (donc case 12 dans le code), il faudra modifier le code pour qu'il soit pris en charge, donc une
        'compilation du code à refaire.

        Select cb_Clients.SelectedIndex
            Case 0
                'si la case à cocher archive est cochée on change le chemin pour qu'il aille chercher dans lsarchive.txt au lieu de lsSource.
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(0)
                Else
                    'sinon on fait la recherche dans lsSource.txt
                    sDirectory = sLienClient(0)
                End If

            Case 1
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(1)
                Else
                    sDirectory = sLienClient(1)
                End If

            Case 2
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(2)
                Else
                    sDirectory = sLienClient(2)
                End If

            Case 3
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(3)
                Else
                    sDirectory = sLienClient(3)
                End If

            Case 4
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(4)
                Else
                    sDirectory = sLienClient(4)
                End If

            Case 5
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(5)
                Else
                    sDirectory = sLienClient(5)
                End If

            Case 6
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(6)
                Else
                    sDirectory = sLienClient(6)
                End If

            Case 7
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(7)
                Else
                    sDirectory = sLienClient(7)
                End If

            Case 8
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(8)
                Else
                    sDirectory = sLienClient(8)
                End If

            Case 9
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(9)
                Else
                    sDirectory = sLienClient(9)
                End If

            Case 10
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(10)
                Else
                    sDirectory = sLienClient(10)
                End If

            Case 11
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(11)
                Else
                    sDirectory = sLienClient(11)
                End If

            Case Else
                cb_Clients.SelectedIndex = False

        End Select

    End Sub


    Private Sub BttnReset_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BttnReset.Click

        'Si on clique sur Clear ça vide tout et ça rafraichi le flashnews
        lb_result.Items.Clear()
        sDirectory = ""
        txt_search.Text = ""
        txt_search2.Text = ""
        txt_search3.Text = ""
        txt_search4.Text = ""
        cb_Clients.Text = ""
        chkArchive.Checked = False
        rtb_Info.LoadFile("\\chemin\FlashNews.txt", RichTextBoxStreamType.PlainText)
        rtb_Info.SelectionAlignment = ContentAlignment.TopCenter

    End Sub

    Private Sub lb_result_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lb_result.DoubleClick
        'Si on double clic sur un ligne de la listbox ça ouvre le document, que ça soit du Word, Excel, PPT, PDF....

        Process.Start(fileName:=lb_result.SelectedItem)

    End Sub

End Class

Structures des fichiers texte utile pour les recherches

  • lsClient.txt

Entrer sur chaque ligne le nom des clients souhaités

  • lsSource.txt

Ne surtout pas oublier l'anti slash à la fin (même avec des espaces pas besoin de guillemets)

  • LsArchive.txt

ça va être la même que le lsSource.txt mais avec un autre répertoire

Les plus

Code simple permettant de rechercher des procédures dans des répertoires par mot clés.

Exemple de recherche possible : Si je tape dans "txt_search" incident et dans "txt_search2 " imprimante

Il va sortir tous les articles contenant dans le titre incident et imprimante

Exemple : Incident imprimante.doc, incident disque dur.doc, configuration imprimante.doc etc.

Le flashnews peut être modifié sans recompilation, mais le refresh se fera après un clic sur le bouton "clear" ou après une réouverture de l'appli. Sinon il faut rajouter un timer.

Les moins

Si on tape en mot clé dans txt_search uniquement "pilote imprimante", il sortira tous les fichiers dont le titre contient à la suite "pilote imprimante". Mais il ne trouvera pas " pilote de l'imprimante" ou "pilote impression", d'où la recherche sur 4 zones de texte.

Ce code ne permet pas de rajouter sans modification de celui-ci d'autres clients (pas plus de 12) et chemin dans les fichiers textes. Il faudra alors recompiler le code en rajoutant dans la section :

Private Sub cb_Clients_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_Clients.SelectedIndexChanged

        Case 12
                If chkArchive.Checked Then
                    sDirectory = sLienArchive(11)
                Else
                    sDirectory = sLienClient(11)
                End If

        Case 13 etc.

Ce document intitulé « Base de connaissance recherchant des documents sur le réseau par le titre » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous