The ASSIGN TO clause is used in the FILE-CONTROL paragraph to specify the external name or device for a file. It establishes the connection between the logical file name used in the program and the physical file or device in the operating system.
ASSIGN TO creates the bridge between program logic and physical storage.
The ASSIGN TO clause follows specific syntax patterns within SELECT statements and can use various types of values for file assignment.
1234567891011121314151617* Basic ASSIGN TO syntax SELECT file-name ASSIGN TO external-name * With literal string SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" * With data name (variable) SELECT CUSTOMER-FILE ASSIGN TO WS-FILE-NAME * With figurative constant SELECT OUTPUT-FILE ASSIGN TO PRINTER * Complete example with other clauses SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-FILE-STATUS
ASSIGN TO can use literal strings, data names, or figurative constants.
Type | Example | Usage |
---|---|---|
Literal String | "CUSTOMER.DAT" | Fixed file names |
Data Name | WS-FILE-NAME | Dynamic assignment |
Figurative Constant | PRINTER, CONSOLE | System devices |
Environment Variable | $DATAFILE | System configuration |
1234567891011* System devices and standard files SELECT OUTPUT-FILE ASSIGN TO PRINTER * System printer SELECT INPUT-FILE ASSIGN TO SYSIN * Standard input SELECT OUTPUT-FILE ASSIGN TO SYSOUT * Standard output SELECT ERROR-FILE ASSIGN TO SYSERR * Error output SELECT CONSOLE-FILE ASSIGN TO CONSOLE * Console I/O * Mainframe specific SELECT TAPE-FILE ASSIGN TO TAPE * Tape device SELECT DISK-FILE ASSIGN TO DISK * Disk device SELECT CARD-FILE ASSIGN TO CARD-READER * Card reader
Figurative constants provide standard device references.
These examples demonstrate how to use the ASSIGN TO clause effectively in different file handling scenarios.
12345678910111213141516171819202122232425262728293031323334353637383940IDENTIFICATION DIVISION. PROGRAM-ID. SEQUENTIAL-FILE-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-FILE-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. WORKING-STORAGE SECTION. 01 WS-FILE-STATUS PIC X(2). PROCEDURE DIVISION. MAIN-PROCESS. OPEN INPUT CUSTOMER-FILE IF WS-FILE-STATUS NOT = "00" DISPLAY "Error opening file: " WS-FILE-STATUS STOP RUN END-IF * Process file records PERFORM UNTIL WS-FILE-STATUS = "10" READ CUSTOMER-FILE IF WS-FILE-STATUS = "00" DISPLAY "Customer: " CUSTOMER-NAME END-IF END-PERFORM CLOSE CUSTOMER-FILE STOP RUN.
Basic sequential file assignment with literal string and file status checking.
123456789101112131415161718192021222324252627282930313233343536IDENTIFICATION DIVISION. PROGRAM-ID. DYNAMIC-FILE-ASSIGNMENT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO WS-INPUT-FILE-NAME ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-FILE-STATUS. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-INPUT-FILE-NAME PIC X(50). 01 WS-FILE-STATUS PIC X(2). 01 WS-USER-INPUT PIC X(50). PROCEDURE DIVISION. MAIN-PROCESS. * Get file name from user DISPLAY "Enter input file name: " ACCEPT WS-USER-INPUT * Set the file name for assignment MOVE WS-USER-INPUT TO WS-INPUT-FILE-NAME * Open the dynamically assigned file OPEN INPUT INPUT-FILE IF WS-FILE-STATUS NOT = "00" DISPLAY "Error opening file: " WS-FILE-STATUS STOP RUN END-IF DISPLAY "File opened successfully: " WS-INPUT-FILE-NAME CLOSE INPUT-FILE STOP RUN.
Dynamic file assignment using a data name that can be set at runtime.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950IDENTIFICATION DIVISION. PROGRAM-ID. DEVICE-ASSIGNMENT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO PRINTER ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT LOG-FILE ASSIGN TO "LOG.TXT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT CONSOLE-OUTPUT ASSIGN TO CONSOLE ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE. 01 REPORT-LINE PIC X(80). FD LOG-FILE. 01 LOG-LINE PIC X(80). FD CONSOLE-OUTPUT. 01 CONSOLE-LINE PIC X(80). PROCEDURE DIVISION. MAIN-PROCESS. * Write to printer OPEN OUTPUT REPORT-FILE MOVE "This goes to the printer" TO REPORT-LINE WRITE REPORT-LINE CLOSE REPORT-FILE * Write to log file OPEN OUTPUT LOG-FILE MOVE "This goes to the log file" TO LOG-LINE WRITE LOG-LINE CLOSE LOG-FILE * Write to console OPEN OUTPUT CONSOLE-OUTPUT MOVE "This goes to the console" TO CONSOLE-LINE WRITE CONSOLE-LINE CLOSE CONSOLE-OUTPUT STOP RUN.
Different types of device assignments including printer, file, and console.
1234567891011121314151617181920212223242526272829303132333435363738394041424344IDENTIFICATION DIVISION. PROGRAM-ID. INDEXED-FILE-ASSIGNMENT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INVENTORY-FILE ASSIGN TO "INVENTORY.IDX" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS PRODUCT-ID FILE STATUS IS WS-FILE-STATUS. DATA DIVISION. FILE SECTION. FD INVENTORY-FILE. 01 INVENTORY-RECORD. 05 PRODUCT-ID PIC 9(6). 05 PRODUCT-NAME PIC X(30). 05 QUANTITY-ON-HAND PIC 9(5). 05 UNIT-PRICE PIC 9(6)V99. WORKING-STORAGE SECTION. 01 WS-FILE-STATUS PIC X(2). 01 WS-PRODUCT-ID PIC 9(6). PROCEDURE DIVISION. MAIN-PROCESS. OPEN I-O INVENTORY-FILE IF WS-FILE-STATUS NOT = "00" DISPLAY "Error opening indexed file: " WS-FILE-STATUS STOP RUN END-IF * Read a specific record MOVE 123456 TO WS-PRODUCT-ID READ INVENTORY-FILE IF WS-FILE-STATUS = "00" DISPLAY "Product: " PRODUCT-NAME ELSE DISPLAY "Product not found" END-IF CLOSE INVENTORY-FILE STOP RUN.
Indexed file assignment with random access and record key specification.
Understanding best practices ensures proper file assignment and system integration.
Pitfall | Problem | Solution |
---|---|---|
Hardcoded paths | Poor portability | Use environment variables or configuration |
Missing error handling | Program crashes | Check file status codes |
Incorrect device names | Assignment failures | Verify device availability |
Case sensitivity | File not found | Match exact case requirements |
Permission issues | Access denied | Check file permissions |
1234567891011121314* Windows file assignment SELECT DATA-FILE ASSIGN TO "C:\DATA\CUSTOMER.DAT" * Unix/Linux file assignment SELECT DATA-FILE ASSIGN TO "/data/customer.dat" * Mainframe dataset assignment SELECT DATA-FILE ASSIGN TO "USER.CUSTOMER.DATA" * Environment variable usage SELECT DATA-FILE ASSIGN TO "$DATADIR/customer.dat" * Relative path assignment SELECT DATA-FILE ASSIGN TO "./data/customer.dat"
Different platforms may require different assignment syntax.
Usage | Syntax | Example |
---|---|---|
Literal file name | ASSIGN TO "filename" | ASSIGN TO "CUSTOMER.DAT" |
Variable assignment | ASSIGN TO data-name | ASSIGN TO WS-FILE-NAME |
System device | ASSIGN TO device-constant | ASSIGN TO PRINTER |
Standard I/O | ASSIGN TO SYSIN/SYSOUT | ASSIGN TO SYSIN |
Console I/O | ASSIGN TO CONSOLE | ASSIGN TO CONSOLE |
1. What is the primary purpose of the ASSIGN TO clause in COBOL?
2. In which division is the ASSIGN TO clause typically used?
3. What type of value can be used with ASSIGN TO?
4. What is the relationship between ASSIGN TO and file organization?
5. Which of the following is a valid ASSIGN TO usage?
Understanding the SELECT statement for file definition.
File control paragraph structure and usage.
Different file organization types in COBOL.
File status codes and error handling.
Environment division structure and components.