COBOL Типы данных

У меня есть путаница в отношении типов данных COBOL. Как и во многих интервью, предлагается объяснить разницу между COMP-3 и COMP... Какая разница? каково значение режимов использования в COBOL и как это связано с типами данных?

Спасибо и с уважением, Манаси Кулкарни

Ответы

Ответ 1

USAGE в COBOL описывает, как элемент данных должен использоваться. Несколько примеров ИСПОЛЬЗОВАНИЯ:

  • DISPLAY. Это идентифицирует элемент, который может быть напечатан на терминале или отчет. Это может быть или не быть числом (например, может быть текстовым значением). описание элемента DISPLAY задается предложением PICture. Например: PIC 9(5) USAGE DISPLAY описывает пятизначное число, которое может быть отображено (напечатано). Часто USAGE DISPLAY отключается, поскольку подразумевается, если отсутствует.
  • INDEX. Это идентифицирует элемент, используемый как индекс в таблице (OCCURS).
  • COMPsomething указывает, что элемент данных должен использоваться в арифметические операции (т.е. некоторые числа).

Существуют различные типы числового элемента. Два из наиболее часто используемых числовые типы данных:

  • COMPUTATION или COMP. Это эквивалентно BINARY
  • COMPUTATION-3 или COMP-3. Это эквивалентно PACKED-DECIMAL

Элементы данных COMP (BINARY), как правило, являются наиболее эффективным способом выполнения расчеты по элементам данных, которые представляют собой целочисленные значения.

Элементы данных COMP-3 (PACKED-DECIMAL) используются в COBOL, потому что они сохраняют фиксированное число десятичных точек. Все вычисления приводят к результату с заданным числом десятичных точек. Это особенно полезно для операций типа учета. Числа с плавающей запятой составляют число цифр после десятичная точка (например, десятичная точка может "плавать" ), которая равна а не способ представления финансовых операций.

Вы можете найти полный список COMPUTATION для IBM Enterprise COBOL здесь

Одна из проблем, с которыми сталкиваются многие программисты, начиная с COBOL, - это понимая, что элемент COMP отлично подходит для математики, но не может быть отображается (печатается) до тех пор, пока он не будет преобразован в элемент DISPLAYable через оператор MOVE. Если вы переместите элемент COMP в отчет или на экран не будет очень хорошо представлен. Его нужно переместить в ДИСПЛЕЙ сначала.

Другая вещь, которую вы можете исследовать немного больше, - это отношения между PICture и ИСПОЛЬЗОВАНИЕМ при определении переменных в COBOL. Вот ссылка на очень хороший вводный Учебник COBOL из Университета Лимерика.

Ответ 2

COBOL действительно имеет только два типа данных: числа и строки.

Макет каждого поля в записи COBOL точно определяется предложением PICTURE (обычно сокращенным PIC). Наиболее распространенными являются:

  • PIC X для строк. PIC X(100) означает 100-байтовую строку.
  • PIC 9 для чисел, необязательно с S (знак) или V (неявная десятичная точка). Например, PIC S9(7)V99 означает подписанное число с 7 цифрами слева от неявной десятичной точки и 2 цифры справа.

Числовые поля могут иметь предложение USAGE для оптимизации их хранения. Наиболее распространенными USAGE являются DISPLAY, COMP и COMP-3.

DISPLAY хранит каждую цифру в качестве символа. Например, PIC 9(4) VALUE 123 хранит номер, как если бы это была строка "0123". И PIC 9(4)V99 VALUE 123.45 сохраняет его как "012345". Обратите внимание, что десятичная точка фактически не сохраняется.

Это неэффективный формат, поскольку для каждой цифры требуется 8 бит. Но у него есть "оптимизация" для подписанных номеров, используя половину последнего байта для сохранения знака. Обычно цифры EBCDIC имеют высокий уровень шума F, поэтому 0123 - F0 F1 F2 F3. Но -0123 - F0 F1 F2 D3; D указывает на отрицательный. C означает положительный, а F означает беззнаковое (то есть положительное). (Подобные форматы используются в версиях ASCII COBOL, но не как стандартизованные.)

COMP-3 является двоично-кодированным десятичным символом с завершающим знаком nybble. PIC 9(3) COMP-3 VALUE 123 становится двумя байтами 12 3F.

COMP или BINARY - это родной двоичный формат, как и short, int или long в C.

Ответ 3

Как следует из другого ответа, COMP означает двоичный файл с большим двоичным кодом. COMP-3 упакован десятичным - это означает, что одна десятичная цифра отображается на каждый полубайт.

Я не уверен, что предыдущий ответ получил проблему вокруг точности.

PIC S9 (9) V9 (9) COMP а также PIC S9 (9) V9 (9) COMP-3

Иметь точно такую ​​же точность. Это часть стандарта ANSI85. Задача компилятора и среды выполнения заключается в обеспечении того, чтобы двоичное представление в COMP содержало соответствующие преобразования, чтобы обеспечить точно такие же результаты, как и при отображении использования или COMP-3.

Компьютеры мэйнфреймов IBM имеют упакованные десятичные вычисления в аппаратном обеспечении. Это очень полезно, потому что преобразование десятичной в двоичную шкалу с n квадратом n является длиной числа. Это означает, что COMP-3 каждый раз является самым быстрым форматом мэйнфрейма, но с меньшей вероятностью находится в распределенных системах. Однако это снова не всегда так. Например, решение COOBOL на основе Micro Focus будет быстрее работать на COMP-3, чем COMP-5, для очень большой десятичной точности ( > 18 цифр), но наоборот. Управляемая система COBOL от Micro Focus почти всегда быстрее всего работает на COMP (на самом деле COMP-5 является лучшим, что аналогично COMP, но будет иметь аппаратный endian, а не использовать макет памяти большого числа).

Наконец, я предлагаю, что для промежуточных значений и общей математики более новые определения данных двоично-длинного и двоичного-двойных являются лучшим выбором, потому что тогда компилятор может принимать решения о том, как хранить и оптимизировать для вас.

Подробнее о COBOL на распределенном и управляемом COBOL проверьте этот кнол: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4, а также не стесняйтесь искать cobol на facebook:)

Ответ 4

Что касается определения того, какой тип данных использовать, его можно сделать очень сложным - НО - простой набор рекомендаций:

DISPLAY и Edited Zone Decimal следует использовать только для отображения цифр в отчете или sysout. Переместите поля COMP и COMP-3 в поле DISPLAY/Edited перед тем, как поместить его в отчет или в sysout.

COMP - имеет самую быструю скорость вычисления для целых

COMP-3 (PACKED Decimal) - следует использовать, когда поддерживаются десятичные позиции.

Поля COMP и COMP-3 могут использоваться вместе в расчетах. Компилятор определит, какой тип поля будет преобразован (под обложками) в один общий тип числовых данных - на основе правил.

Ответ 5

Форум мэйнфреймов - это всеобъемлющее хранилище учебника по мэйнфреймам для COBOL, DB2, CICS, JCL, VSAM, CA7, TWS. Проверьте ссылку ниже на учебники, касающиеся типов данных COBOL.

Благодарю.