HP OpenVMS Systems Documentation |
HP COBOL
|
Previous | Contents | Index |
HP COBOL provides four record format types: fixed, variable, print-control, and stream. Table 6-2 shows the record format availability.
Sequential | Line Sequential |
Relative |
Indexed |
||
---|---|---|---|---|---|
Disk | Tape | ||||
Fixed length | yes | yes | no | yes | yes |
Variable length | yes | yes | no | yes | yes |
Print control | yes | no | no | no | no |
Stream | no | no | yes | no | no |
The compiler determines the record format from the information that you specify as follows:
If a file has more than one record description, the different record descriptions automatically share the same record area in memory. The I/O system does not clear this area before it executes the READ statement. Therefore, if the record read by the latest READ statement does not fill the entire record area, the area not overlaid by the incoming record remains unchanged.
The record format type that was specified when the file was created must be used for all subsequent accesses to the file.
In Example 6-1, a file contains a company's stock inventory information (part number, supplier, quantity, price). Within this file, the information is divided into records. All information for a single piece of stock constitutes a single record.
Example 6-1 Sample Record Description |
---|
01 PART-RECORD. 02 PART-NUMBER PIC 9999. 02 PART-SUPPLIER PIC X(20). 02 PART-QUANTITY PIC 99999. 02 PART-PRICE PIC S9(5)V99. |
Each record in the stock file is itself divided into discrete pieces of information referred to as elementary items (02 level items). You give each elementary item a specific location in the record, give it a name, and define its size and type. The part number is an elementary item in the part record, as are supplier, quantity, and price. In this example, PART-RECORD contains four elementary items: PART-NUMBER, PART-SUPPLIER, PART-QUANTITY, and PART-PRICE.
Files with a fixed-length record format contain the same size records. The compiler generates the fixed-length format when either of the following conditions is true:
The compiler does not generate fixed-length format when any of the following conditions exist:
Fixed-length record size is determined by either the largest record description or the record size specified by the RECORD CONTAINS clause, whichever is larger. Example 6-2 shows how fixed-length record size is determined.
Example 6-2 Determining Fixed-Length Record Size |
---|
FD FIXED-FILE RECORD CONTAINS 100 CHARACTERS. 01 FIXED-REC PIC X(75). |
For the file, FIXED-FILE, the RECORD CONTAINS clause specifies a record size larger than the record description; therefore, the record size is 100 characters.
In Example 6-2, the following warning message is generated when the file FIXED-FILE is used:
"Record contains value is greater than length of longest record." |
If the multiple record descriptions are associated with the file, the size of the largest record description is used as the size. In Example 6-3, for the file REC-FILE, the FIXED-REC2 record specifies the largest record size; therefore, the record size is 90 characters.
Example 6-3 Determining Fixed-Length Record Size for Files with Multiple Record Descriptions |
---|
FD REC-FILE RECORD CONTAINS 80 CHARACTERS. 01 FIXED-REC1 PIC X(75). 01 FIXED-REC2 PIC X(90). |
When the file REC-FILE is used, the following warning message is generated:
"Longest record is longer than RECORD CONTAINS value - longest record size used." |
Files with a variable-length record format can contain records of different length. The compiler generates the variable-length attribute for a file when the file description contains a RECORD VARYING clause or a RECORD CONTAINS TO clause.
Each record is written to the file with a 32-bit integer that specifies the size of the record. This integer is not counted in the size of the record.
Examples 6-4, 6-5, and 6-6 show you the three ways you can create a variable-length record file.
In Example 6-4, the DEPENDING ON phrase sets the OUT-REC record length. The IN-TYPE data field determines the OUT-LENGTH field's contents.
Example 6-4 Creating Variable-Length Records with the DEPENDING ON Phrase |
---|
FILE SECTION. FD INFILE. 01 IN-REC. 03 IN-TYPE PIC X. 03 REST-OF-REC PIC X(499). FD OUTFILE RECORD VARYING FROM 200 TO 500 CHARACTERS DEPENDING ON OUT-LENGTH. 01 OUT-REC PIC X(500). WORKING-STORAGE SECTION. 01 OUT-LENGTH PIC 999 COMP VALUE ZEROES. |
Example 6-5 shows how to create variable-length records using the RECORD VARYING phrase.
Example 6-5 Creating Variable-Length Records with the RECORD VARYING Phrase |
---|
FILE SECTION. FD OUTFILE RECORD VARYING FROM 200 TO 500 CHARACTERS. 01 OUT-REC-1 PIC X(200). 01 OUT-REC-2 PIC X(500). |
Example 6-6 creates variable-length records by using the OCCURS clause with the DEPENDING ON phrase in the record description. HP COBOL determines record length by adding the sum of the variable record's fixed portion to the size of the table described by the number of table occurrences at execution time.
In this example, the variable record's fixed portion size is 113 characters. (This is the sum of P-PART-NUM, P-PART-INFO, and P-BIN-INDEX.) If P-BIN-INDEX contains a 7 at execution time, P-BIN-NUMBER will be 35 characters long. Therefore, PARTS-REC's length will be 148 characters; the fixed portion's length is 113 characters, and the table entry's length at execution time is 35 characters.
Example 6-6 Creating Variable-Length Records and Using the OCCURS Clause with the DEPENDING ON Phrase |
---|
. . . FILE SECTION. FD PARTS-MASTER RECORD VARYING 118 TO 163 CHARACTERS. 01 PARTS-REC. 03 P-PART-NUM PIC X(10). 03 P-PART-INFO PIC X(100). 03 P-BIN-INDEX PIC 999. 03 P-BIN-NUMBER PIC X(5) OCCURS 1 TO 10 TIMES DEPENDING ON P-BIN-INDEX. . . . |
If you describe a record with both the RECORD VARYING...DEPENDING ON phrase on data-name-1 and the OCCURS clause with the DEPENDING ON phrase on data-name-2, HP COBOL specifies record length as the value of data-name-1.
Previous | Next | Contents | Index |