This document covers the following topics:
Related Statements: CLOSE WORK
FILE
| DEFINE WORK
FILE
| WRITE WORK
FILE
Belongs to Function Group: Control of Work Files / PC Files
The READ WORK FILE
statement is used to read data from a
non-Adabas physical sequential work file. The data is read sequentially from
the work file. How it is read is independent of how it was written to the work
file.
READ WORK FILE
initiates and executes a processing loop for
reading of all records on the work file. Automatic break processing may be
performed within a READ WORK FILE
loop.
Notes:
READ WORK FILE
statement, Natural automatically closes the work
file.
READ WORK FILE
processing loop.
If an ASCII work file is read, it is possible that an empty record is returned as the last record after the last physical record. This is due to the fact that Natural does not read individual records, but reads larger blocks of the work file in order to optimize file-access performance.
READ
WORK [FILE ]
work-file-number
|
|||||||||
RECORD
operand1
|
|||||||||
[AND ] [SELECT ]
|
OFFSET
n
|
operand2 | |||||||
FILLER
nX
|
|||||||||
[GIVING LENGTH
operand3]
|
|||||||||
statement | |||||||||
END-WORK
|
(structured mode only) | ||||||||
LOOP |
(reporting mode only) |
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
READ
WORK [FILE ]
work-file-number
ONCE
|
|||||||||||
RECORD
operand1
|
|||||||||||
[AND ] [SELECT ]
|
operand2 | ||||||||||
[GIVING LENGTH
operand3]
|
|||||||||||
[AT [END ] [OF ] [FILE ]
statement
END-ENDFILE] (structured
mode only) |
|||||||||||
AT [END ] [OF ] [FILE ]
|
(reporting mode only) |
For an explanation of the symbols used in the syntax diagrams, see Syntax Symbols.
Operand | Possible Structure | Possible Formats | Referencing Permitted | Dynamic Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
S | A | G | A | U | N | P | I | F | B | D | T | L | C | G | yes | yes | |||
operand2
|
S | A | G | A | U | N | P | I | F | B | D | T | L | C | yes | yes | ||||
operand3
|
S | I | yes | yes |
When using the work file types
ENTIRECONNECTION
or TRANSFER
,
operand2
may not be of format C.
See also Field Lengths.
Syntax Element Description:
Syntax Element | Description |
---|---|
work-file-number |
Work File Number:
The number of the work file (as defined to Natural) to be read. Variable Index
Range:
When reading an array from a work file, you can specify a variable index range for the array. For example: READ WORK FILE work-file-number #ARRAY (I:J) |
ONCE
|
ONCE Option:
If a |
RECORD operand1
FILLER nX |
RECORD Option:
If A In structured mode, or if the record to be used is defined using a
No checking and no conversion is performed by Natural on the data
contained in the record. It is the user's responsibility to describe the record
layout correctly in order to avoid program abends caused by non-numeric data in
numeric fields. Because no checking is performed by Natural, this option is the
fastest way to process records from a sequential file. The record area defined
by See Overview of RECORD Option Usage below. |
SELECT |
|
GIVING LENGTH
operand3
|
GIVING LENGTH Clause:
This clause can be used to retrieve the actual length of the record
being read. The length (number of bytes) is returned in
If the work file is defined as If the |
AT END OF
FILE
|
AT END OF FILE Clause:
This clause can only be used in conjunction with the
If the |
END-WORK
|
End of READ WORK FILE Statement:
In structured mode with processing loop, the Natural reserved word
|
LOOP |
End of READ WORK FILE Statement:
In reporting mode with processing loop, the Natural statement
|
RECORD option is used with
|
rejected at compile time | rejected at runtime | RECORD option is ignored,
processing switches to SELECT mode
|
work file type ENTIRECONNECTION
or TRANSFER |
x | ||
dynamic variables | x | ||
work file type CSV |
x | ||
work file type PORTABLE |
x | ||
work file types ASCII ,
ASCII-COMPRESSED , CSV , UNFORMATTED , code
page is specified in Configuration Utility (conversion is necessary) or at
least one Unicode field is specified (operand of format U, conversion is
necessary)
|
x |
The field lengths in the Operand Definition Table are determined as follows:
Format | Length |
---|---|
A, B, I, F | The number of bytes in the input record is the same as the internal length definition. |
N | The number of bytes in the input record is the sum of internal positions before and after the decimal point. The decimal point and sign do not occupy a byte position in the input record. |
P, D, T | The number of bytes in the input record is the sum of positions before and after the decimal point plus 1 for the sign, divided by 2 rounded upwards. |
L | 1 byte is used. For C format fields, 2 bytes are used. |
Field Definition | Input Record |
---|---|
#FIELD1 (A10) |
10 bytes |
#FIELD2 (B15) |
15 bytes |
#FIELD3 (N1.3) |
4 bytes |
#FIELD4 (N0.7) |
7 bytes |
#FIELD5 (P1.2) |
2 bytes |
#FIELD6 (P6.0) |
4 bytes |
See also Format and Length of User-Defined Variables in the Programming Guide.
Work File Type | Handling |
---|---|
The work file types ASCII and
ASCII-COMPRESSED can handle dynamic and large variables with a
maximum field/record length of 32766 bytes.
Reading a dynamic variable from an |
|
|
The work file type SAG (binary)
cannot handle dynamic variables and will produce an error. It can, however,
handle large variables with a maximum field/record length of 32766
bytes.
|
The work file type |
|
Large and dynamic variables can be written into work files or read
from work files using the two work file types Reading a dynamic variable from a |
|
CSV |
The maximum field/record length is 32766 bytes for dynamic and large variables. Dynamic variables are supported. X-arrays are not allowed and will result in an error message. |
** Example 'RWFEX1': READ WORK FILE ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME * 1 #RECORD 2 #PERS-ID (A8) 2 #NAME (A20) END-DEFINE * FIND EMPLOY-VIEW WITH CITY = 'STUTTGART' WRITE WORK FILE 1 PERSONNEL-ID NAME END-FIND * * ... * READ WORK FILE 1 RECORD #RECORD DISPLAY NOTITLE #PERS-ID #NAME END-WORK * END
#PERS-ID #NAME -------- -------------------- 11100328 BERGHAUS 11100329 BARTHEL 11300313 AECKERLE 11300316 KANTE 11500304 KLUGE 11500308 DIETRICH 11500318 GASSNER 11500343 ROEHM 11600303 BERGER 11600320 BLAETTEL 11500336 JASPER 11100330 BUSH 11500328 EGGERT