FD, FDWOL, or FDR - Find to recordset
This page presents the complete syntax and explanation of the Find statement (abbreviated FD) along with the important Find Without Locks (FDWOL) and Find And Reserve (FDR) variants.
Also see the introduction to the Find statement.
Syntax
The FD, FDWOL, or FDR statement introduces a recordset Find block, terminated by End Find. These statements process an input recordset, applying retrieval conditions to create a result recordset. The retrievalConditions can form the bulk of the statement, and can be placed either on the FD, FDWOL, or FDR line, or inside the block, allowing for multiple non-continued lines of retrievalConditions. In order to explain the processing when they are on multiple lines, two syntax tables are provided.
First, if all of the retrieval conditions fit on one line, the block contains two lines:
[outLabel] [In filespec] {FD | FDWOL | FDR} - [To %outRecordSet] - [In {inLabel | inRecordSet} | On [List] list] - [For Which | With] - [retrievalConditions] End Find
(The first line of the block, displayed above with continuations, is everything prior to End Find).
Second, if multiple lines are used for the retrieval conditions, the syntax is:
[outLabel] [In filespec] {FD | FDWOL | FDR} ... as above ... [retrievalConditions] retrievalConditions ... End Find
Syntax terms
In filespec | This optional clause is used to establish the file or group context from which the record set is drawn.
|
---|---|
... | ... |
retrievalConditions | This is a specification of the records in the input record set that are retained in the result record set. Each primitive clause is a test which is applied against each record in the input record set, producing a true or false result. These clauses are combined with Boolean set operations to produce the overall test for the records in the result set.
Each line in the block can contain a retrievalConditions clause. If the form is used with multiple lines containing retrievalConditions, the result record set contains the conjunction (And) of the tests specified in each line. For example: FD to %mySet RECTYPE='CUST' or RECTYPE='PARTNER' STATUS='ACTIVE' end find The above Find record set is equivalent to: FD to %mySet (RECTYPE='CUST' or RECTYPE='PARTNER') - And STATUS='ACTIVE' End find A missing retrievalConditions clause specifies all records in the input record set. Hence blank lines within the recordset Find block have no effect, for example: in file SHIPMENTS FD to %mySet end find In the above example, For the syntax of retrievalConditions, see Retrieval conditions syntax. |
Find as the first word of record set Find statements
The FD, FDWOL, and FDR statements are actually abbreviations and can be specified in a longer form:
FD | Find [All Records] |
FDWOL | Find Without Locks [All Records] |
FDR | Find And Reserve [All Records] |
Just as the block introduced by the statements is called the recordset Find block, these statements are collectively referred to as the recordset Find statement.
Retrieval conditions syntax
As mentioned in the syntax terms for the recordset Find statement, the retrievalConditions specify the records in the input record set that are retained in the result record set.
The retrievalConditions consist of a series of primitiveTest conditions that are combined in the usual way with And, Or, Not, and parentheses (()):
[Not] {primitiveTest | (retrievalConditions)} - [{And | Or | Nor} [Not] {primitiveTest | (retrievalConditions)}] ...
List of primitive tests
These are the primitiveTest alternatives and shortcuts:
- fieldname = [Not] value
- fieldname Like pattern
- fieldname Is [Not] {Present | Like pattern}
- fieldname Is [Not]
{ [Numerically | Alphabetically]
[Eq | = | Ne | ^= | Greater Than | Gt | > | Less Than | Lt < | <= | Ge | >= | Before | After]
value } - fieldname Is [Not]
{ [Numerically | Alphabetically]
{ In Range [From | After] value1 {To | [And] Before} value2
| Between value1 And value2 } - File$ filename
- Find$ label
- List$ listname
- Location$ location | =
- Point$ value
- Sfge$ value
- Sfl$ value
In the above list, value options are:
- Literal number or string
- %variable
- Value [In] label
Omitting repeated first words
If a sequence of primitiveTests in a particular retrieval condition all have the same first word, that word can be omitted from the latter phrases. For example:
list$ A and not list$ B
can be written:
list$ A and not B
And:
X is 13 or X is less than 7
can be written:
X is 13 or is less than 7
Also, if omitting the first word, duplicated equal signs can be omitted. For example, the expression:
A = 3 or A = 5 or A = 40
is equivalent to:
A = 3 or 5 or 40
Use of parentheses
As indicated in the Retrieval conditions syntax, parentheses can be placed around any sequence of phrases to clarify the condition or force the evaluation to occur in a particular order. For example:
not (A = 2 or list$ Y) A = 1 and (B = 2 or C = 3)
Point$
The Point$ condition should be used when ranges of record numbers must be retrieved. If individual record numbers need to be retrieved, the For Record Number statement should be used. The format of Point$ is:
Point$ n
A record satisfies the Point$ condition if its record number is greater than or equal to n. For example, the following statement retrieves all records that have internal record numbers between 1500 and 2499, inclusive:
fd to %recSet point$ 1500 and not point$ 2500 end find
Frequently made mistakes
No Where keyword | The For Each Record statement can contain a Where clause. The equivalent (and optional) keyword in the Find statement is For Which or With. |
Also see the introduction to the Find statement.