A daily billing job often reads yesterday's transaction file from top to bottom, totals the amounts, writes a report, and stops when it reaches end-of-file. That is the natural fit for COBOL sequential file organization: records are processed in the order they were written.
What is a COBOL sequential file?
A sequential file stores records in a fixed order. IBM describes sequential organization as a predecessor-successor relationship: each record, except the first and last, has one record before it and one record after it. A program reads the records one after another.
Sequential organization works well when the job processes most or all records. Payroll extracts, report input files, unload files, tape files, and batch interface files often use this style.
How sequential access works
With sequential access, the program cannot jump directly to record 200 without reading the earlier records first. That sounds limiting, but it is efficient for full-file processing because records are read in order and can be blocked.
OPEN INPUT EMPLOYEE-FILE
PERFORM UNTIL WS-END-OF-FILE = 'Y'
READ EMPLOYEE-FILE
AT END
MOVE 'Y' TO WS-END-OF-FILE
NOT AT END
PERFORM PROCESS-EMPLOYEE
END-READ
END-PERFORM
CLOSE EMPLOYEE-FILE
FILE-CONTROL example
The FILE-CONTROL paragraph connects the COBOL file name to an external data set or ddname. If the ORGANIZATION clause is omitted, IBM Enterprise COBOL assumes ORGANIZATION IS SEQUENTIAL, but coding it explicitly is easier for learners and code reviewers.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLOYEE-FILE
ASSIGN TO EMPIN
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-EMP-STATUS.
FD and record layout example
The FD entry describes the file in the FILE SECTION. The record description that follows tells COBOL how to move bytes from the file buffer into fields.
DATA DIVISION.
FILE SECTION.
FD EMPLOYEE-FILE
RECORD CONTAINS 80 CHARACTERS.
01 EMPLOYEE-RECORD.
05 EMPLOYEE-ID PIC X(06).
05 EMPLOYEE-NAME PIC X(30).
05 EMPLOYEE-DEPT PIC X(04).
05 EMPLOYEE-SALARY PIC 9(07)V99.
05 FILLER PIC X(31).
Sequential file operations
| Operation | Typical statement | Common use |
|---|---|---|
| Read existing records | OPEN INPUT, READ |
Batch input, report input, unload processing. |
| Create a new file | OPEN OUTPUT, WRITE |
New extract or report file. |
| Add records at the end | OPEN EXTEND, WRITE |
Append records to an existing sequential file. |
| Update current record | REWRITE |
Allowed only in the proper open/access context and without changing fixed record length. |
QSAM, VSAM ESDS, and line sequential
On z/OS, COBOL sequential files are commonly handled through QSAM for physical sequential data sets or through VSAM for ESDS files. IBM also documents line-sequential files for z/OS UNIX files, where records contain character data and end with a newline-style record delimiter.
QSAM sequential file
Use QSAM when the job reads or writes a physical sequential data set, including many tape and batch interface files. It is the normal choice for simple full-file processing.
VSAM ESDS
A VSAM entry-sequenced data set is also sequential by nature. Records are stored in entry order. Use ESDS when the site design needs VSAM services but the program still processes records sequentially.
Line sequential
Line-sequential files are character-oriented files. IBM notes that they are used for z/OS UNIX file-system data and each record ends with a record delimiter. They are not the same thing as a standard MVS QSAM data set.
When to sort a sequential file
A sequential file is often useful only when it is in the order the program expects. A billing job may need account number order. A report may need department order. If the incoming file arrives in a different order, sort it before the COBOL step or use a COBOL SORT statement when that fits the site standard.
//SORTIN DD DSN=PROD.TRANS.UNSORTED,DISP=SHR
//SORTOUT DD DSN=PROD.TRANS.BYACCT,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(20,5)),UNIT=SYSDA
//SYSIN DD *
SORT FIELDS=(1,10,CH,A)
/*
Performance notes
Sequential files are fast when the program reads a large percentage of the file. IBM guidance says sequential access is usually faster than random or dynamic access when a large percentage of records is referenced or updated. The weak pattern is a program that repeatedly scans the same file looking for one record.
- Use blocking for batch files instead of reading tiny physical blocks.
- Process the file in the same order as the business key when possible.
- Avoid reading the same file from the beginning inside another loop.
- Use a sort, indexed file, database table, or lookup table when direct retrieval is needed.
Sequential vs indexed vs relative
| Need | Better file organization | Reason |
|---|---|---|
| Read all records in order | Sequential | Simple and efficient for full-file batch work. |
| Find records by customer number | Indexed | Key access avoids scanning the whole file. |
| Access records by relative number | Relative | Record number controls placement and lookup. |
| Read text files in z/OS UNIX | Line sequential | Records are character data with delimiters. |
Common mistakes
Using sequential files for repeated single-record lookup
If the program reads 500,000 records to find one account, and does that thousands of times, the file organization is probably wrong for the access pattern. Consider indexed access, DB2, or a preloaded table.
Missing file status checks
Always define a file status field and check it in error paths. End-of-file is expected. Status values such as open failure, write failure, or record-length issues need a message and a clear return code.
Confusing sequential and line sequential
A line-sequential file is not just a QSAM file with a different name. It is character-oriented and delimiter-based, so trailing blanks and record lengths can behave differently.
Related COBOL file topics
For nearby file-handling topics, read COBOL File Operation, COBOL File I/O Modes, COBOL File Status, COBOL Fixed and Variable Records, COBOL Indexed Sequential File, and COBOL Relative Organization.
External references
Technical notes in this refresh were checked against IBM COBOL file organization documentation, IBM guidance for choosing file organization and access mode, and IBM FILE-CONTROL paragraph documentation.
FAQ
What is sequential file organization in COBOL?
It is a file organization where records are processed in the order they were placed in the file. The program reads records one after another until end-of-file.
Can a COBOL sequential file be read randomly?
No. A sequential file is read sequentially. Use indexed or relative organization when the program needs random or dynamic access.
When is a sequential file a good choice?
Use it for full-file batch processing, reports, unloads, tape files, and interface files where most records are read or written in order.
Is line sequential the same as sequential?
No. Line sequential is character-oriented and delimiter-based, often used for z/OS UNIX files. Standard sequential files on z/OS are commonly QSAM or VSAM sequential files.
No comments:
Post a Comment