COBOL предоставляет несколько способов выполнить такое назначение. Начать с
заявления, изложенные в вашем вопросе:
01 A PIC X(6) VALUE "200030".
01 B PIC 9(6).
Объявление другого элемента данных в соответствии с:
01 AAAABB.
05 AAAA PIC 9(4).
05 BB PIC 9(2).
AAAABB
объявляет структуру записи (составной элемент данных), содержащую два элементарных
элементы данных: AAAA
и BB
, оба из которых являются числовыми. Теперь вы можете сделать любой из
следующим образом:
MOVE A(1:4) TO B ; DISPLAY B
MOVE A TO AAAABB ; DISPLAY AAAA
DISPLAY BB
Отображаемый результат будет:
002000
2000
30
Поскольку AAAABB
является составным элементом, он имеет неявный тип данных PIC X
. Это в свою очередь
позволяет назначить практически любое значение данных, а затем разложить его, ссылаясь на
к его отдельным компонентам.
Осторожно, назначение, такое как:
MOVE A TO AAAA; DISPLAY AAAA
Обычно он компилируется (с предупреждениями об усечении) и выдает следующее
Результат:
0030
Наиболее значимые цифры обрезаны (вероятно, не то, что вы хотели).
COBOL достаточно гибок в отношении манипулирования данными. Один
вещь, которую вы должны остерегаться (защита от), является нечисловым
значения для числовых элементов данных, как в:
MOVE "20++30" TO A
MOVE A TO AAAABB
Это будет "работать" очень хорошо, пока вы не попытаетесь сделать что-то вроде:
ADD +1 TO AAAA
Если вам повезет, в этот момент он взорвется (в зависимости от вашего компилятора и
фактические нечисловые). Чтобы защититься от ошибок такого типа, вы всегда должны
включить логику в соответствии с:
MOVE A TO AAAABB
IF (AAAA NOT NUMERIC) OR (BB NOT NUMERIC)
PERFORM BAD-DATA-ASSIGNMENT
END-IF
ADD 1 TO AAAA