non non !! une recherche dans les fichiers

on peux voir à limiter les endroits de recherche pour aller plus vite, par exemple en ne recherchant que dans le nom des procédures
En fait, c'est peut être pas mal non plus de faire un index des procédures, et de montrer le fichier qui la contient quand tu cliques sur le nom.
Dans mon projet courant j'ai fait une fonction de recherche par mot clé. Il faut la modifier pour l'utiliser bien sur
[edit] : j'ai changé le code pour mettre un exemple ça parle mieux
les sources de la recherche sont dans la liste ligne()
(ici ce serais les différents nom des procédures, ou bien chaque ligne du fichier en cours de recherche)
et j'affiche les résultats dans le gadget 3
copiez un texte dans l’éditeur, puis tapez un ou plusieurs mots clé dans la stringgadget en dessous
Code : Tout sélectionner
;{ structure et variables
Structure recherche
nom.s
point.l
index_choix.l
EndStructure
Global NewList resultat.recherche()
Global NewList ligne.s()
;}
;{ procedure
Procedure Recherche(mot$)
ClearList(resultat())
nb = CountString(mot$, " ") + 1
ForEach ligne()
nb_point = 0
nom$ = ligne()
AddElement(resultat())
resultat()\nom = nom$
resultat()\index_choix = ListIndex(ligne()) ; sert pour retrouver les sources depuis resultat
If nom$ = mot$
nb_point = Len(mot$)
EndIf
For a = 1 To nb
parti$ = LCase(StringField(mot$, a, " "))
If FindString(LCase(nom$), parti$ + " ") Or FindString(LCase(nom$), " " + parti$)
nb_point = nb_point + Len(parti$) * 2
ElseIf FindString(LCase(nom$), parti$)
nb_point = nb_point + Len(parti$)
EndIf
Next
resultat()\point = nb_point
Next
SortStructuredList(resultat(), #PB_Sort_Descending, OffsetOf(recherche\point), #PB_Sort_Long)
ClearGadgetItems(3)
ForEach resultat()
If resultat()\point > 0
AddGadgetItem(3, -1, resultat()\nom)
EndIf
; Debug resultat()\nom + " : " + Str(resultat()\point)
Next
EndProcedure
;}
;{ fenetre
If OpenWindow(0, 0, 0, 800, 800, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 5, 5, 790, 500)
StringGadget(1, 5, 510, 700, 20, "")
ButtonGadget(2, 710, 510, 80, 20, "GO !")
ListViewGadget(3, 5, 535, 790, 800 - 540)
EndIf
AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
;}
;{ boucle principale
Repeat
event = WaitWindowEvent()
;{ evenement bouton ou [return]
If (event = #PB_Event_Gadget And EventGadget() = 2) Or (event = #PB_Event_Menu And EventMenu() = 0)
nb = CountGadgetItems(0)
ClearList(ligne())
For a = 0 To nb - 1
AddElement(ligne())
ligne() = GetGadgetItemText(0, a)
Next
Recherche(GetGadgetText(1))
EndIf
;}
Until event = #PB_Event_CloseWindow
;}
End