===========================
A number of errors can occur that result from file input/output that
programmer may wish to be able to deal with in order to avoid
unexpected program termination.
Run time errors can arise quite easily from a file not being available
to open, or if present the data is corrupted. Furthermore, what if
there is no more disk space available or not enough space has been
allocated to allow for addtition of new data. Other errors, such as
attempting to close a file that isn't open, or to read a file opened
for output only, may well derive from logical errors (that is,
programming mistakes) but can be dealt with nonetheless when
debugging. These kinds of errors will normally result in termination
of the program run, whereas using File Status can allow the programmer
to deal with any such problems without the program run stopping and
returning to the operating system.
File Status Codes are made of two digits, the first indicates one one
of 5 classes:
0 ----> Input/output operation successful
1 ----> File "at end" condition
2 ----> Invalid key
3 ----> Permanent I/O error
4 ----> Logic error
The second digit refers to the particular case within the class. Here
are examples common to both Microfocus and Fujitsu compilers (although
there are more besides). I would check your compiler documentation.
----------------------------------------------------------------------------------------
Code Meaning
----------------------------------------------------------------------------------------
00 ---> Input/output operation successful
02 ---> Duplicate record key found (READ ok)
04 ---> Length of record too large (READ ok)
10 ---> File AT END
14 ---> "The valid digits of a read relative record
number are greater than the size of the relative
key item of the file."
16 ---> Program tries to read file already AT END
22 ---> Program attempts to write a record
with a key that already exists
23 ---> Record not found
24 ---> Program attempts to write record to a disk that is full
30 ---> Input/output operation unsuccessful,
no further information available
34 ---> Program attempts to write record to a disk that is full
35 ---> Program tries to open non-existant file
for INPUT, I-O or EXTEND
37 ---> Program tries to open line sequential file in I-O mode
41 ---> Program tries to open file that is already open
42 ---> Program tries to close file that is not open
43 ---> Program tries to delete or rewrite a record
that has not been read
44 ---> Program tries to write or rewrite a record of incorrect length
46 ---> Program tries to read a record where the previous read or
START has failed or the AT END condition
has occurred
47 ---> Program tries to read a record from a file opened
in the incorrect mode
48 ---> Program tries to write a record from a file opened
in the
incorrect mode
49 ---> Program tries to delete or rewrite a record from a file opened
in
the incorrect mode
-------------------------------------------------------------------------------------------
To use these codes you need to include the FILE STATUS clause in the
SELECT statement of the environment division:
SELECT TEST-FILE ASSIGN TO 'TEST-DATA.DAT'
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS W-STATUS.
Of course W-STATUS could any user name you like. It must however be
defined in working storage as PIC XX, i.e. as alpha numeric and not
numeric. So, if during a program run a certain input/output error
occurs, rather than the program terminate, the program will simply
produce an error status.
code:
*
Here a possible danger of too big a record being moved into W-RECORD
READ RECORD-IN INTO W-RECORD
IF W-STATUS = "04" THEN
DISPLAY "Over-sized record has been read"
SET REC-XS-FLAG TO TRUE
END-IF
Another example might be, when reading from an indexed file:
READ IN-FILE
IF W-STATUS = "23" THEN
DISPLAY "Record not found"
ELSE PERFORM MAIN-PROCESS
You could have easily have written:
READ IN-FILE
INVALID KEY
DISPLAY "Record not found"
NOT INVALID KEY PERFORM MAIN-PROCESS
END-READ
So consider which is the best option and remember not to try and do both.
It is one way to handle the errors but the drawback is we have to specify the conditions for all the file status and has to define its message.....
ReplyDeletemy question is there any functions to retrieve the error message and display with out defining it ?