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 les StringList. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec les StringList. Dim 19 Avr 2015 - 14:33 | |
| Bonjour. @Klaus. Je rencontre un problème avec la recherche d'éléments dans une StringList. - Code:
-
dim element$, fichier$, res%, temporaire$
dll_on "kgf.dll"
fichier$="test.txt" res%=dll_call2("CreateStringList",1,1) if res%=0 then res%=dll_call2("LoadStringList",1,adr(fichier$))
list 2 sort_on 2 file_load 2,fichier$
element$="acheté#"
temporaire$=string$(255," ") res%=abs(dll_call3("SearchStringList",1,adr(element$),adr(temporaire$))) message str$(res%)+" "+trim$(temporaire$)
' SearchStringList fournit la ligne où devrait apparaître element$. ' Ex: 'jolie;' -> fournit la ligne 'joliment;'. if left$(temporaire$,len(element$))<>element$ then res%=0
' message trim$(temporaire$)+" "+str$(res%)
res%=dll_call3("SearchListBox",handle(2),0,adr(element$)) message str$(res%)+" "+item_read$(2,res%)
dll_off terminate Voici le contenu du fichier 'test.txt':achetas#929;3;2 achètas#929;6;2 achetâtes#929;3;5 achète#929;1;1 achète#929;1;3 achete#929;2;2 acheté#929;9;1 acheté#929;9;2 acheté#929;9;3 acheté#929;9;4 acheté#929;9;5 acheté#929;9;6 Le résultat donné par SearchStringList n'est pas correct, contrairement à celui de l'objet List. Merci de ton aide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec les StringList. Dim 19 Avr 2015 - 17:13 | |
| Crée ta StringList de la manière suivante: - Code:
-
res%=dll_call2("CreateStringList",1,2) et il trouvera correctement "acheté". Bien que pas dans la même position que dans l'objet LIST, le bon élément est bel et bien trouvé. | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec les StringList. Dim 19 Avr 2015 - 18:45 | |
| Bonsoir.
OK, merci Klaus.
Mais maintenant, j'obtiens l'erreur 'EStringListError' dans le module kgf.dll !!
Merci de ton aide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec les StringList. Dim 19 Avr 2015 - 19:14 | |
| Euh... avec le code que tu as posté ci-dessus ? Pas chez moi ! J'ai simplement changé le dernier paramètre de la fonction CreateStringList ainsi que le nom du fichier (car test.txt existe chez moi...): - Code:
-
dim element$, fichier$, res%, temporaire$
dll_on "kgf.dll"
fichier$="test_pedro.txt" res%=dll_call2("CreateStringList",1,2) : ' <============= modification ici ! if res%=0 then res%=dll_call2("LoadStringList",1,adr(fichier$))
list 2 sort_on 2 file_load 2,fichier$
element$="acheté#"
temporaire$=string$(255," ") res%=abs(dll_call3("SearchStringList",1,adr(element$),adr(temporaire$))) message str$(res%)+" "+trim$(temporaire$)
' SearchStringList fournit la ligne où devrait apparaître element$. ' Ex: 'jolie;' -> fournit la ligne 'joliment;'. if left$(temporaire$,len(element$))<>element$ then res%=0
' message trim$(temporaire$)+" "+str$(res%)
res%=dll_call3("SearchListBox",handle(2),0,adr(element$)) message str$(res%)+" "+item_read$(2,res%)
dll_off terminate Tout marche bien... | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec les StringList. Dim 19 Avr 2015 - 19:30 | |
| Bonsoir.
Non, l'erreur apparaît dans mon programme principal, en utilisant le même code !!
Merci de ton aide.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec les StringList. Dim 19 Avr 2015 - 20:25 | |
| Voici les cas où une telle erreur se produit: - Citation :
1. There is not enough memory to expand the list. 2. The list tried to grow beyond its maximal capacity. 3. A non-existent element of the list was referenced. (i.e. the list index was out of bounds) 4. An attempt was made to add a duplicate entry to a TStringList when TStringList.Duplicates is False.
Je pense qu'on peut exclure les cas 1 et 2. C'est probablement le cas 3 (tentative d'accès à un élément non existant (indice 0 ou plus grand que le nombre d'enregistrements dans la StringList). Et, la doc dit: - Citation :
- The default value for the Duplicates property is dupIgnore
Et c'est ce qui se passe: je ne spécifie rien de particulier, à la création de la StringList, sur le comportement en cas de doublon. Donc, tout doublon est ignoré. Donc, le cas 4 ne peut se produire, puisqu'il n'y aura pas de doublons. En résumé, c'est le cas 3: tu accèdes un enregistrement inexistant, ou tu passes un indexe 0... Et c'est donc probablement la fonction ReadStringList qui provoque cette erreur, ou DeleteStringListItem. A moins que tu utilises InsertStringListItem sur une liste triée ce qui est interdit - il faut utiliser AddStringListItem pour ajouter un élément à une StringList triée. La fonction ReplaceStringListItem est également problématique sur une liste triée - il vaut mieux supprimer par DeleteStringListItem, puis ajouter par AddStringListItem (comme en Panoramic, d'ailleurs !). La prochaine fois, essaie de localiser l'endroit où se produit l'erreur (en plaçant des commandes MESSAGE à des endroits stratégiques du code). Lorsque tu as trouvé l'endroit en question, affiche par MESSAGE l'ensemble des paramètres donnés à la fonction, juste avant d'appeler celle-ci. Ainsi, tu auras une vue nettement plus précise que simplement "ça ne marche pas"... | |
| | | Contenu sponsorisé
| Sujet: Re: Problème avec les StringList. | |
| |
| | | | Problème avec les StringList. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |