| Commande SearchStringList. | |
|
|
Auteur | Message |
---|
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Commande SearchStringList. Lun 29 Juin 2020 - 15:50 | |
| Bonjour.
@Klaus.
Je me bats depuis plusieurs jours avec cette fonction, afin d'améliorer la vitesse d'exécution d'une routine de recherche.
Mais le problème malheureusement vient des nombreux appels à KGF, qui doit contenir maintenant plus de 700 fonctions ! Et je n'entrevois pas de solution au problème.
Pourrais-tu regarder de près cette fonction, afin de l'optimiser peut-être. Merci d'avance. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Commande SearchStringList. Lun 29 Juin 2020 - 18:06 | |
| Bon, je vais me plonger dedans... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Commande SearchStringList. Lun 29 Juin 2020 - 18:16 | |
| Question: est-ce que ta StringList est triée ou non ? Si elle est triée, selon quel mode ? Ce sont deux traitements complètement distincts, et ce serait important de savoir dans quelle branche il faut chercher. | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Commande SearchStringList. Lun 29 Juin 2020 - 18:26 | |
| Voici les méthodes que j'utilise: Création de la StringList. - Code:
-
sub CreateLoadStringList(n%,mode%,file$) ' On peut numéroter des StringList de 1 à 20 uniquement. ' Toujours utiliser cette routine. ' mode% indique si la liste doit être triée. ' 2 = la liste est triée en mode ASCII. ' 1 = la liste est triée en mode Windows. ' 0 = la liste n'est pas triée. if n%>20 dlist n%:file_load n%,file$ else res%=dll_call2("CreateStringList",n%,mode%) dll_file$=file$ if res%=0 then res%=dll_call2("LoadStringList",n%,adr(dll_file$)) end_if end_sub Exemple d'appel. - Code:
-
f$="fichiers\formes_verbales_"+langue_source$+"_"+langue_cible$+"_avec_complement.txt" CreateLoadStringList(2,0,f$) J'espère que cela pourra t'aider. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Commande SearchStringList. Lun 29 Juin 2020 - 18:38 | |
| Oui. Je constate que ta liste n'est pas triée (le deuxième paramètre de ta procédure CreateLoadStringList est passé comme 0.
Or, dans ce cas, il faut parcourir la liste entière depuis le début jusqu'à ce que la cible soit trouvée, ou jusqu'à la fin si la cible n'est pas trouvé. Egt connaissant la longueur de tes listes, je suis certain que ça prend un certain temps.
Es-tu sûr de ne pas pouvoir fournir une liste triée en mode 2 (Ascii) ? C'est la recherche la plus rapide (par dichotomie). | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Commande SearchStringList. Lun 29 Juin 2020 - 20:29 | |
| Bonsoir. Voilà, tout est dit dans le code suivant: - Code:
-
dll_on "kgf"
dim debut, e$, f$, fin, k%, n%, mode%, res%, te$
te$=string$(100," ")
f$="fichiers\formes_verbales_espagnol_français_avec_complement.txt" CreateLoadStringList(2,1,f$)
debut=number_ticks e$="sigue siendo#" for k%=1 to 100 ' sigue siendo#551491;1;3 ' 678220 res%=dll_call3("SearchStringList",2,adr(e$),adr(te$)) next k% caption 0,trim$(te$) fin=number_ticks ' 6.6 sec si mode%=0 ' 0.0 sec si mode%=1 message "ok: "+str$(fin-debut)
end
sub CreateLoadStringList(n%,mode%,file$) ' On peut numéroter des StringList de 1 à 20 uniquement. ' Toujours utiliser cette routine. ' mode% indique si la liste doit être triée. ' 2 = la liste est triée en mode ASCII. ' 1 = la liste est triée en mode Windows. ' 0 = la liste n'est pas triée.
res%=dll_call2("CreateStringList",n%,mode%) if res%=0 then res%=dll_call2("LoadStringList",n%,adr(file$)) end_sub | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Commande SearchStringList. Lun 29 Juin 2020 - 20:37 | |
| Eh oui... toute la différence est là. La recherche par dichotomie dans une liste triée est redoutablement efficace.
Alors, sujet résolu ? | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Commande SearchStringList. Lun 29 Juin 2020 - 20:38 | |
| Oui, le problème semble résolu.
Mais parfois, j'obtiens un res% négatif ?
Ah, je viens de consulter la doc à ce sujet, qui dit ceci:
Si la liste est triée et si une clé partielle est spécifiée, alors la fonction retourne une valeur négative qui représente l'indice devant lequel il faudrait insérer le critère pour respecter l'ordre de tri.
| |
|
| |
Contenu sponsorisé
| Sujet: Re: Commande SearchStringList. | |
| |
|
| |
| Commande SearchStringList. | |
|