Dieses Dokument behandelt folgende Themen:
Verwandte Statements: CLOSE WORK
FILE
| DEFINE WORK
FILE
| WRITE WORK
FILE
Gehört zur Funktionsgruppe: Verarbeitung von Arbeitsdateien/PC-Dateien
Das Statement READ WORK FILE
dient dazu, Daten von
einer physisch-sequentiellen Nicht-Adabas-Arbeitsdatei zu lesen. Die Daten
werden sequentiell von der Arbeitdatei gelesen. Wie sie gelesen werden, ist
unabhängig davon, wie Sie auf die Arbeitsdatei geschrieben wurden.
Das READ WORK FILE
-Statement führt eine
Verarbeitungsschleife aus, um alle Datensätze der Arbeitsdatei zu lesen.
Innerhalb einer READ WORK FILE
-Schleife können automatische
Gruppenwechsel-Verarbeitungen durchgeführt werden.
Auf Großrechnern kann dieses Statement nur in einem Programm verwendet werden, das unter Com-plete, CICS, TSO, TIAM oder im Batch-Betrieb ausgeführt wird. Die entsprechende JCL muss mit der Ausführungs-JCL bereitgestellt werden, wenn eine Arbeitsdatei gelesen werden soll. Näheres hierzu siehe Operations-Dokumentation.
Informationen bezüglich Arbeitsdateien finden Sie auch in
der Beschreibung des Profilparameters WORK
in der
Parameter-Referenz.
Informationen zur Unicode- und Codepage-Unterstützung siehe Arbeitsdateien und Druckdateien in der Unicode- und Codepage-Unterstützung-Dokumentation.
Anmerkungen:
READ WORK
FILE
-Statements eine End-of-File-Bedingung auftritt, schließt Natural
die Arbeitsdatei automatisch.
READ WORK
FILE
-Verarbeitungsschleife kein I/O-Statement stehen.
READ WORK [FILE ] work-file-number |
|||||||||||||||||||
RECORD
operand1
|
|||||||||||||||||||
[AND ] [SELECT ]
|
OFFSET
n
|
operand2 | |||||||||||||||||
FILLER
nX
|
|||||||||||||||||||
OFFSET
n
|
operand2 | OFFSET
n
|
operand4
[AND ] ADJUST [OCCURRENCES ]
|
||||||||||||||||
FILLER
nX
|
FILLER
nX
|
||||||||||||||||||
[GIVING LENGTH
operand3]
|
|||||||||||||||||||
statement | |||||||||||||||||||
END-WORK
|
(structured mode only) | ||||||||||||||||||
LOOP
|
(reporting mode only) |
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
READ WORK [FILE ] work-file-number
ONCE
|
|||||||||||||||||||
RECORD
operand1
|
|||||||||||||||||||
[AND ] [SELECT ]
|
OFFSET
n
|
operand2 | |||||||||||||||||
FILLER
nX
|
|||||||||||||||||||
OFFSET
n
|
operand2 | OFFSET
n
|
operand4
[AND ] ADJUST [OCCURRENCES ]
|
||||||||||||||||
FILLER
nX
|
FILLER
nX
|
||||||||||||||||||
[GIVING LENGTH
operand3]
|
|||||||||||||||||||
AT [END ] [OF ] [FILE ]
|
(structured mode only) | ||||||||||||||||||
statement | |||||||||||||||||||
END-ENDFILE |
|||||||||||||||||||
AT [END ] [OF ] [FILE ]
|
statement | (reporting mode only) | |||||||||||||||||
DO
statement
DOEND
|
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | S | A | G | A | U | N | P | I | F | B | D | T | L | C | ja | ja | ||||
operand2 | S | A | G | A | U | N | P | I | F | B | D | T | L | C | ja | ja | ||||
operand3 | S | I | ja | ja | ||||||||||||||||
operand4 |
A | A | U | N | P | I | F | B | D | T | L | C | nein | nein |
Format C ist bei Natural Connection nicht gültig.
Siehe auch Feldlängen.
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung | |
---|---|---|
work-file-number
|
Arbeitsdateinummer:
Die für Natural definierte Nummer der Arbeitsdatei, die gelesen werden soll. |
|
ONCE
|
ONCE-Option:
Die Wird ein |
|
RECORD operand1
FILLER nX |
RECORD-Option:
Im Reporting Mode muss eine Operandenliste
( Im Structured Mode oder wenn der zu verwendende Datensatz
mittels einem Natural überprüft die Daten des Datensatzes nicht. Demzufolge ist diese Option die schnellste Art, Datensätze von einer sequentiellen Datei zu verarbeiten. Allerdings müssen Sie selbst darauf achten, dass der Aufbau des Datensatzes korrekt beschrieben ist, da es sonst durch nicht-numerische Daten in numerischen Feldern zu einem ungewollten Programmabbruch kommen kann. Bevor der Datensatz gelesen wird, füllt Natural die Operandenliste (operand1) mit Leerzeichen; demzufolge wird bei einer End-of-File-Bedingung ein leerer Bereich zurückgegeben. Kurze Datensätze werden mit Leerzeichen aufgefüllt. Die
RECORD -Option kann nicht
benutzt werden:
|
|
SELECT
|
SELECT-Option (Voreinstellung):
Wird die |
|
OFFSET n | OFFSET 0 spezifiziert das erste Byte des
Datensatzes. OFFSET kann nicht für Arbeitsdateien
des Typs UNFORMATTED angegeben werden.
|
|
FILLER nX | Bedeutet, dass n Bytes des Eingabedatensatzes übersprungen werden. | |
Natural ordnet den einzelnen Feldern die ausgewählten
Werte zu und überprüft, dass die vom Datensatz ausgewählten numerischen Felder
entsprechend ihrer Definition auch wirklich gültige numerische Werte enthalten.
Aufgrund dieser Prüfung dauert die Verarbeitung einer sequentiellen Datei mit
der Wenn ein Datensatz nicht alle in der
Beim Lesen des Datei-Typs CSV werden die Optionen
|
||
operand4 AND ADJUST
OCCURRENCES |
ADJUST-Klausel:
Geben Sie ein eindimensionales X-Array mit vollständigem Bereich (*) an. Das X-Array wird auf bzw. um die Anzahl der Ausprägungen erweitert bzw. reduziert, die zur Aufnahme aller gelesenen Daten benötigt werden. Siehe Verarbeitung von X-Arrays weiter unten. Anmerkung: |
|
GIVING LENGTH
operand3
|
GIVING LENGTH-Klausel
Mit dieser Klausel können Sie die tatsächliche Länge des gelesenen Datensatzes feststellen. Die Länge (Anzahl der Bytes) erhalten Sie in operand3. operand3 muss mit Format/Länge I4 definiert sein. Wenn die Arbeitsdatei als |
|
AT END OF FILE
|
AT END OF FILE-Klausel
Diese Klausel kann nur zusammen mit der
|
|
END-WORK
|
Ende des READ WORK
FILE-Statements:
Im Structured Mode ohne Verarbeitungsschleife muss dass
für Natural reservierte Schlüsselwort |
|
LOOP |
Ende des READ WORK
FILE-Statements:
Im Reporting Mode ohne Verarbeitungsschleife muss dass
Natural-Statement |
Die Länge der Felder in der Operanden-Definitionstabelle wird wie folgt bestimmt:
Format | Länge |
---|---|
A, B, I, F | Die Anzahl der Bytes im Eingabedatensatz entspricht der internen Längendefinition. |
N | Die Anzahl der Bytes im Eingabedatensatz ergibt sich aus der Summe der internen Stellen vor und nach dem Komma (Dezimalpunkt). Komma und Vorzeichen belegen im Eingabedatensatz kein Byte. |
P, D, T | Die Anzahl der Bytes im Eingabedatensatz ergibt sich aus der Summe der Stellen vor und nach dem Komma (Dezimalpunkt) plus einer Stelle für das Vorzeichen, geteilt durch 2 und aufgerundet. |
L | 1 Byte wird benutzt. Bei Feldern des Formats C werden 2 Bytes benutzt. |
Felddefinition | Eingabedatensatz |
---|---|
#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 |
Siehe auch Format und Länge von Benutzervariablen im Leitfaden zur Programmierung.
Zum Auslesen eines Arrays aus einer Arbeistdatei können Sie für das Array einen variablen Indexbereich angeben. Zum Beispiel:
READ WORK FILE work-file-number #ARRAY (I:J)
Arbeitsdateityp | Verarbeitung |
---|---|
UNFORMATTED | Das Lesen einer dynamischen Variable von einer
UNFORMATTED -Arbeitsdatei bewirkt, dass der komplette Rest der
Datei in die Variable (von der aktuellen Position) gestellt wird. Wenn die
Datei mehr als 1073741824 Bytes umfasst, dann werden zumindestens 1073741824
Bytes in die Variable gestellt.
|
FORMATTED |
Das Lesen einer dynamischen Variable von einer
Arbeitsdatei vom Typ |
Wird die ADJUST
-Klausel nicht angegeben,
werden X-Arrays genauso wie reguläre Arrays behandelt, d..h. ihre vorhandenen
Ausprägungen werden gefüllt.
Wird dieADJUST
-Klausel angegeben,wird ein mit
vollständigem Bereich (*) angegebenes eindimensionales X-Array so angepasst,
dass es alle Daten aus dem restlichen Datensatz für eine Arbeitsdatei vom Typ
FORMATTED
bzw. alle Daten aus dem restlichen Datensatz für eine
Arbeitsdatei vom Typ UNFORMATTED
aufnehmen kann.
Beispiel 2 - READ WORK FILE Formatiert mit dynamischer Variablen
Beispiel 3 - READ WORK FILE Unformatiert mit dynamischer Variablen
Beispiel 4 - READ WORK FILE Formatiert mit X-array und ADJUST bei Ausprägungen
Beispiel 5 - READ WORK FILE Unformatiert mit X-array und ADJUST bei Ausprägungen
** 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
** Example 'RWFEX2': READ WORK FILE - Formatted with dynamic variable ************************************************************************ DEFINE DATA LOCAL 1 #DYNA (A) DYNAMIC END-DEFINE * DEFINE WORK FILE 1 TYPE 'FORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * READ WORK FILE 1 AND SELECT #DYNA DISPLAY *LENGTH(#DYNA) #DYNA (AL=40) /* /* Length: 18 Dyn.Var: 'text1 text2 text3' /* Length: 11 Dyn.Var: 'text4 text5' END-WORK * END
Page 1 11-07-15 09:21:09 LENGTH #DYNA ----------- ---------------------------------------- 18 text1 text2 text3 11 text4 text5
** Example 'RWFEX3': READ WORK FILE - Unformatted with dynamic variable ************************************************************************ DEFINE DATA LOCAL 1 #DYNA (A) DYNAMIC END-DEFINE * DEFINE WORK FILE 1 TYPE 'FORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * READ WORK FILE 1 AND SELECT #DYNA DISPLAY *LENGTH(#DYNA) #DYNA (AL=40) /* /* Length: 29 Dyn.Var: 'text1 text2 text3 text4 text5' END-WORK * END
Page 1 11-07-15 09:31:04 LENGTH #DYNA ----------- ---------------------------------------- 29 text1 text2 text3 text4 text5
** Example 'RWFEX4': READ WORK FILE - Formatted with X-array ** and ADJUST its occurrences ************************************************************************ DEFINE DATA LOCAL 1 #ARR (A6/1:*) 1 #OCC (I4) END-DEFINE * DEFINE WORK FILE 1 TYPE 'FORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * READ WORK FILE 1 AND SELECT #ARR(*) AND ADJUST OCCURRENCES #OCC := *OCCURRENCE(#ARR) DISPLAY #OCC #ARR(1:#OCC) /* /* Occurrences: 3 Array(*): 'text1', 'text2', 'text3' /* Occurrences: 2 Array(*): 'text4', 'text5' END-WORK * END
Page 1 11-07-15 09:36:13 #OCC #ARR ----------- ------ 3 text1 text2 text3 2 text4 text5
** Example 'RWFEX5': READ WORK FILE - Unformatted with X-array ** and ADJUST its occurrences ************************************************************************ DEFINE DATA LOCAL 1 #ARR (A6/1:*) 1 #OCC (I4) END-DEFINE * DEFINE WORK FILE 1 TYPE 'FORMATTED' * WRITE WORK FILE 1 VARIABLE 'text1 text2 text3 ' WRITE WORK FILE 1 VARIABLE 'text4 text5' * DEFINE WORK FILE 1 TYPE 'UNFORMATTED' * READ WORK FILE 1 AND SELECT #ARR(*) AND ADJUST OCCURRENCES #OCC := *OCCURRENCE(#ARR) DISPLAY #OCC #ARR(1:#OCC) /* /*Occurrences: 5 Array(*): 'text1', 'text2', 'text3', 'text4', 'text5' END-WORK * END
Page 1 11-07-15 09:41:25 #OCC #ARR ----------- ------ 5 text1 text2 text3 text4 text5