Как использовать клаузу SORT в COBOL?

Пользователь

от lamar , в категории: Другие , год назад

Как использовать клаузу SORT в COBOL?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от deshaun_cormier , год назад

@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".

Пользователь

от violette_robel , день назад

@lamar 

Этот пример демонстрирует простую сортировку данных по имени (NAME) в порядке алфавитном. Если вы хотите провести сортировку по другим полям или в другом порядке, вам нужно изменить ключ сортировки (WS-SORT-KEY) и логику сортировки в процедуре SORT-RECORD.


Для сортировки данных в порядке убывания, можно добавить ключевое слово DESCENDING после имени поля в клаузе FD (например, 05 SALARY PIC 999999 DESCENDING). А также поменять логику сортировки в процедуре SORT-RECORD, например, сортировать данные в обратном порядке при добавлении их в массив WS-SORT-ARRAY.


Также можно использовать более сложные ключи сортировки с использованием дополнительных полей или операций сравнения.


Клауза SORT в COBOL предоставляет широкие возможности для сортировки данных с использованием различных ключей и методов сортировки.