The SAME clause is used to specify that multiple files share the same record area in memory. This conserves memory by allowing different files to use the same physical memory location for their record descriptions.
SAME allows multiple files to share the same memory area.
The SAME clause is used in the FILE SECTION to specify shared record areas.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768* Basic SAME clause syntax FD file-name-1. 01 record-name-1. * record description FD file-name-2 SAME RECORD AREA AS file-name-1. 01 record-name-2. * record description * Complete example IDENTIFICATION DIVISION. PROGRAM-ID. SAME-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "INPUT.DAT" ORGANIZATION IS SEQUENTIAL. SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.DAT" ORGANIZATION IS SEQUENTIAL. SELECT TEMP-FILE ASSIGN TO "TEMP.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INPUT-FILE. 01 INPUT-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. FD OUTPUT-FILE SAME RECORD AREA AS INPUT-FILE. 01 OUTPUT-RECORD. 05 CUST-ID PIC 9(6). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC 9(8)V99. FD TEMP-FILE SAME RECORD AREA AS INPUT-FILE. 01 TEMP-RECORD. 05 TEMP-ID PIC 9(6). 05 TEMP-NAME PIC X(30). 05 TEMP-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT INPUT-FILE OPEN OUTPUT OUTPUT-FILE OPEN OUTPUT TEMP-FILE PERFORM PROCESS-RECORDS CLOSE INPUT-FILE OUTPUT-FILE TEMP-FILE STOP RUN. PROCESS-RECORDS. READ INPUT-FILE AT END EXIT PARAGRAPH END-READ * Process record using shared area IF CUSTOMER-BALANCE > 1000 WRITE OUTPUT-RECORD FROM INPUT-RECORD ELSE WRITE TEMP-RECORD FROM INPUT-RECORD END-IF GO TO PROCESS-RECORDS.
SAME RECORD AREA allows files to share memory space.
Approach | Memory Usage | File Access |
---|---|---|
SAME RECORD AREA | Conserved | Sequential |
Separate Areas | More memory | Simultaneous |
Mixed Approach | Balanced | Flexible |
These examples demonstrate how to use the SAME clause effectively in different file processing scenarios.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071IDENTIFICATION DIVISION. PROGRAM-ID. DATA-PIPELINE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT RAW-DATA ASSIGN TO "RAW.DAT" ORGANIZATION IS SEQUENTIAL. SELECT VALID-DATA ASSIGN TO "VALID.DAT" ORGANIZATION IS SEQUENTIAL. SELECT INVALID-DATA ASSIGN TO "INVALID.DAT" ORGANIZATION IS SEQUENTIAL. SELECT PROCESSED-DATA ASSIGN TO "PROCESSED.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD RAW-DATA. 01 RAW-RECORD. 05 DATA-ID PIC 9(6). 05 DATA-VALUE PIC X(50). 05 DATA-STATUS PIC X(1). FD VALID-DATA SAME RECORD AREA AS RAW-DATA. 01 VALID-RECORD. 05 VALID-ID PIC 9(6). 05 VALID-VALUE PIC X(50). 05 VALID-STATUS PIC X(1). FD INVALID-DATA SAME RECORD AREA AS RAW-DATA. 01 INVALID-RECORD. 05 INVALID-ID PIC 9(6). 05 INVALID-VALUE PIC X(50). 05 INVALID-STATUS PIC X(1). FD PROCESSED-DATA SAME RECORD AREA AS RAW-DATA. 01 PROCESSED-RECORD. 05 PROCESSED-ID PIC 9(6). 05 PROCESSED-VALUE PIC X(50). 05 PROCESSED-STATUS PIC X(1). PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT RAW-DATA OPEN OUTPUT VALID-DATA INVALID-DATA PROCESSED-DATA PERFORM PROCESS-DATA-PIPELINE CLOSE RAW-DATA VALID-DATA INVALID-DATA PROCESSED-DATA STOP RUN. PROCESS-DATA-PIPELINE. READ RAW-DATA AT END EXIT PARAGRAPH END-READ * Validate data IF DATA-STATUS = "V" WRITE VALID-RECORD FROM RAW-RECORD PERFORM PROCESS-VALID-DATA ELSE WRITE INVALID-RECORD FROM RAW-RECORD END-IF GO TO PROCESS-DATA-PIPELINE. PROCESS-VALID-DATA. * Process valid data using shared record area MOVE "P" TO DATA-STATUS WRITE PROCESSED-RECORD FROM RAW-RECORD.
SAME enables efficient data processing pipelines.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253* File conversion with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD OLD-FORMAT. 01 OLD-RECORD. 05 OLD-ID PIC 9(6). 05 OLD-NAME PIC X(20). 05 OLD-ADDRESS PIC X(30). 05 OLD-PHONE PIC X(10). FD NEW-FORMAT SAME RECORD AREA AS OLD-FORMAT. 01 NEW-RECORD. 05 NEW-ID PIC 9(6). 05 NEW-NAME PIC X(25). 05 NEW-ADDRESS PIC X(40). 05 NEW-PHONE PIC X(15). 05 NEW-EMAIL PIC X(30). FD ERROR-FILE SAME RECORD AREA AS OLD-FORMAT. 01 ERROR-RECORD. 05 ERROR-ID PIC 9(6). 05 ERROR-NAME PIC X(20). 05 ERROR-ADDRESS PIC X(30). 05 ERROR-PHONE PIC X(10). PROCEDURE DIVISION. CONVERT-FILES. OPEN INPUT OLD-FORMAT OPEN OUTPUT NEW-FORMAT ERROR-FILE PERFORM CONVERT-RECORDS CLOSE OLD-FORMAT NEW-FORMAT ERROR-FILE. CONVERT-RECORDS. READ OLD-FORMAT AT END EXIT PARAGRAPH END-READ * Convert record format IF OLD-NAME NOT = SPACES MOVE OLD-ID TO NEW-ID MOVE OLD-NAME TO NEW-NAME MOVE OLD-ADDRESS TO NEW-ADDRESS MOVE OLD-PHONE TO NEW-PHONE MOVE SPACES TO NEW-EMAIL WRITE NEW-RECORD ELSE WRITE ERROR-RECORD FROM OLD-RECORD END-IF GO TO CONVERT-RECORDS.
SAME facilitates efficient file format conversion.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960* Data filtering with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD MASTER-FILE. 01 MASTER-RECORD. 05 MASTER-ID PIC 9(6). 05 MASTER-NAME PIC X(30). 05 MASTER-STATUS PIC X(1). 05 MASTER-BALANCE PIC 9(8)V99. FD ACTIVE-FILE SAME RECORD AREA AS MASTER-FILE. 01 ACTIVE-RECORD. 05 ACTIVE-ID PIC 9(6). 05 ACTIVE-NAME PIC X(30). 05 ACTIVE-STATUS PIC X(1). 05 ACTIVE-BALANCE PIC 9(8)V99. FD INACTIVE-FILE SAME RECORD AREA AS MASTER-FILE. 01 INACTIVE-RECORD. 05 INACTIVE-ID PIC 9(6). 05 INACTIVE-NAME PIC X(30). 05 INACTIVE-STATUS PIC X(1). 05 INACTIVE-BALANCE PIC 9(8)V99. FD HIGH-BALANCE-FILE SAME RECORD AREA AS MASTER-FILE. 01 HIGH-BALANCE-RECORD. 05 HIGH-BALANCE-ID PIC 9(6). 05 HIGH-BALANCE-NAME PIC X(30). 05 HIGH-BALANCE-STATUS PIC X(1). 05 HIGH-BALANCE-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION. FILTER-DATA. OPEN INPUT MASTER-FILE OPEN OUTPUT ACTIVE-FILE INACTIVE-FILE HIGH-BALANCE-FILE PERFORM FILTER-RECORDS CLOSE MASTER-FILE ACTIVE-FILE INACTIVE-FILE HIGH-BALANCE-FILE. FILTER-RECORDS. READ MASTER-FILE AT END EXIT PARAGRAPH END-READ * Filter based on status and balance EVALUATE MASTER-STATUS WHEN "A" WRITE ACTIVE-RECORD FROM MASTER-RECORD IF MASTER-BALANCE > 10000 WRITE HIGH-BALANCE-RECORD FROM MASTER-RECORD END-IF WHEN "I" WRITE INACTIVE-RECORD FROM MASTER-RECORD WHEN OTHER WRITE INACTIVE-RECORD FROM MASTER-RECORD END-EVALUATE GO TO FILTER-RECORDS.
SAME enables efficient data filtering operations.
123456789101112131415161718192021222324252627282930313233343536373839404142434445* Backup and archive with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD CURRENT-FILE. 01 CURRENT-RECORD. 05 CURRENT-ID PIC 9(6). 05 CURRENT-DATA PIC X(100). 05 CURRENT-DATE PIC X(8). FD BACKUP-FILE SAME RECORD AREA AS CURRENT-FILE. 01 BACKUP-RECORD. 05 BACKUP-ID PIC 9(6). 05 BACKUP-DATA PIC X(100). 05 BACKUP-DATE PIC X(8). FD ARCHIVE-FILE SAME RECORD AREA AS CURRENT-FILE. 01 ARCHIVE-RECORD. 05 ARCHIVE-ID PIC 9(6). 05 ARCHIVE-DATA PIC X(100). 05 ARCHIVE-DATE PIC X(8). PROCEDURE DIVISION. BACKUP-AND-ARCHIVE. OPEN INPUT CURRENT-FILE OPEN OUTPUT BACKUP-FILE ARCHIVE-FILE PERFORM PROCESS-RECORDS CLOSE CURRENT-FILE BACKUP-FILE ARCHIVE-FILE. PROCESS-RECORDS. READ CURRENT-FILE AT END EXIT PARAGRAPH END-READ * Create backup WRITE BACKUP-RECORD FROM CURRENT-RECORD * Archive old records IF CURRENT-DATE < "20230101" WRITE ARCHIVE-RECORD FROM CURRENT-RECORD END-IF GO TO PROCESS-RECORDS.
SAME facilitates efficient backup and archive operations.
Understanding best practices ensures effective use of the SAME clause.
Use Case | SAME Benefits | Considerations |
---|---|---|
Memory Conservation | Reduces memory usage | Sequential file access |
Batch Processing | Efficient processing | File switching overhead |
Data Conversion | Shared record area | Record compatibility |
File Filtering | Multiple output files | Sequential processing |
Usage | Syntax | Example |
---|---|---|
Basic SAME | FD file2 SAME RECORD AREA AS file1 | FD OUTPUT SAME RECORD AREA AS INPUT |
Multiple files | FD file3 SAME RECORD AREA AS file1 | FD TEMP SAME RECORD AREA AS INPUT |
Different names | FD file2 SAME RECORD AREA AS file1 | FD NEW SAME RECORD AREA AS OLD |
File operations | OPEN/CLOSE files sequentially | OPEN INPUT1 CLOSE INPUT1 OPEN INPUT2 |
Record sharing | Use shared record area | MOVE data between files |
1. What is the primary purpose of the SAME clause in COBOL?
2. In which COBOL section is the SAME clause typically used?
3. What is the main benefit of using the SAME clause?
4. Can SAME be used with all file organization types?
5. What happens when files share the same record area?