rspec/rules/S1572/cobol/rule.adoc

75 lines
1.6 KiB
Plaintext

== Why is this an issue?
When a ``++FILE STATUS++`` is declared on a file, it should be tested immediately after IO operations.
=== Noncompliant code example
[source,cobol]
----
IDENTIFICATION DIVISION.
PROGRAM-ID. foo.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TEST-FILE
ASSIGN TO 'foobar.txt'
ORGANIZATION IS SEQUENTIAL
FILE STATUS WS-TEST-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD TEST-FILE
LABEL RECORDS ARE STANDARD.
01 TEST-RECORD.
05 USERNAME PIC XX.
WORKING-STORAGE SECTION.
01 WS-TEST-FILE-STATUS PIC X(42).
PROCEDURE DIVISION.
* Non-Compliant, TEST-FILE has a FILE STATUS variable which must be used
OPEN INPUT TEST-FILE.
END PROGRAM foo.
----
=== Compliant solution
[source,cobol]
----
IDENTIFICATION DIVISION.
PROGRAM-ID. foo.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TEST-FILE
ASSIGN TO 'foobar.txt'
ORGANIZATION IS SEQUENTIAL
FILE STATUS WS-TEST-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD TEST-FILE
LABEL RECORDS ARE STANDARD.
01 TEST-RECORD.
05 USERNAME PIC XX.
WORKING-STORAGE SECTION.
01 WS-TEST-FILE-STATUS PIC X(42).
PROCEDURE DIVISION.
* Compliant, errors of the IO operation are propery handled
OPEN INPUT TEST-FILE.
IF WS-TEST-FILE-STATUS <> "00" THEN
DISPLAY "Error while opening foobar.txt as input.".
END PROGRAM foo.
----