Recherche dans fichier

Programmation d'applications complexes
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Recherche dans fichier

Message par Noos88 »

Pour ceux qui on l'utilité, je vous met un petit logiciel pour rechercher dans un (ou plusieurs) fichier un mot ou une phrase.

Moi je l'utilise pour rechercher une procedure dans tous mes codes PureBasic

Code : Tout sélectionner

Enumeration
  #Fenetre
  #Repertoire
  #Fichier
  #Editor
  #String
  #Button1
  #Button2
  #List
  #FichierLecture
  #Combo
  #Entrer
  #Check
  #Directory
  #Extention
  #Bar
EndEnumeration

Global Nom$,Repertoire$,Racine$,Extention$
Global Dossier$,AncienElement

Dossier$ = GetHomeDirectory()

Procedure Recherche(Dossier$)
        If ExamineDirectory(#Repertoire,Dossier$,"*."+Extention$)
       While NextDirectoryEntry(#Repertoire)
        If DirectoryEntryType(#Repertoire) = #PB_DirectoryEntry_File
         If ReadFile(#Fichier, Dossier$+DirectoryEntryName(#Repertoire)) 
           file = file +1
           Ligne = -1
          While Eof(#Fichier)=0  
            Ligne = Ligne + 1
            If FindString(ReadString(#Fichier),Nom$,0,#PB_String_NoCase)
              NomListe$ = RemoveString(Dossier$+DirectoryEntryName(#Repertoire),Racine$,0,1,1)
              If NomListe$ = MemeNomListe$
                AddGadgetItem(#List,-1,NomListe$,0,1)                
              Else 
                AddGadgetItem(#List,-1,NomListe$,0,0)
              EndIf 
              MemeNomListe$ = NomListe$
              SetGadgetItemData(#List,CountGadgetItems(#List)-1,Ligne)
             EndIf             
           Wend 
           CloseFile(#Fichier)         
           EndIf
         EndIf
       Wend
        FinishDirectory(#Repertoire)
        
      EndIf

EndProcedure

Procedure.s ParseDirectory(folder.s, id.l = 0)
  
  If Right(folder, 1) <> "\"
    folder + "\"
  EndIf
  
  If ExamineDirectory(id, folder, "*.*")
    
    While NextDirectoryEntry(id)
      
      If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
               
        
                
        If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
          AddGadgetItem(#Editor,-1,Chr(10)+folder + DirectoryEntryName(id))
          ;Debug folder + DirectoryEntryName(id)
          ParseDirectory(folder + DirectoryEntryName(id), id + 1)
        EndIf
        
      EndIf
      
    Wend
    
    FinishDirectory(id)
    
  EndIf
  
EndProcedure 

Procedure InitLogiciel()
  OpenPreferences("Init.log")

  PreferenceGroup("Fenetre Logiciel")
  Etat =  ReadPreferenceLong ("Etat_Fenetre_Logiciel",#PB_Window_Normal)
  If Etat = #PB_Window_Normal
    SetWindowState(#Fenetre,#PB_Window_Normal)
    ResizeWindow(#Fenetre,ReadPreferenceLong ("Fenetre_LogicielX",  0),ReadPreferenceLong ("Fenetre_LogicielY",  0),ReadPreferenceLong ("Fenetre_Logiciel_Largeur", 600),  ReadPreferenceLong ("Fenetre_Logiciel_Hauteur", 400))
  Else
    SetWindowState(#Fenetre,Etat)  
  EndIf           
   
  PreferenceGroup("Extention") 
   For Elt = 0 To 10
     AddGadgetItem(#Extention,-1,ReadPreferenceString("Extention"+Str(Elt),"*"))
   Next Elt 
   SetGadgetState(#Extention,ReadPreferenceLong("Element",0))
   
  PreferenceGroup("Dossier")  
   Dossier$ = ReadPreferenceString("Dossier",GetHomeDirectory())
   SetGadgetText(#Combo,Dossier$)
   SetGadgetState(#Check,ReadPreferenceLong("Sous_dossier",#PB_Checkbox_Unchecked))
   
ClosePreferences()
EndProcedure 

Procedure SauveInitLogiciel()
CreatePreferences("Init.log",#PB_Preference_GroupSeparator) 
 PreferenceGroup("Fenetre Logiciel")
 WritePreferenceLong ("Etat_Fenetre_Logiciel", GetWindowState(#Fenetre))
 If GetWindowState(#Fenetre) = #PB_Window_Normal 
    WritePreferenceLong ("Fenetre_LogicielX",  WindowX(#Fenetre ))
    WritePreferenceLong ("Fenetre_LogicielY",  WindowY(#Fenetre ))
    WritePreferenceLong ("Fenetre_Logiciel_Largeur", WindowWidth(#Fenetre))
    WritePreferenceLong ("Fenetre_Logiciel_Hauteur", WindowHeight(#Fenetre))
  EndIf 
  
  PreferenceGroup("Extention")  
  For Elt = 0 To 5
   WritePreferenceString("Extention"+Str(Elt), GetGadgetItemText(#Extention,Elt))
  Next Elt
   WritePreferenceLong ("Element",AncienElement)
  
 PreferenceGroup("Dossier")   
  WritePreferenceString("Dossier",Dossier$)
  WritePreferenceLong("Sous_dossier",GetGadgetState(#Check))
  
 ClosePreferences()
EndProcedure

If OpenWindow(#Fenetre,0,0,600,400,"Logiciel de recherche",#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  WindowBounds(#Fenetre,600,400,#PB_Ignore,#PB_Ignore )
  SmartWindowRefresh(#Fenetre, 1) 
  AddKeyboardShortcut(#Fenetre, #PB_Shortcut_Return,#Entrer)
  
  ProgressBarGadget(#Bar,430,3,170,20,0,2)
  
  ExplorerComboGadget(#Combo,0,0,250,20,Dossier$, #PB_Explorer_Editable)
  ButtonGadget(#Button1,250,0,30,20,"...")
  GadgetToolTip(#Button1,"Répertoire a choisir pour la recherche")
  
  TextGadget(#PB_Any,0,47,80,20,"Mot à chercher:")
  StringGadget(#String,80,47,120,20,"")
  GadgetToolTip(#String,"Mot qui va etre rechercher dans tous les fichiers")
  
  TextGadget(#PB_Any,0,25,80,20,"Extension fichier")
  ComboBoxGadget(#Extention,80,25,60,20,#PB_ComboBox_Editable)
  GadgetToolTip(#Extention,"Extention des fichiers qui vont etre ouvert pour la recherche")
  
  ButtonGadget(#Button2,202,47,60,20,"Recherche",#PB_Button_Default)
  
  TreeGadget(#List,0,70,265,330)
  SetGadgetColor(#list,#PB_Gadget_BackColor,$FFEAA5)
  GadgetToolTip(#List,"Liste de tous les fichiers trouver")
  
  ListIconGadget(#Editor,265,30,340,370,"Ligne",50,#PB_ListIcon_FullRowSelect )
  AddGadgetColumn(#Editor,1,"Texte",10000)
  GadgetToolTip(#Editor,"Visualisation du fichier sélectionner")
    
  CheckBoxGadget(#Check,290,0,140,20,"Inclure les sous-dossiers")
  
  InitLogiciel()
  HideWindow(#Fenetre,#False)
  
   Repeat
     Event = WaitWindowEvent() 
     Select Event
         Case #PB_Event_Gadget
           Select EventGadget()
               Case #Button1

       NouveauDossier$ = PathRequester("Rechercher dans le répertoire :",Dossier$)
       If NouveauDossier$
         Dossier$ = NouveauDossier$
        SetGadgetText(#Combo,Dossier$)
       EndIf 

 
     Case #Combo
        Dossier$ = GetGadgetText(#Combo)
   
            
      Case #Extention
         ElementExtention = GetGadgetState(#Extention)
        If ElementExtention <> -1
          AncienElement = ElementExtention         
         EndIf 
        Select EventType()
          Case  #PB_EventType_LostFocus
            If ElementExtention = -1
            Debug  AncienElement
              SetGadgetItemText(#Extention,AncienElement,GetGadgetText(#Extention))
            EndIf 
           EndSelect 
           
           
      Case  #Button2
        ClearGadgetItems(#List)
        ClearGadgetItems(#Editor)
        SetGadgetState(#Bar,0)
        Nom$ = GetGadgetText(#String)
        Racine$ = Dossier$
        Extention$ = GetGadgetText(#Extention)
         If GetGadgetState(#Check) = #PB_Checkbox_Checked
          Recherche(Dossier$)
          ParseDirectory(Dossier$)
          NbrDossier = CountGadgetItems(#Editor)
          SetGadgetAttribute(#Bar,#PB_ProgressBar_Maximum,NbrDossier)
          For ligne = 0 To NbrDossier
           Recherche(GetGadgetItemText(#Editor,ligne,1)+"\") 
           SetGadgetState(#Bar,ligne)
          Next ligne  
         Else  
          Recherche(Dossier$)
         EndIf 
    
     
      Case #List
        ClearGadgetItems(#Editor)
        Texte$=""
      If ReadFile(#FichierLecture,Racine$ + GetGadgetText(#List)) 
        While Eof(#FichierLecture)=0 
          NumeroLigne + 1
         AddGadgetItem(#Editor,-1,LSet(Str(NumeroLigne),6) +Chr(10)+ReplaceString(ReadString(#FichierLecture),Chr(9),Chr(32)))
       Wend 
      CloseFile(#FichierLecture) 
      Element =  GetGadgetItemData(#List,GetGadgetState(#List))
       SetGadgetItemColor(#Editor, Element, #PB_Gadget_BackColor ,$BFFFFF)
       SetGadgetState(#Editor,Element);,#PB_Tree_Selected)
     EndIf 
     NumeroLigne = 0
     
EndSelect
 
     Case  #PB_Event_SizeWindow 
      HauteurFenetre = WindowHeight(#Fenetre)
      LargeurFenetre = WindowWidth(#Fenetre )    
      ResizeGadget(#Editor,#PB_Ignore,#PB_Ignore,LargeurFenetre-260,HauteurFenetre-30)
      SetGadgetItemAttribute(#Editor,0,#PB_ListIcon_ColumnWidth,LargeurFenetre+10000,1)     
      ResizeGadget(#List,#PB_Ignore,#PB_Ignore,#PB_Ignore,HauteurFenetre-50)
      ResizeGadget(#Bar,#PB_Ignore,#PB_Ignore,LargeurFenetre-430,#PB_Ignore)
    
 
     
    Case  #PB_Event_Menu
      If EventMenu()=#Entrer
        ClearGadgetItems(#List)
        ClearGadgetItems(#Editor)
        SetGadgetState(#Bar,0)
        Nom$ = GetGadgetText(#String)
        Racine$ = Dossier$
        Extention$ = GetGadgetText(#Extention)
         If GetGadgetState(#Check) = #PB_Checkbox_Checked
          Recherche(Dossier$)
          ParseDirectory(Dossier$)
          NbrDossier = CountGadgetItems(#Editor)
          SetGadgetAttribute(#Bar,#PB_ProgressBar_Maximum,NbrDossier)
          For ligne = 0 To NbrDossier
           Recherche(GetGadgetItemText(#Editor,ligne,1)+"\") 
           SetGadgetState(#Bar,ligne)
          Next ligne  
         Else  
          Recherche(Dossier$)
         EndIf 
       EndIf 
      

    EndSelect

  Until Event = #PB_Event_CloseWindow

  SauveInitLogiciel()
EndIf

End  
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Recherche dans fichier

Message par Backup »

la recherche est recursive dans les dossiers ?? :)

il manquerai peut etre un temoin d'activité ... sur beaucoup de recherche , on ne sait pas ce qui se passe .... :)
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Re: Recherche dans fichier

Message par Noos88 »

Possible, à mettre au point mais plus facile a dire qu'a faire.
J'ai déjà essayer mais ça n'as jamais été très concluent.
Mais si vous avez des idée faite vous plaisir a modifier le code
Répondre