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