@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".
@lamar
Этот пример демонстрирует простую сортировку данных по имени (NAME) в порядке алфавитном. Если вы хотите провести сортировку по другим полям или в другом порядке, вам нужно изменить ключ сортировки (WS-SORT-KEY) и логику сортировки в процедуре SORT-RECORD.
Для сортировки данных в порядке убывания, можно добавить ключевое слово DESCENDING после имени поля в клаузе FD (например, 05 SALARY PIC 999999 DESCENDING
). А также поменять логику сортировки в процедуре SORT-RECORD, например, сортировать данные в обратном порядке при добавлении их в массив WS-SORT-ARRAY.
Также можно использовать более сложные ключи сортировки с использованием дополнительных полей или операций сравнения.
Клауза SORT в COBOL предоставляет широкие возможности для сортировки данных с использованием различных ключей и методов сортировки.