Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Ven 30 Mar 2018 - 15:43 | |
| Bon, j'ai remplacé l'agorithme de recherche par une approche par dichotomie, en chargeant le fichier dans une StringList triée ASCII (mode 2 dans CreateStringList). Le chargement prend un peu de temps, mais c'est normal - le fichier est trié à ce moment précis. Mais c'est une opération que tu fais normalement au démarrage, une fois. A partir de là, la recherche est ultra-rapide. Pour le texte de 100 mots, voici le résultat: Voici le programme Panoramic: - Code:
-
' test_SearchMultipleStringsInTextFile.bas
dim res%, ticks, fichier$, rec$
dim t$
t$ = "El murciélago de herradura de Willard fue descubierto en la República " t$ = t$ + "Democrática del Congo en 2013 y lo más probable es que se extinga en unas " t$ = t$ + "décadas . Con él , servicios prestados hasta la mitad de las especies endémicas del corazón de " t$ = t$ + "África estarán amenazadas en los próximos 50 años . Hasta ahora tenían " t$ = t$ + "que lidiar con el avance de los humanos , su agricultura y su ganadería , " t$ = t$ + "que les iban comiendo su territorio . Ahora el cambio climático ha tomado " t$ = t$ + "el relevo y les arrebatará hasta dos tercios del que les queda . A algunos " t$ = t$ + "animales , como este quiróptero , los dejará literalmente sin espacio ."
dim interdit$:interdit$="*a*con*de*del*des*dos*el*en*este*la*las*le*les*lo*los*que*se*sin*su*un*une*y*" fichier$="formes_verbales_espagnol_français_avec_complement.txt" dim nombre%:nombre%=3 dim marqueur$:marqueur$=" #"
combo 100 combo 101 : left 101,width(100)+10 memo 102 : top 102,height(100)+10 : width 102,300 display
dll_on "kgf"
' AvecLectureDirecte() AvecStringList() message "fin"
end
sub AvecLectureDirecte() ticks=number_ticks res%=dll_call6("SearchMultipleStringsInTextFile",adr(t$),adr(fichier$),handle(100),adr(interdit$),nombre%,adr(marqueur$)) item_add 102,"Lecture directe: "+ str$(number_ticks-ticks)+" ("+str$(res%)+" dans la DLL)" item_add 102," "+str$(count(100))+" lignes trouvées" display text 100,item_read$(100,1) end_sub
sub AvecStringList() dim_local SL% SL% = 1 item_add 102,"Chargement de la StringList..." display res% = dll_call2("CreateStringList",SL%, 2) res% = dll_call2("LoadStringList",SL%,adr(fichier$)) ' fichier$ = "new.txt" ' res% = dll_call2("SaveStringList",SL%,adr(fichier$)) item_add 102,"Stringlist chargé." display
ticks=number_ticks res%=dll_call6("SearchMultipleStringsInStringList",adr(t$),SL%,handle(101),adr(interdit$),nombre%,adr(marqueur$)) item_add 102,"StringList: "+ str$(number_ticks-ticks)+" ("+str$(res%)+" dans la DLL)" item_add 102," "+str$(count(101))+" lignes trouvées" display text 101,item_read$(101,1) if count(101)>0 rec$ = string$(255," ") res% = dll_call3("ReadStringList",SL%,val(text$(101)),adr(rec$)) item_add 102,text$(101)+" = "+trim$(rec$) end_if res% = dll_call1("DeleteStringList",SL%) end_sub
16 cycles pour 100 mots - ça va ? | |
|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Ven 30 Mar 2018 - 17:14 | |
| Bonjour.
Alors là bravo !
En prenant un nombre de mots successifs égal à 2, j'obtiens un nombre de cycle de zéro !
La recherche est donc ultra-rapide, on ne pourrait pas mieux faire.
Je te remercie beaucoup d'avoir consacré tout ce temps à la création d'une seule fonction, et rien que pour moi.
Une petite question: est-il possible de remplacer la StringList par un objet Dlist ? | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Ven 30 Mar 2018 - 18:16 | |
| - Citation :
- Une petite question: est-il possible de remplacer la StringList par un objet Dlist ?
Non, malheureusement pas. Bien que, techniquement, ce soit le même objet de façon interne, je n'ai aucun accès aux données d'un DLIST à partir de la DLL. Un problème d'incoimpatibilité des gestionnaires de mémoire entre celui de la DLL et celui de Panoramic. Ceci était d'ailleurs la raison pour laquelle j'ai créé l'objet StringList, à l'époque. | |
|
Contenu sponsorisé
| Sujet: Re: Demande de fonction spécifique avec KGF. | |
| |
|