Anmelden

View Full Version : COBOL und START Anweisung



geo_works
08-11-13, 19:19
Hallo zusammen,

ich muss mich gerade mit einer AS400 auseinadersetzen und da ich schon lange keine indexsequentiellen Dateien mehr am Wickel hatte, ist das Wissen etwas eingestaubt ud braucht einen Schubs.

Ich hoffe das ich den gleich bekommen werde

Zum Problem:
Ich habe eine physische datei mit einer logischen Sicht, diese muss ich im ersten Schritt füllen.
Anschließend werden die Sätze aus der gerade gefüllten Datei weiter verarbeitet und ich muss wieder auf den ersten Satz der Datei zurück und sequentiell lesen.
Natürlich könnte ich mit schliessen und erneutem Öffnen der Datei wieder an den anfang kommen, aber ich meine das ging doch auch mit der START Anweisung.

Wenn ich das noch richtig im Kopf habe positioniert diese auf den ersten Satz der dem schlüssel entspricht oder halt wor oder danach wenn dieser schlüssel nicht vorhanden ist

Ich wollte das also so machen:

MOVE LOW-VALUE TO DATEI-KEY-FELDER
START DATEINAME
READ DATEINAME NEXT RECORD
AT END
SET DATEI-ENDE TO TRUE

Nur irgendwie habe ich nun in der Hauptschleife das Problem, dass das Dateiende gesetzt ist.

Was mach ich denn da falsch ?

Danke für eure Hilfe

Grüße

Mike

KingofKning
08-11-13, 19:26
Also wir haben nach dem Low-Value immer

03670 START DAT0018 KEY NOT < 018-KEY

gemacht.

BTW. Hier ist die Doku von IBM (ist zwar AIX sollte aber doch gleich sein)

http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.aix.cbl.doc%2Ftpfio24.h tm

geo_works
08-11-13, 19:41
Danke dir, werde ich doch später direkt mal ausprobierern.
Der Pointer steht ja dann vor dem ersten Satz, korrekt ?
Also wird ein READ NEXT den ersten Satz der Datei lesen

Ich denke auch das die Doku auch auf anwendbar ist.

Werde berichten

Viele Grüße

Mike

Fuerchau
09-11-13, 09:25
Da in COBOL/400 der Key extern beschrieben ist, sind die Keyfelder im Satzpuffer zu füllen und anschließend ein:

start myfile key is >= EXTERNALLY-DESCRIBED-KEY

geo_works
09-11-13, 11:36
Aha,

vielen Dank für die erweiterten Informationen.

Mit dem Operator >= wird der Pointer auf den ersten Satz der Datei zeigen, wenn in meinen Key-Felder im Satzpuffer jeweils Low-Values stehen.
Muss ich dann den Satz, auf den der Pointer nun zeigt, mit READ Dateiname oder mit READ NEXT Dateiname lesen.
Logisch wäre für mich ein normales READ, da READ NEXT eigentlich den nachfolgenden Satz zur Verfügung stellen würde.

Ist das korrekt oder habe ich einen Denkfehler ?

Ich werde das aber mal ausprobieren, sobal ich wieder an der Machine bin.

Die START Anweisung würde ja dann auch nicht auf INVALID KEY laufen, wenn ich >= verwende. Außer in dem Fall das die Datei keine Datensätze enthält

Grüße

Mike

Fuerchau
09-11-13, 12:37
Der Start setzt genau vor dem gewünschten Schlüssel auf.
Ein "READ MyFile at end" liest den nächsten Satz, "next" ist der Default, im Gegensatz halt zu "previous".
Ein "READ myfile key is externally-described-key Invalid" ist ein Direktzugriff.

Der Invalid beim Start wird tatsächlich nur ausgelöst, wenn kein Satz folgt. Kann aber auch ignoriert werden, da der nächste Read ja auch auf "at end" kommt.