home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a013 / 1.ddi / SOURCE.EXE / F_MMOFND.PRG < prev    next >
Encoding:
Text File  |  1991-01-25  |  1.7 KB  |  73 lines

  1. *****************************************************************
  2. FUNCTION MEMOFIND 
  3. *****************************************************************
  4.  
  5. * Finds text in a memo field
  6.  
  7. * Copyright(c) 1991 - James Occhiogrosso
  8.  
  9. LOCAL counter := 0, field_text := '', num_finds := 0,  ;
  10.       old_area := 0, old_ndx := 0, old_rec := 0, rec_list := ''
  11.  
  12. PARAMETERS file_name, memo_field, search_for,    ;
  13.            recs_array, case_sen
  14.  
  15. * Set case sensitivity off if no value passed
  16. case_sen = IF (case_sen = NIL, .F., case_sen )
  17.  
  18. * Save entry conditions
  19. old_area = SELECT()
  20. old_ndx  = INDEXORD()
  21. old_rec  = RECNO()
  22.  
  23. rec_list = ''
  24.  
  25. * Turn off all indexes to speed search
  26. SET ORDER TO 0
  27. SELECT (file_name)
  28. GO TOP
  29.  
  30. * Check for case sensitivity, and search for specified text
  31.  
  32. counter = 0
  33. DO WHILE .NOT. EOF()
  34.  
  35.     * Equate the field to a variable
  36.     field_text = &memo_field
  37.  
  38.     * And search the variable for specified text
  39.     IF case_sen .AND. search_for $ field_text .OR. !case_sen ;
  40.                 .AND. upper(search_for) $ upper(field_text)
  41.  
  42.         * Increment counter and add each record number to list
  43.         counter++
  44.         rec_list  = rec_list + LTRIM(STR(RECNO())) + ' '
  45.     ENDIF
  46.     SKIP
  47. ENDDO
  48.  
  49. num_finds = counter
  50.  
  51. IF num_finds > 0
  52.  
  53.     * Resize passed array to number of found records
  54.     ASIZE(recs_array, num_finds)
  55.  
  56.     * Load array with record numbers
  57.     FOR counter = 1 TO num_finds
  58.           recs_array[counter] = VAL(PARSE(@rec_list))
  59.     NEXT
  60.  
  61. ENDIF
  62.  
  63. * Reinstate entry conditions
  64.  
  65. SELECT (old_area)
  66. SET ORDER TO old_ndx
  67. GO old_rec
  68.  
  69. * Return True if at least one record was found
  70.  
  71. RETURN IF(num_finds > 0, .T., .F.)
  72.  
  73.