ADD_Element() fügt nun nur noch wirklich neue Texte ein
und gibt die Adresse des eingefügten Strings zurück.
Was ich nicht schaffe ist find_var() so anzupassen, daß es statt 1
die Adresse des bereits enthaltenen Strings mit gleichem Inhalt zurück gibt.
Ich habe zwar die entsprechende Stellen gefunden und markiert, aber irgendwie schaffe ich es nicht
mich so weit in den Code zu denken um die richtige Adresse zu speichern
Code: Alles auswählen
; English forum: http://purebasic.myforums.net/viewtopic.php?t=7503&highlight=
; Author: GPI
; Date: 14. September 2003
;
; leicht veränderte Version
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.l ADD_Element(a$)
Wert = find_var(@a$)
If Wert
ProcedureReturn Wert
Else
AddElement(var())
var()\s=a$
ProcedureReturn @var()\s
EndIf
EndProcedure
Debug "hallo - "+Str(ADD_Element("hallo"))
Debug "adfak - "+Str(ADD_Element("adfak"))
Debug "23456 - "+Str(ADD_Element("23456"))
Debug "uioaj - "+Str(ADD_Element("uioaj"))
Debug "23jlk - "+Str(ADD_Element("23jlk"))
Debug "hallo - "+Str(ADD_Element("hallo"))
Debug "osade - "+Str(ADD_Element("osade"))
ResetList(var())
While NextElement(var())
Debug var()\s
Wend