Startseite
Downloads
Lexikon
Sonstiges
Links
Kontakt
Gästebuch
Statistics
Disclaimer
Syntax
found = BiSearchAtPos( searchArg[, atPos][, len] ) [;]
Beschreibung
Diese interne REXX-Funktion sucht eine sortierte Liste nach dem als Aufrufparameter angegebenen Satz ab der angegebenen Position im Satz und mit der angegbenen Länge durch.
Aufrufparameter
Parameter
Beschreibung
searchArg
Der gesuchte Feld im Listensatz.
atPos
Feldposition im Satz, ab der gesucht wird.
len
Länge der Unterkette im Satz, in der gesucht wird.
Standardwerte
Parameter
Wert
atPos
1
len
Length( searchArg )
Rückgabewerte
Name/Wert
Bedeutung
found
Index der ersten gefundenen Stemvariablen, in der das gesuchte Feld in der angegebenen Position vorhanden ist.
0
Eine Null, wenn kein Feld gefunden wurde.
Bemerkungen
Eine Liste ist eine durchnumerierte Stem-Variable mit der Anzahl der Sätze in der Stem-Variablen mit dem Index 0.
Gesucht wird die Unterkette der Stem-Variablen (des Satzes) ab der angegebenen Position und mit der angegebenen Länge. Die Liste muss nach gleichen Kriterien sortit sein (Position, Länge).
In dieser Beispielimplementierung ist die Liste in der Stem-Variablen mit dem Stamm-Namen stem. abgespeichert. Dieser Name wurde durch die Anweisung Expose an die Prozedur Übergeben.
Es wird der Index der ersten gefundenen Stmvwariablen zurück gegeben. Es kann allerdings weitere Variablen geben, die den Suchkriterien entsprechen

Sourcecode

/*======( Binary search at position )======*/
BiSearchAtPos: Procedure Expose stem.
Arg search, atPos, len

If DataType( atPos ) <> 'NUM' Then atPos = 1
If DataType( len ) <> 'NUM' Then
  len = Length( search )
found  = 0       /* Index of the found Item */
bottom = 1
top    = stem.0

Do While found = 0 & top >= bottom
  mean = (bottom + top) % 2
  Parse Var stem.mean . (atPos) srchVal +(len) .
  If search = srchVal Then found = mean
  Else If search < srchVal Then top = mean - 1
  Else bottom = mean + 1
End

Return found
/*** End BiSearchAtPos ***/

Beispiel 1

stem. = "Z"
stem.0 = 20
stem.1 = "/* REXX */"
found = BiSearchAtPos( "/* REXX */" )
Say found

Ergebnis 1

1

Beispiel 2

stem. = "Z"
stem.0 = 20
stem.1 = "/* REXX */"
found = BiSearchAtPos( "REXX", 4 )
Say found

Ergebnis 2

1
Your privacy: This web site has no cookies, no advertising and does not provide access data to anyone for any reason.
Copyright © Janosch R. Kowalczyk 1999, 2010. All rights reserved.
Most recent revision on 25 Feb 2010 (56) - 13:21:41.
Jakoxx Logo