I have an application where I read a record, perform some calculations, and then decide whether I want to delete the record or save (“rewrite”) it. The compiler gives me an error, apparently inconsistent with the MicroFocus documentation. Please advise how I can achieve my purpose.
In Micro Focus Online Documentation the rules for Deleting a record state:
- The associated file must be open in the I-O mode at the time of execution of this statement. (See the topic The OPEN Statement.)
- For files in sequential access mode, the last input-output statement executed for file-name-1 prior to the execution of the DELETE statement must have been a successfully executed READ statement. The operating system logically removes from the file the record that was accessed by that READ statement.
Here is my code:
SELECT CLEANDATA
ASSIGN TO "CLEANDATA"
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL.
. . .
FD CLEANDATA
LABEL RECORDS ARE STANDARD.
01 CLEANDATA-REC.
05 CLEANDATA-FIELD OCCURS 4000 PIC S9(12).
. . .
open I-O CLEANDATA.
. . .
read CLEANDATA next
at end go to 1000-EXIT.
MOVE 'N' TO W-DELETE-CLEANDATA-FLAG.
perform 2000-SCAN-FOR-ERRORS.
if W-DELETE-CLEANDATA-FLAG = 'Y'
DELETE CLEANDATA RECORD ==> Compiler barfs “Not allowed with SEQUENTIAL files”
else rewrite CLEANDATA-REC.
go to 1000-ENTRY.
I will be most grateful for your advice.