Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Problème avec un objet StringList (pour Klaus). | |
| | |
Auteur | Message |
---|
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Lun 22 Avr 2013 - 18:04 | |
| Bonjour.
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
res% indique 26005 au lieu de 26007 !
Je ne comprends pas la raison de ce décalage, le fichier étant bien trié, après vérification.
Merci de ton aide.
26005 né;adjms;nacido;;venu au monde 26006 né;adjms;nato;;de naissance : fig 26007 ne;adv;no;;négation
| |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Lun 22 Avr 2013 - 18:06 | |
| - pan59 a écrit:
- Bonjour.
Je rencontre un problème avec le code suivant:
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",9,adr(element$),adr(temporaire$))
element$ étant égal à ne;
res% indique 26005 au lieu de 26007 !
Je ne comprends pas la raison de ce décalage, le fichier étant bien trié, après vérification.
Merci de ton aide.
26005 né;adjms;nacido;;venu au monde 26006 né;adjms;nato;;de naissance : fig 26007 ne;adv;no;;négation
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Lun 22 Avr 2013 - 18:49 | |
| Ben... pour moi, "ne;" est AVANT "né;" !
La liste est retriée en mémoire, au moment du chargement, et la position dans le fichier n'est donc pas significative. Si tu lis l'élément 26005, qu'est-ce qu'il te retourne ? | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Lun 22 Avr 2013 - 20:24 | |
| Bonsoir Klaus.
Voici le code utilisé pour le chargement du dictionnaire, avant son utilisation.
Si cela peut t'aider.
Merci de la suite donnée. - Code:
-
' Contient le dico. caption 0,"Chargement du dictionnaire..." dlist 999 sort_on 999
fichier$="dico_"+langue_source$+"_"+langue_cible$+".txt" file_load 999,fichier$ ' Enregistrement du dico trié. file_save 999,fichier$
delete 999
' Création d'objets StringList pour des raisons de performance. res% = dll_call2("CreateStringList",9,1) res% = dll_call2("LoadStringList",9,adr(fichier$)) nombre_mots%=dll_call1("StringListItemCount",9)
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Lun 22 Avr 2013 - 21:06 | |
| Eh bien justement, les DLIST ne sont pas des STRINGLIST ! L'ordre de tri est différent. Dans les StringList, l'ordre de tri est censé être le code ASCII, et donc "é" est bien plus grand que "e" ! | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 8:25 | |
| Bonjour.
Voici un exemple de programme complet. L'erreur persiste, je n'obtiens pas le n° correct de l'élément !
Merci de ton aide Klaus. - Code:
-
dim element$, fichier$, rec$, temporaire$ dim numero_objet_liste%, res%, x%
dlist 9 sort_on 9
fichier$="dico_français_espagnol.txt" file_load 9,fichier$ ' Enregistrement du dico trié. file_save 9,fichier$
delete 9
dll_on "kgf.dll"
' Création d'objets StringList pour des raisons de performance. res% = dll_call2("CreateStringList",9,1) res% = dll_call2("LoadStringList",9,adr(fichier$))
' 26005 né;adjms;nacido;;venu au monde ' 26006 né;adjms;nato;;de naissance : fig ' 26007 ne;adv;no;;négation
element$="ne;" chercher(element$,9) ' Donne 26005 ?? x%=res%
rec$ = string$(255," ") res% = dll_call3("ReadStringList",9,x%,adr(rec$)) message str$(x%)+chr$(10)+chr$(13)+trim$(rec$)
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 9:20 | |
| Exécute-le comme ça et regarde ce que les messages supplémentaires disent: - Code:
-
dim element$, fichier$, rec$, temporaire$ dim numero_objet_liste%, res%, x%
dlist 9 sort_on 9
fichier$="dico_français_espagnol.txt" file_load 9,fichier$ ' Enregistrement du dico trié. file_save 9,fichier$
delete 9
dll_on "kgf.dll"
' Création d'objets StringList pour des raisons de performance. res% = dll_call2("CreateStringList",9,1) res% = dll_call2("LoadStringList",9,adr(fichier$))
' 26005 né;adjms;nacido;;venu au monde ' 26006 né;adjms;nato;;de naissance : fig ' 26007 ne;adv;no;;négation
ReadStringList(N%,26005) message "26005: "+ReadStringList$ ReadStringList(N%,26006) message "26006: "+ReadStringList$ ReadStringList(N%,26007) message "26007: "+ReadStringList$
element$="ne;" chercher(element$,9) ' Donne 26005 ?? x%=res%
rec$ = string$(255," ") res% = dll_call3("ReadStringList",9,x%,adr(rec$)) message str$(x%)+chr$(10)+chr$(13)+trim$(rec$)
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 10:08 | |
|
Bonjour.
Voici donc le code modifié.
Les valeurs sont bien lues correctement lorsqu'on indique leur index dans la recherche, avec "ReadStringList".
Par contre la commande "SearchStringList" fonctionne mal, suite à un problème d'accentuation.
Dans ce cas, l'index étant le résultat d'un calcul, je ne peux dopnc pas me fier au résultat !
- Code:
-
dim element$, fichier$, rec$, ReadStringList$, temporaire$ dim numero_objet_liste%, res%, x%
dlist 9 sort_on 9
fichier$="dico_français_espagnol.txt" file_load 9,fichier$ ' Enregistrement du dico trié. file_save 9,fichier$
delete 9
dll_on "kgf.dll"
' Création d'objets StringList pour des raisons de performance. res% = dll_call2("CreateStringList",9,1) res% = dll_call2("LoadStringList",9,adr(fichier$))
' 26005 né;adjms;nacido;;venu au monde ' 26006 né;adjms;nato;;de naissance : fig ' 26007 ne;adv;no;;négation
ReadStringList$ = string$(255," ") res% = dll_call3("ReadStringList",9,26005,adr(ReadStringList$)) message "26005: "+trim$(ReadStringList$) ReadStringList$= string$(255," ") res% = dll_call3("ReadStringList",9,26006,adr(ReadStringList$)) message "26006: "+trim$(ReadStringList$) ReadStringList$ = string$(255," ") res% = dll_call3("ReadStringList",9,26007,adr(ReadStringList$)) message "26007: "+trim$(ReadStringList$)
element$="ne;" chercher(element$,9) ' Donne 26005 ?? x%=res%
rec$ = string$(255," ") res% = dll_call3("ReadStringList",9,x%,adr(rec$)) message str$(x%)+chr$(10)+chr$(13)+trim$(rec$)
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 11:21 | |
| Je vois. Je suis en train de regarder ça. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 12:19 | |
| J'ai résolu le problème, par l'ajout d'un nouveau mode de tri à CreateStringList. Maintenant, tu l'utilises comme ça: - Code:
-
res% = dll_call2("CreateStringList",9,2) la valeur 2 veut dire "tri en mode Ascii", alors qu ela valeur "1" veut dire "tri en mode Windows". Et, remplace - Code:
-
dlist 9 sort_on 9
fichier$="dico_français_espagnol.txt" file_load 9,fichier$ ' Enregistrement du dico trié. file_save 9,fichier$
delete 9
par - Code:
-
fichier$="dico_français_espagnol.txt"
Le tri est systématiquement fait par - Code:
-
res% = dll_call2("LoadStringList",9,adr(fichier$)) ce n'est pas la peine de le faire 2 fois - c'est le double du temps ! Donc, après les modifs, recharge KGF.dll et KGF.chm ! | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 17:21 | |
| Bonjour.
Voici le code modifié.
La valeur retournée est 4, soit une valeur incorrecte.
Au secours Klaus !
Pourrais-tu regarder ce qui m'a échappé ?
Par contre, si je remplace "à;" par "ne;" tout fonctionne parfaitement.
Merci de ton aide.
Le dictionnaire complet se trouve sur mon webdav.
http://www.mydrive.ch/ Identifiant: pierre59 Mot de passe: panoramic123
- Code:
-
dim element$, fichier$, rec$, temporaire$ dim numero_objet_liste%, res%, x%
fichier$="dico_français_espagnol.txt"
dll_on "kgf.dll"
res% = dll_call2("CreateStringList",1,2) res% = dll_call2("LoadStringList",1,adr(fichier$))
element$="à;" chercher(element$,1) x%=res%
rec$ = string$(255," ") res% = dll_call3("ReadStringList",1,x%,adr(rec$)) message str$(x%)+chr$(10)+chr$(13)+trim$(rec$)
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 19:24 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mar 23 Avr 2013 - 23:56 | |
| Bon. J'ai galéré longtemps, avant de comprendre. Cela vient du fait que "à;" n'existe pas dans le fichier comme début de ligne ! La fonction SearchStringList retourne alors le numéro de ligne devant laquelle le critère devrait inséré (et donc le numéro de ligne qu'il devrait avoir après insertion). Mais cela ne signifie pas que la ligne est trouvée. Il aurait fallu systématiquement comparer si le début de la ligne lue est identique au critère recherché. Je reconnais que c'est un comportement lourd et inapproprié. J'ai donc mis en ligne la version 2.18 qui corrige ce problème, et la doc est complétée à ce niveau. Maintenant, la fonction retourne: n>0 = indice le la ligne trouvée 0 = erreur n<0 = valeur négative de la ligne devant laquelle le critère devrait être inséré Il suffit donc de tester la variable res% après l'appel de SearchStringList. Si elle est inférieure à zéro, c'est une lecture par clé partielle. Et le résultat n'est significatif que si left$(temporaire$,len(element$))=element$ ! Sinon, dans ce cas, le terme n'existe pas dans la liste. D'ailleurs, ceci est frai quelque soit le mode de tri (1 ou 2). Voici le petit code adapté à cela: - Code:
-
dim element$, fichier$, rec$, temporaire$, fichierbis$ dim numero_objet_liste%, res%, x%
fichier$="dico_français_espagnol.txt" fichierbis$="dico_français_espagnol_bis.txt"
dll_on "kgf.dll"
res% = dll_call2("CreateStringList",1,1) : ' ou 1,2) res% = dll_call2("LoadStringList",1,adr(fichier$)) message "Nombre = "+str$(res%) res% = dll_call2("SaveStringList",1,adr(fichierbis$))
element$="à;" chercher(element$,1) x%=res%
message str$(x%)+chr$(10)+chr$(13)+trim$(temporaire$) if x%<0 if left$(temporaire$,len(element$))<>element$ then message "Non trouvé" end_if
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 8:33 | |
| Bonjour.
Merci Klaus d'avoir approfondi le problème à la recherche d'une solution.
Le code suivant marche parfaitement pour "à;".
Mais, si je recherche "ne;" il retourne la ligne 26005, qui correspond à "né;adjms;nacido;;venu au monde" et non la bonne ligne n° 26007.
Pourrais-tu regarder d'où vient le décalage, stp ?
Merci encore de ton aide. - Code:
-
dim element$, fichier$, rec$, temporaire$, fichierbis$ dim numero_objet_liste%, res%, x%
fichier$="dico_français_espagnol.txt"
dll_on "kgf.dll"
res% = dll_call2("CreateStringList",1,1) : ' ou 1,2) res% = dll_call2("LoadStringList",1,adr(fichier$))
element$="ne;" chercher(element$,1) x%=res%
message str$(x%)+chr$(10)+chr$(13)+trim$(temporaire$) if x%<0 if left$(temporaire$,len(element$))<>element$ then message "Non trouvé" end_if
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 11:44 | |
| Je regarde ça...
EDIT
J'ai trouvé le fond du problème. Je suis en train de corriger... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 19:10 | |
| C'est corrigé. Le problème était double, en réalité: D'une part, au chargement du fichier, le tri ne se faisait pas toujours. Il y avait donc quelque fois un ordre pas forcément correct selon le code Ascii. D'autre part, la recherche se faisait systématiquement selon le mode Windows qui utilise l'ordre ANSI et non l'ordre ASCII. D'où les erreurs de recherche. J'ai donc corrigé le problème du tri au chargement, et pour le mode de tri 2, j'ai écrit un tri personnalisé par dichotomie (recherche binaire). Et là, c'est bon. Donc, pour ton problème, recharge la DLL (version 2.19) et utilise le mode de tri 2. Voici le morceau de code adapté comme il faut: - Code:
-
dim element$, fichier$, rec$, temporaire$, fichierbis$ dim numero_objet_liste%, res%, x%
fichier$="dico_français_espagnol.txt" ' fichier$="dico_français_espagnol_ter.txt" fichierbis$="dico_français_espagnol_bis.txt"
dll_on "kgf.dll"
res% = dll_call2("CreateStringList",1,2) : ' mode 2 pour le tri ASCII ! res% = dll_call2("LoadStringList",1,adr(fichier$)) ' res% = dll_call2("SaveStringList",1,adr(fichierbis$))
' *** activer une des 4 lignes suivantes: ' element$="ne;" ' element$="né;" element$="à;" ' element$="a;" chercher(element$,1) x%=res%
message str$(x%)+chr$(10)+chr$(13)+trim$(temporaire$) if x%<0 if left$(temporaire$,len(element$))<>element$ then message "Non trouvé" end_if
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$))
end_sub
| |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 19:49 | |
| Bonsoir.
Alors là, bravo.
Un grand merci Klaus pour la résolution du problème.
En fait, l'option "SaveStringList" était également indispensable, afin d'obtenir le même ordre de tri.
Bonne soirée.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 21:37 | |
| Heureux que ça marche enfin avec ton logiciel, et je présente mes excuses pour ce délai anormalement long pour la correction de ce problème. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 22:05 | |
| Et en plus il s'excuse... ce type est fou... génial, on l'adore, mais il est fou ... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Mer 24 Avr 2013 - 23:59 | |
| Il est dit quelque part que les gens géniaux sont un peu … heu … géniaux quoi ?! | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Jeu 25 Avr 2013 - 18:37 | |
| Bonsoir.
Je rencontre à nouveau un problème de décalage.
Le résultat affiché est de 20096 au lieu de 20098.
Merci Klaus de m'aider à la résolution du problème.
Peut-être ai-je omis quelque chose.
Pour info, j'ai bien téléchargé la dernière version de kgf.dll. - Code:
-
dim element$, fichier$, rec$, temporaire$ dim numero_objet_liste%, res%, x%
fichier$="dico_français_espagnol.txt"
dll_on "kgf.dll"
' mode 2 pour le tri ASCII. res% = dll_call2("CreateStringList",1,2) res% = dll_call2("LoadStringList",1,adr(fichier$)) ' Obligatoire, afin d'obtenir le même ordre de tri. res% = dll_call2("SaveStringList",1,adr(fichier$))
element$="je;" chercher(element$,1) x%=res%
message str$(x%)+chr$(10)+chr$(13)+trim$(temporaire$) if x%<0 if left$(temporaire$,len(element$))<>element$ then message "Non trouvé" end_if
dll_off
end
sub chercher(element$, numero_objet_liste%)
temporaire$ = string$(255," ") res% = dll_call3("SearchStringList",numero_objet_liste%,adr(element$),adr(temporaire$)) res%=abs(res%) end_sub
Dernière édition par pan59 le Jeu 25 Avr 2013 - 19:53, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Jeu 25 Avr 2013 - 19:36 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Ven 26 Avr 2013 - 10:57 | |
| C'est corrigé. Recharge simplement KGF.dll. C'était bien un bug au niveau de l'algorithme de recherche. | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème avec un objet StringList (pour Klaus). Ven 26 Avr 2013 - 11:21 | |
| Bonjour.
Lorsque je recherche "ne;" le décalage subsiste toujours, je n'obtiens pas la bonne ligne du dictionnaire.
Et j'obtiens le message d'erreur suivant:
"Exception EStringListError in module kgf.dll at 0001A291."
Merci encore de ton aide pour la suite, car mon programme dépend entièrement de la DLL.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec un objet StringList (pour Klaus). Ven 26 Avr 2013 - 11:48 | |
| Bizarre. Recharge et revérifie - voici ce que ça affiche chez moi: Cela me semble correct, non ? | |
| | | Contenu sponsorisé
| Sujet: Re: Problème avec un objet StringList (pour Klaus). | |
| |
| | | | Problème avec un objet StringList (pour Klaus). | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |