guides:programming:programmers_reference_manual:reduce

Reduce subroutine

Creates a cursor using a filter or applies a filter to an existing cursor.

Reduce(reduce_script, sort_list, mode, table_name, cursorvar, flag)

The Reduce subroutine has the following parameters.

ParameterDescription
reduce_scriptUsed to pass an expression containing the formatted reduction criteria. The information passed in reduce_script must be formatted as follows.

· All column names must be enclosed in braces { }.

· Column names must not have spaces in them.

· All constants must be on the right side of the comparison operator and must be enclosed in either single or double quotes.

· All comparison operators must be reduced to the primitive set of operators and must be separated by spaces.

Operator - Primitive
Between - Between
Equal to - EQ
Less than - LT
Greater than - GT
Less than or equal to - LE
Greater than or equal to - GE
Not - Not
Starting with - ]
Ending with - [
Containing - [ ]
Matches - Match
Range - From To
Sunday - Sun
Monday - Mon
Tuesday - Tue
Wednesday - Wed
Thursday - Thu
Friday - Fri
Saturday - Sat
Today - Today
Yesterday - Yst
Tomorrow - Tom
Next - Next
Last - Last

Example Assignments for reduce_script:
reduce_script = "WITH NOT {DATE} EQ '9-23-59'"
reduce_script = "WITH {CITY} EQ 'Boston' OR WITH {STATE} EQ 'CA'"
reduce_script = 'WITH {GRADE_POINT} FROM "2.0" TO "4.0"'
reduce_script = 'WITH {MAJOR} EQ ': Quote(major_var)
reduce_script := ' AND WITH {MINOR} EQ ' : Quote(minor_var)
reduce_script = 'WITH {INV_DATE} LT ' : Quote(Date() - 30)
reduce_script := ' OR WITH {invoice_amt} GE "1000"'
reduce_script = 'WITH {PHONE} Match "3N-4N"'
Sort_listPass the sort criteria in sort_list. The sort criteria requires the same format as when used in Select … By.

If the program intends to sort, both the call to Reduce and the Select statement must use the same sort_list.

Example assignments for sort_list:
sort_list = "CITY"
sort_list = "ST" : @FM : "city"
sort_list = "#INV_TOTAL"
sort_list = "ST" : @FM : "#INV_TOTAL"
ModeUsed to pass one of three values:

Value - Description
0 - Indicates that these are new reduction criteria for an existing cursor.
1 - Indicates that the subroutine should return the results of the reduction in the next available cursor.
2 - Indicates that these are additional criteria for an existing cursor. The new criteria will be joined with a logical And to any previous criteria.
table_nameUsed to pass the name of the table to be searched.
cursorvarUsed to pass a cursor already initialized (Modes 0 and 2) or a cursor to be initialized (Mode 1).
flagReturns true if the subroutine was successful and false if unsuccessful.
Function Reduce_Example(param1)

* The following code provides reduction criteria to a selection of keys
* from CUSTOMERS using Select...By.

Declare Subroutine Reduce, Msg, FsMsg
$Insert Logical

Equ new_exist$ To 0 ; * Reduce Mode 0
Equ next_cur$ To 1
Equ add_exist$ to 2 

table_name = "CUSTOMERS"
flag = ""
done = False$
CursorVar = ""

* Clears all cursors
For counter = 0 To 8
  ClearSelect counter
Next counter

sort_list = "STATE"
Reduce_Script = "WITH {STATE} EQ 'NY' OR WITH {STATE} EQ 'CA'"
mode = NEXT_CUR$

Reduce(reduce_script, sort_list, mode, table_name, Cursorvar, flag)
If flag then
  Select table_name By sort_list Using Cursorvar then
    Open table_name To file_var then
      ctr = 0 
      Loop
        ReadNext key Using Cursorvar By AT Else done = TRUE$
      Until done
        Read rec From file_var, key then
          Gosub Processing
        end
      Repeat
    End Else
      FsMsg()
    End
  End Else
    FsMsg()
  end
End Else
  FsMsg()
End

Return ctr

 

Processing:

  ctr += 1

return
  • guides/programming/programmers_reference_manual/reduce.txt
  • Last modified: 2024/06/19 20:20
  • by 127.0.0.1