Data sorting arranges records in specific order based on key fields using COBOL SORT statement and external utilities. Learn sorting algorithms, multi-key sorting, and techniques for organizing data efficiently.
123456789101112131415161718192021222324252627282930313233WORKING-STORAGE SECTION. 01 SORT-CONTROL. 05 SORT-FILE-STATUS PIC X(2). 05 SORT-RECORD-COUNT PIC 9(6) VALUE 0. 05 SORT-ERROR-COUNT PIC 9(3) VALUE 0. PROCEDURE DIVISION. PERFORM BASIC-SORT-OPERATION BASIC-SORT-OPERATION. DISPLAY 'Basic SORT Statement demonstration:' *> Sort customer records by customer ID SORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-ID USING CUSTOMER-INPUT-FILE GIVING CUSTOMER-OUTPUT-FILE DISPLAY 'Sort operation completed' DISPLAY 'Records sorted by Customer ID in ascending order' *> Check sort file status IF SORT-FILE-STATUS = '00' DISPLAY 'Sort completed successfully' ELSE DISPLAY 'Sort error occurred: ' SORT-FILE-STATUS ADD 1 TO SORT-ERROR-COUNT END-IF. *> File definitions would be in FILE SECTION *> FD CUSTOMER-INPUT-FILE *> FD CUSTOMER-OUTPUT-FILE *> SD SORT-WORK-FILE
Use the SORT statement to arrange records in ascending or descending order based on key fields. Specify input file (USING), output file (GIVING), sort keys, and sort order for basic sorting operations.
123456789101112131415161718192021222324252627282930313233343536373839404142434445WORKING-STORAGE SECTION. 01 MULTI-KEY-SORT-CONTROL. 05 SORT-KEY-COUNT PIC 9(2) VALUE 3. 05 SORT-KEY-1 PIC X(10) VALUE 'DEPARTMENT'. 05 SORT-KEY-2 PIC X(10) VALUE 'SALARY'. 05 SORT-KEY-3 PIC X(10) VALUE 'EMPLOYEE-ID'. PROCEDURE DIVISION. PERFORM MULTI-KEY-SORT-OPERATION MULTI-KEY-SORT-OPERATION. DISPLAY 'Multi-Key SORT demonstration:' *> Sort by multiple keys: Department (ASC), Salary (DESC), Employee ID (ASC) SORT SORT-WORK-FILE ON ASCENDING KEY EMPLOYEE-DEPARTMENT ON DESCENDING KEY EMPLOYEE-SALARY ON ASCENDING KEY EMPLOYEE-ID USING EMPLOYEE-INPUT-FILE GIVING EMPLOYEE-OUTPUT-FILE DISPLAY 'Multi-key sort completed:' DISPLAY 'Primary Key: Department (Ascending)' DISPLAY 'Secondary Key: Salary (Descending)' DISPLAY 'Tertiary Key: Employee ID (Ascending)' *> Verify sort results PERFORM VERIFY-SORT-RESULTS. VERIFY-SORT-RESULTS. OPEN INPUT EMPLOYEE-OUTPUT-FILE MOVE 0 TO SORT-RECORD-COUNT PERFORM UNTIL EOF READ EMPLOYEE-OUTPUT-FILE AT END SET EOF TO TRUE NOT AT END ADD 1 TO SORT-RECORD-COUNT DISPLAY 'Sorted Record ' SORT-RECORD-COUNT ':' DISPLAY ' Department: ' EMPLOYEE-DEPARTMENT DISPLAY ' Salary: ' EMPLOYEE-SALARY DISPLAY ' Employee ID: ' EMPLOYEE-ID END-READ END-PERFORM CLOSE EMPLOYEE-OUTPUT-FILE.
Implement multi-key sorting by specifying multiple sort keys with different sort orders. Use primary, secondary, and tertiary keys to create complex sort criteria for sophisticated data organization.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758WORKING-STORAGE SECTION. 01 PROCEDURE-SORT-CONTROL. 05 INPUT-PROCEDURE-COUNT PIC 9(4) VALUE 0. 05 OUTPUT-PROCEDURE-COUNT PIC 9(4) VALUE 0. 05 TOTAL-RECORDS-PROCESSED PIC 9(6) VALUE 0. PROCEDURE DIVISION. PERFORM PROCEDURE-SORT-OPERATION PROCEDURE-SORT-OPERATION. DISPLAY 'SORT with Input/Output Procedures demonstration:' *> Sort with input and output procedures SORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-ID INPUT PROCEDURE IS INPUT-PROCEDURE OUTPUT PROCEDURE IS OUTPUT-PROCEDURE DISPLAY 'Procedure-based sort completed' DISPLAY 'Input records processed: ' INPUT-PROCEDURE-COUNT DISPLAY 'Output records processed: ' OUTPUT-PROCEDURE-COUNT DISPLAY 'Total records: ' TOTAL-RECORDS-PROCESSED. INPUT-PROCEDURE SECTION. INPUT-PROCEDURE. DISPLAY 'Input Procedure: Processing input records' OPEN INPUT CUSTOMER-INPUT-FILE PERFORM UNTIL EOF READ CUSTOMER-INPUT-FILE AT END SET EOF TO TRUE NOT AT END *> Apply input filtering or transformation IF CUSTOMER-STATUS = 'A' RELEASE SORT-RECORD FROM CUSTOMER-RECORD ADD 1 TO INPUT-PROCEDURE-COUNT END-IF END-READ END-PERFORM CLOSE CUSTOMER-INPUT-FILE. OUTPUT-PROCEDURE SECTION. OUTPUT-PROCEDURE. DISPLAY 'Output Procedure: Processing sorted records' OPEN OUTPUT CUSTOMER-OUTPUT-FILE PERFORM UNTIL EOF RETURN SORT-WORK-FILE AT END SET EOF TO TRUE NOT AT END *> Apply output formatting or additional processing WRITE CUSTOMER-OUTPUT-RECORD FROM SORT-RECORD ADD 1 TO OUTPUT-PROCEDURE-COUNT END-RETURN END-PERFORM CLOSE CUSTOMER-OUTPUT-FILE.
Use input and output procedures with SORT statement for custom processing. Input procedures filter or transform data before sorting, while output procedures format or process data after sorting.
12345678910111213141516171819202122232425262728293031323334WORKING-STORAGE SECTION. 01 EXTERNAL-SORT-CONTROL. 05 SORT-UTILITY-NAME PIC X(8) VALUE 'SORT'. 05 SORT-PARAMETERS PIC X(100). 05 SORT-RETURN-CODE PIC 9(4). 05 SORT-MESSAGE PIC X(50). PROCEDURE DIVISION. PERFORM EXTERNAL-SORT-OPERATION EXTERNAL-SORT-OPERATION. DISPLAY 'External Sort Utility demonstration:' *> Prepare sort parameters STRING 'FIELDS=(1,6,CH,A,7,30,CH,A,37,10,PD,A)' ',FORMAT=CH' ',EQUALS' INTO SORT-PARAMETERS DISPLAY 'Sort Parameters: ' SORT-PARAMETERS *> Call external sort utility CALL SORT-UTILITY-NAME USING SORT-PARAMETERS *> Check return code IF SORT-RETURN-CODE = 0 DISPLAY 'External sort completed successfully' MOVE 'SORT COMPLETED' TO SORT-MESSAGE ELSE DISPLAY 'External sort failed with return code: ' SORT-RETURN-CODE MOVE 'SORT FAILED' TO SORT-MESSAGE END-IF DISPLAY 'Sort Message: ' SORT-MESSAGE.
Use external sort utilities for large datasets that exceed memory capacity. Define sort parameters including field specifications, data formats, and sort options for efficient external sorting.
1234567891011121314151617181920212223242526272829303132333435363738WORKING-STORAGE SECTION. 01 SORT-PERFORMANCE-CONTROL. 05 SORT-MEMORY-SIZE PIC 9(8) VALUE 1000000. 05 SORT-BUFFER-SIZE PIC 9(6) VALUE 10000. 05 SORT-TAPE-COUNT PIC 9(2) VALUE 4. 05 SORT-PERFORMANCE-METRICS. 10 SORT-START-TIME PIC 9(14). 10 SORT-END-TIME PIC 9(14). 10 SORT-DURATION PIC 9(6). 10 RECORDS-PER-SECOND PIC 9(6). PROCEDURE DIVISION. PERFORM OPTIMIZED-SORT-OPERATION OPTIMIZED-SORT-OPERATION. DISPLAY 'Optimized SORT Operation demonstration:' MOVE FUNCTION CURRENT-TIME TO SORT-START-TIME *> Optimized sort with performance parameters SORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-ID USING CUSTOMER-INPUT-FILE GIVING CUSTOMER-OUTPUT-FILE MOVE FUNCTION CURRENT-TIME TO SORT-END-TIME COMPUTE SORT-DURATION = SORT-END-TIME - SORT-START-TIME DISPLAY 'Sort Performance Metrics:' DISPLAY 'Memory Size: ' SORT-MEMORY-SIZE ' bytes' DISPLAY 'Buffer Size: ' SORT-BUFFER-SIZE ' records' DISPLAY 'Tape Count: ' SORT-TAPE-COUNT DISPLAY 'Sort Duration: ' SORT-DURATION ' milliseconds' IF SORT-DURATION > 0 COMPUTE RECORDS-PER-SECOND = (SORT-RECORD-COUNT * 1000) / SORT-DURATION DISPLAY 'Records per Second: ' RECORDS-PER-SECOND END-IF.
Optimize sort performance by configuring memory size, buffer size, tape count, and other parameters. Monitor sort duration and throughput to achieve optimal sorting performance for large datasets.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455WORKING-STORAGE SECTION. 01 SORT-ERROR-HANDLING. 05 SORT-ERROR-TYPES. 10 INPUT-ERROR PIC 9(3) VALUE 0. 10 OUTPUT-ERROR PIC 9(3) VALUE 0. 10 SORT-ERROR PIC 9(3) VALUE 0. 10 MEMORY-ERROR PIC 9(3) VALUE 0. 05 ERROR-RESPONSES. 10 ERROR-RECOVERY-ACTION PIC X(20). 10 ERROR-NOTIFICATION PIC X(50). 10 ERROR-LOG-ENTRY PIC X(100). PROCEDURE DIVISION. PERFORM SORT-WITH-ERROR-HANDLING SORT-WITH-ERROR-HANDLING. DISPLAY 'SORT Error Handling demonstration:' *> Attempt sort operation with error handling SORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-ID USING CUSTOMER-INPUT-FILE GIVING CUSTOMER-OUTPUT-FILE *> Check for various error conditions EVALUATE SORT-FILE-STATUS WHEN '00' DISPLAY 'Sort completed successfully' WHEN '02' DISPLAY 'Sort completed with warnings' ADD 1 TO SORT-ERROR WHEN '04' DISPLAY 'Sort completed with data truncation' ADD 1 TO OUTPUT-ERROR WHEN '10' DISPLAY 'End of file reached' WHEN '22' DISPLAY 'Duplicate key error' ADD 1 TO SORT-ERROR WHEN '23' DISPLAY 'Record not found' ADD 1 TO INPUT-ERROR WHEN '24' DISPLAY 'Boundary violation' ADD 1 TO MEMORY-ERROR WHEN OTHER DISPLAY 'Unexpected error: ' SORT-FILE-STATUS ADD 1 TO SORT-ERROR END-EVALUATE DISPLAY 'Error Handling Results:' DISPLAY 'Input Errors: ' INPUT-ERROR DISPLAY 'Output Errors: ' OUTPUT-ERROR DISPLAY 'Sort Errors: ' SORT-ERROR DISPLAY 'Memory Errors: ' MEMORY-ERROR.
Implement comprehensive error handling for sort operations including input errors, output errors, sort errors, and memory errors. Use EVALUATE statement to handle different error conditions and provide appropriate responses.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455WORKING-STORAGE SECTION. 01 SORT-VALIDATION-CONTROL. 05 VALIDATION-RESULTS. 10 VALID-RECORDS PIC 9(6) VALUE 0. 10 INVALID-RECORDS PIC 9(6) VALUE 0. 10 DUPLICATE-RECORDS PIC 9(6) VALUE 0. 10 TOTAL-RECORDS PIC 9(6) VALUE 0. 05 VALIDATION-CHECKS. 10 KEY-VALIDATION PIC X VALUE 'Y'. 10 FORMAT-VALIDATION PIC X VALUE 'Y'. 10 RANGE-VALIDATION PIC X VALUE 'Y'. PROCEDURE DIVISION. PERFORM SORT-VALIDATION-OPERATION SORT-VALIDATION-OPERATION. DISPLAY 'SORT Data Validation demonstration:' *> Validate data before sorting PERFORM VALIDATE-INPUT-DATA IF VALIDATION-SUCCESSFUL DISPLAY 'Data validation passed - proceeding with sort' SORT SORT-WORK-FILE ON ASCENDING KEY CUSTOMER-ID USING CUSTOMER-INPUT-FILE GIVING CUSTOMER-OUTPUT-FILE DISPLAY 'Sort completed with validated data' ELSE DISPLAY 'Data validation failed - sort aborted' DISPLAY 'Invalid records found: ' INVALID-RECORDS END-IF DISPLAY 'Validation Results:' DISPLAY 'Valid Records: ' VALID-RECORDS DISPLAY 'Invalid Records: ' INVALID-RECORDS DISPLAY 'Duplicate Records: ' DUPLICATE-RECORDS DISPLAY 'Total Records: ' TOTAL-RECORDS. VALIDATE-INPUT-DATA. OPEN INPUT CUSTOMER-INPUT-FILE MOVE 0 TO VALID-RECORDS MOVE 0 TO INVALID-RECORDS PERFORM UNTIL EOF READ CUSTOMER-INPUT-FILE AT END SET EOF TO TRUE NOT AT END ADD 1 TO TOTAL-RECORDS PERFORM VALIDATE-SINGLE-RECORD END-READ END-PERFORM CLOSE CUSTOMER-INPUT-FILE.
Validate data before sorting to ensure data quality and prevent sort errors. Check key fields, data formats, ranges, and duplicates to ensure reliable sort operations.
123456789101112131415161718192021222324252627282930WORKING-STORAGE SECTION. 01 SORT-BEST-PRACTICES. 05 SORT-DESIGN-PRINCIPLES. 10 SORT-KEY-SELECTION PIC X(20) VALUE 'MEANINGFUL'. 10 SORT-ORDER-CONSISTENCY PIC X(20) VALUE 'CONSISTENT'. 10 SORT-PERFORMANCE PIC X(20) VALUE 'OPTIMIZED'. 05 SORT-MAINTENANCE. 10 SORT-DOCUMENTATION PIC X(50) VALUE 'WELL DOCUMENTED'. 10 SORT-TESTING PIC X(50) VALUE 'THOROUGHLY TESTED'. 10 SORT-MONITORING PIC X(50) VALUE 'CONTINUOUSLY MONITORED'. PROCEDURE DIVISION. PERFORM DEMONSTRATE-SORT-BEST-PRACTICES DEMONSTRATE-SORT-BEST-PRACTICES. DISPLAY 'SORT Best Practices demonstration:' DISPLAY 'Key Selection: ' SORT-KEY-SELECTION DISPLAY 'Order Consistency: ' SORT-ORDER-CONSISTENCY DISPLAY 'Performance: ' SORT-PERFORMANCE DISPLAY 'Documentation: ' SORT-DOCUMENTATION DISPLAY 'Testing: ' SORT-TESTING DISPLAY 'Monitoring: ' SORT-MONITORING DISPLAY 'Best Practices Guidelines:' DISPLAY '1. Choose meaningful sort keys' DISPLAY '2. Maintain consistent sort order' DISPLAY '3. Optimize sort performance' DISPLAY '4. Document sort logic clearly' DISPLAY '5. Test sort operations thoroughly' DISPLAY '6. Monitor sort performance continuously'.
Follow best practices for sort operations: choose meaningful sort keys, maintain consistent sort order, optimize performance, document sort logic, test thoroughly, and monitor performance continuously.