Question de pointeur ...
Publié : jeu. 11/nov./2004 11:05
sur pureArea j'ai trouvé un code qui me permt de trié une liste chainé
je joints le code trouvé
ce que je voudrais faire c'est utilisé une structure plus complexe et choisir ma methode de trie
dans le code on trouve
compare=CompareMemoryString(*Name,@var()\s,1)
et je voudrais pouvoir passer dans la procedure n'importe quel variable de la strucure ... au lieu de @var()
est ce que si a la procedure
find_var(*Name.Byte)
je la transforme en
find_var(*Name.Byte,chxtrie.l)
et que la ligne je la modifie en
compare=CompareMemoryString(*Name,chxtrie,1)
il me suffit de faire alors un
find_var(@a$,@var()\titre) ou find_var(@a$,@var()\numero)
pour savoir comment je veux trier ?
est ce que c'est correct ?
et si je veux que ma procedure fonctionne avec des liste différente que faut il que je modifie ?
Je fais des essaies mais ça plante tout le temps...j'ai pas encore bien saisie l'utilisation des * et des @
je joints le code trouvé
ce que je voudrais faire c'est utilisé une structure plus complexe et choisir ma methode de trie
dans le code on trouve
compare=CompareMemoryString(*Name,@var()\s,1)
et je voudrais pouvoir passer dans la procedure n'importe quel variable de la strucure ... au lieu de @var()
est ce que si a la procedure
find_var(*Name.Byte)
je la transforme en
find_var(*Name.Byte,chxtrie.l)
et que la ligne je la modifie en
compare=CompareMemoryString(*Name,chxtrie,1)
il me suffit de faire alors un
find_var(@a$,@var()\titre) ou find_var(@a$,@var()\numero)
pour savoir comment je veux trier ?
est ce que c'est correct ?
et si je veux que ma procedure fonctionne avec des liste différente que faut il que je modifie ?
Je fais des essaies mais ça plante tout le temps...j'ai pas encore bien saisie l'utilisation des * et des @
Code : Tout sélectionner
; English forum: http://purebasic.myforums.net/viewtopic.php?t=7503&highlight=
; Author: GPI
; Date: 14. September 2003
NewList var.String()
Procedure find_var(*Name.Byte)
ResetList(var())
half=CountList(var())>>1
If half
SelectElement(var(),half)
pos=half
quit=0
Else
pos=0
If NextElement(var())=0
quit=2
Else
quit=0
EndIf
EndIf
oldcompare=0
While quit=0
compare=CompareMemoryString(*Name,@var()\s,1)
If half
Select compare
Case -1:half>>1:pos-half:SelectElement(var(),pos)
Case 0:quit=1
Case 1:half>>1:pos+half:SelectElement(var(),pos)
EndSelect
Else
If compare=0
quit=1
ElseIf compare=oldcompare Or oldcompare=0
oldcompare=compare
If compare=-1
If PreviousElement(var())=0
ResetList(var())
quit=2
EndIf
Else
If NextElement(var())=0
LastElement(var())
quit=2
EndIf
EndIf
Else
If oldcompare=1
If PreviousElement(var())=0
ResetList(var())
EndIf
EndIf
quit=2
EndIf
EndIf
Wend
If quit=2
ProcedureReturn 0
Else
ProcedureReturn 1
EndIf
EndProcedure
Procedure ADD_Element(a$)
find_var(@a$)
AddElement(var())
var()\s=a$
EndProcedure
ADD_Element("hallo")
ADD_Element("adfa")
ADD_Element("2345")
ADD_Element("uioa")
ADD_Element("23jlk")
ADD_Element("osad")
ResetList(var())
While NextElement(var())
Debug var()\s
Wend