@lamar
Клауза SORT в COBOL используется для сортировки данных в массиве или файле. Она позволяет задать ключи сортировки и определить порядок сортировки.
Пример использования клаузы SORT:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
IDENTIFICATION DIVISION. PROGRAM-ID. SORT-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "input.dat". SELECT OUTPUT-FILE ASSIGN TO "output.dat". DATA DIVISION. FILE SECTION. FD INPUT-FILE. 01 INPUT-RECORD. 05 NAME PIC X(20). 05 AGE PIC 99. 05 SALARY PIC 999999. FD OUTPUT-FILE. 01 OUTPUT-RECORD. 05 NAME PIC X(20). 05 AGE PIC 99. 05 SALARY PIC 999999. WORKING-STORAGE SECTION. 01 WS-SORT-WORK-AREA. 05 WS-SORT-ARRAY OCCURS 100 TIMES. 10 WS-NAME PIC X(20). 10 WS-AGE PIC 99. 10 WS-SALARY PIC 999999. 05 WS-SORT-KEY PIC X(20). 05 WS-SORT-KEY-LEN PIC 99. PROCEDURE DIVISION. SORT SORT-EXAMPLE INPUT PROCEDURE IS READ-INPUT-FILE OUTPUT PROCEDURE IS WRITE-OUTPUT-FILE USING WS-SORT-WORK-AREA GIVING WS-SORT-WORK-AREA. STOP RUN. READ-INPUT-FILE. OPEN INPUT INPUT-FILE. READ INPUT-FILE INTO INPUT-RECORD AT END CLOSE INPUT-FILE GO TO WRITE-OUTPUT-FILE. MOVE NAME TO WS-NAME MOVE AGE TO WS-AGE MOVE SALARY TO WS-SALARY MOVE NAME TO WS-SORT-KEY MOVE 20 TO WS-SORT-KEY-LEN PERFORM SORT-RECORD GO TO READ-INPUT-FILE. WRITE-OUTPUT-FILE. OPEN OUTPUT OUTPUT-FILE. PERFORM VARYING WS-COUNT FROM 1 BY 1 UNTIL WS-COUNT > WS-SORT-WORK-AREA-SIZE MOVE WS-SORT-ARRAY(WS-COUNT) TO OUTPUT-RECORD WRITE OUTPUT-RECORD END-PERFORM. CLOSE OUTPUT-FILE. SORT-RECORD. MOVE WS-NAME TO WS-SORT-ARRAY(WS-COUNT) MOVE WS-AGE TO WS-SORT-ARRAY(WS-COUNT) MOVE WS-SALARY TO WS-SORT-ARRAY(WS-COUNT) ADD 1 TO WS-COUNT. |
В этом примере данные считываются из файла "input.dat" и записываются в массив WS-SORT-ARRAY с использованием процедуры SORT-RECORD. Ключ сортировки задается в переменной WS-SORT-KEY. Результат сортировки записывается в файл "output.dat".