home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pcmagazi / 1992 / 11 / binsch / binsch.sc
Text File  |  1991-10-04  |  2KB  |  57 lines

  1. ;**********************************************************************
  2. ; PROC BinarySearch(SearchVal)                             Paradox 3.5
  3. ; Binary search to locate closest match.  SearchVal is the
  4. ; string to search for.   Only works on sorted columns (primary key
  5. ; or physically sorted.)
  6. ;**********************************************************************
  7. PROC BinarySearch(SearchVal)
  8. PRIVATE
  9.   Found,                            ; Controls while loop
  10.   LowRec,                           ; Lower limit of current search area
  11.   HighRec,                          ; Upper limit of current search area
  12.   ThisRec                           ; Current record to compare to searchval
  13.  
  14. MESSAGE "Searching"                 ; Display message
  15. SearchVal = UPPER(SearchVal)        ; Convert to upper case
  16. LowRec = 1                          ; Initialize
  17. HighRec = NimageRecords()           ; Get number of records
  18. Found = FALSE                       ; Initialize
  19.  
  20. WHILE Found = FALSE
  21.                                     ; Find midpoint of current search area
  22.   ThisRec = INT((LowRec + HighRec) / 2)
  23.   MOVETO RECORD ThisRec             ; Move to midpoint record
  24.   IF SearchVal = UPPER([]) THEN     ; If SearchVal matches current field
  25.     Found = True                    ; Record found
  26.   ELSE
  27.     IF SearchVal > UPPER([]) THEN   ; Next search area will be upper half of
  28.       LowRec = ThisRec + 1          ;   current area
  29.     ELSE                            ; Next search area will be lower half of
  30.       HighRec = ThisRec - 1         ;   current area
  31.     ENDIF
  32.     IF LowRec > HighRec THEN        ; We're finished
  33.       Found = "Match not found"     ; So exit the while loop
  34.     ENDIF
  35.   ENDIF
  36. ENDWHILE
  37. IF (SearchVal > UPPER([])) THEN
  38.   MOVETO RECORD ThisRec + 1
  39. ENDIF
  40. ENDPROC
  41.  
  42. ;**********************************************************************
  43. ; PROC DoBinary()                                          Paradox 3.5
  44. ; Acts similar to the ZOOM command, but calls PROC BinarySearch().
  45. ;**********************************************************************
  46. PROC DoBinary()
  47. IF IMAGETYPE() = "Display" THEN         ; Only for Display images
  48.    STYLE ATTRIBUTE 63                   ; Look like Paradox
  49.    @ 0,0 ?? "Value:  "
  50.    @ 1,0 ?? "Enter a value to search for." + SPACES(52)
  51.    @ 0,8 ACCEPT "A72" TO SearchVal      ; Get value to match
  52.    BinarySearch(SearchVal)              ; Look for it
  53.    STYLE
  54. ELSE BEEP
  55. ENDIF
  56. ENDPROC
  57.