The RECORD clause specifies either the number of character positions in a fixed-length record or the range of character positions in a variable-length record. If the number of character positions varies, the clause specifies the minimum and maximum number of character positions.
The concepts of fixed and variable format files used throughout this section do not directly apply to line sequential files. See your COBOL system documentation on file handling for details on the implications of using line sequential files in your COBOL implementation.
Although it is a part of the standard COBOL definition, the RECORD CONTAINS clause is explicitly excluded from the X/Open COBOL language definitions and should not be used in a conforming X/Open COBOL source program.
General Formats for Format 1
General Formats for Format 2
General Formats for Format 3
Syntax Rules for Format 1
- No record description entry for the file can specify a number of character positions different from integer-1.
Syntax Rules for Format 2
- Record descriptions for the file must not describe records which contain fewer character positions than specified by integer-2, nor records which contain a greater number of character positions than that specified by integer-3.
- Integer-3 must be greater than integer-2.
- Data-name-1 must describe an elementary unsigned integer in the Working-Storage or Linkage Section.
General Rules for All Formats
- If the RECORD clause is not specified, the size of each data record is completely defined in the record description entry.
- If the associated file connector is an external file connector, all file description entries in the run unit which are associated with that file connector must specify the same values for integer-1 or integer-2 and integer-3. If the RECORD clause is not specified, all record description entries associated with this file connector must be the same length.
- Line sequential files are neither truly fixed nor truly variable format files: the presence or absence of any RECORDING MODE, RECORD CONTAINS or RECORD VARYING IN SIZE clause does not, therefore, impact their performance.
General Rules for Format1
- Format 1 is used to specify fixed-length records. Integer-1 specifies the number of character positions contained in each record in the file.
General Rules for Format2
- Format 2 is used to specify variable-length records. Integer-2 specifies the minimum number of character positions to be contained in any record of the file. Integer-3 specifies the maximum number of character positions in any record of the file.
- The number of character positions associated with a record description is determined by the sum of the number of character positions in all elementary data items excluding redefinitions and renamings, plus any implicit FILLER items due to synchronization. If a table is specified:
- The minimum number of table elements described in the record is used in the summation above to determine the minimum number of character positions associated with the record description.
- The maximum number of table elements described in the record is used in the summation above to determine the maximum number of character positions associated with the record description.
- If integer-2 is not specified, the minimum number of character positions to be contained in any record of the file is equal to the least number of character positions described for a record in that file.
- If integer-3 is not specified, the maximum number of character positions to be contained in any record of the file is equal to the greatest number of character positions described for a record in that file.
- If data-name-1 is specified, the number of character positions in the record must be placed into the data item referenced by data-name-1 before any RELEASE, REWRITE, or WRITE statement is executed for the file.
- If data-name-1 is specified, the execution of a DELETE, RELEASE, REWRITE, START, or WRITE statement or the unsuccessful execution of a READ or RETURN statement does not alter the content of the data item referenced by data-name-1.
- During the execution of a RELEASE, REWRITE, or WRITE statement, the number of character positions in the record is determined by the following conditions:
- If data-name-1 is specified, by the content of the data item referenced by data-name-1.
- If data-name-1 is not specified and the record does not contain a variable occurrence data item, by the number of character positions in the record.
- If data-name-1 is not specified and the record does contain a variable occurrence data item, by the sum of the fixed portion and that portion of the table described by the number of occurrences at the time of execution of the output statement.
If the number of character positions in the logical record which is to be written is less than integer-2 or greater than integer-3, the output statement is unsuccessful and, except during execution of a RELEASE statement, the associated I/O status is set to a value indicating the cause of the condition.
- If data-name-1 is specified, after the successful execution of a READ or RETURN statement for the file, the contents of the data item referenced by data-name-1 indicates the number of character positions in the record just read.
- If the INTO phrase is specified in the READ or RETURN statement, the number of character positions in the current record that participate as the sending data items in the implicit MOVE statement is determined by the following conditions:
- If data-name-1 is specified, by the content of the data item referenced by data-name-1.
- If data-name-1 is not specified, by the value that would have been moved into the data item referenced by data-name-1 had data-name-1 been specified.
General Rules for Format 3
- When format 3 of the RECORD clause is used, integer-4 and integer-5 refer to the minimum number of characters in the smallest size data record and the maximum number of characters in the largest size data record respectively. However, in this case, the size of each data record is completely defined in the record description entry.
- The size of each data record is specified in terms of the number of character positions required to store the logical record, regardless of the types of characters used to represent the items within the logical record. The size of a record is determined by the sum of the number of characters in all fixed-length elementary items plus the sum of the maximum number of characters in any variable-length item subordinate to the record. This sum can be different from the actual size of the record. See the topic Selection Of Character Representation And Radix in the chapter Concepts of the COBOL Language, and the sections The SYNCHRONIZED Clause and The USAGE Clause.