Funktion FAST_ASCAN in Clipper

Ersatzfunktion für Suche in langen mehrdimensonalen Arrays
Das zu durchsuchende Array muss in der Suchspalte sortiert sein

FUNCTION FAST_ASCAN(sucharray,suchwert,arrayind)
LOCAL arraylen := 0
LOCAL aktvalue := ""
LOCAL maximum  := 0
LOCAL minimum  := 0
LOCAL nextone  := 0
LOCAL retwert  := 0
arraylen=LEN(sucharray)
IF arraylen>0.5
	IF arraylen>1.5
		IF arraylen>2.5
			nextone=INT((arraylen/2)+0.999999)
			maximum=arraylen
			minimum=1
			DO WHILE .T.
				aktvalue=sucharray[nextone,arrayind]
				IF aktvalue==suchwert
					retwert=nextone
					EXIT
				ENDIF
				IF (nextone=minimum) .OR. (nextone=maximum)
					retwert=0
					EXIT
				ENDIF
				IF aktvalue<suchwert
					minimum=nextone
					nextone=nextone+INT(((maximum-nextone)/2)+0.999999)
				ELSE
					maximum=nextone
					nextone=nextone-INT(((nextone-minimum)/2)+0.999999)
				ENDIF
			ENDDO
		ELSE
			IF sucharray[1,arrayind]==suchwert
				retwert=1
			ELSEIF sucharray[2,arrayind]==suchwert
				retwert=2
			ENDIF
		ENDIF
	ELSE
		IF sucharray[1,arrayind]==suchwert
			retwert=1
		ENDIF
	ENDIF
ENDIF
RETURN(retwert)

 

© 2004 EDV-Beratung L. Heitz