Есть ли способ записывать переменные в COBOL, как и в других языках? - PullRequest
1 голос
/ 28 июня 2019

Я знаю, что есть операнд DIPSLAY, который позволяет вам «регистрировать» любое значение переменной.Тем не менее, мой вопрос: есть ли что-то вроде var_dump PHP console.log javascript, который, когда вы даете им переменную, они печатают со значениями, а также с именем переменной.

Скажем, дляНапример, у меня есть следующие данные:

01 MY-DATA.
   05 FIRST-PART      PIC X(05) VALUE 'DATA1'.
   05 SECOND-PART     PIC X(05) VALUE 'DATA2'.

Мой вопрос: есть ли в моем журнале что-то подобное (с одним вызовом и для любой заданной переменной):

'MY-DATA:'

'FIRSTPART: DATA1'

'ВТОРАЯ ЧАСТЬ: DATA2'

Спасибо

Ответы [ 3 ]

4 голосов
/ 28 июня 2019

Не с любым поддерживаемым в настоящее время компилятором мейнфрейма IBM COBOL (я вижу, вы пометили свой вопрос как "мейнфрейм").

Раньше был оператор EXHIBIT, который не реализован на предприятии КОБОЛ.По этой ссылке обсуждается вопрос о самостоятельной реализации аналогичной функциональности.

Я написал для себя макрос редактирования ISPF, чтобы сгенерировать код на языке COBOL для выполнения эквивалентного DISPLAY, как указано в ссылке на документацию IBM выше.

Overkill - это вызов CEE3DMP, но я знаю, что когда я разочарован, я занимался overkill.

Возможно, вы сможете использовать одну из других, более детализированных языковых сред dump dump например, CEEVDMP или CEEHDMP.

2 голосов
/ 28 июня 2019

Нет встроенной опции для этого в большинстве языков программирования (многие языки программирования OO, например, имеют метод toString (или аналогичный), но это делает то, что говорит объект (и может не включать ни одного фактического содержимого переменной a).

COBOL работает с операторами (например, DISPLAY, которые вы упомянули), в то время как var_dump является встроенной функцией php. В разных языках программирования ОО есть возможность использовать своего рода рефлексию, позволяющую вам (с некоторыми предварительными условиями) написать функцию var_dump самостоятельно, но, насколько мне известно, ни один компилятор COBOL, поддерживающий ОО, не имеет функции отражения.

Как упомянул @cschneid, был оператор EXHIBIT (на самом деле эта ссылка - лучший документ, который я нашел для него), но ни одна реализация, которая его поддерживает (насколько я знаю), не отображает подполя записи как отдельные, как это делает var_dump. CEE3DMP , поскольку z / OS не поможет вам, так как выдает все, что вы укажете, но вы не можете указать одну переменную. Другие подпрограммы дампа также не будут работать, как вы просили (для записи, разделенной на подполя).

Таким образом, чтобы ответить на вопрос - «нет, нет стандартной опции для создания дампов записей».

Если вы не ограничены какой-либо реализацией COBOL, вы можете добавить эту языковую функцию в GnuCOBOL, также работает как 64bit-COBOL в z / OS; -)

1 голос
/ 04 июля 2019

В Enterprise COBOL V6R1 вы можете использовать оператор JSON GENERATE для MY-DATA, затем преобразовать вывод из UTF-16 в EBCDIC, а затем отобразить его.

   Working-storage section.
     01 MY-DATA.
       05 FIRST-PART      PIC X(05) VALUE 'DATA1'.
       05 SECOND-PART     PIC X(05) VALUE 'DATA2'.
     1 i pic 9999 comp.
     1 jn pic N(100).
   Procedure division.
     example.
       json generate jn from MY-DATA count i
       display function display-of(jn(1:i))
       stop run.

, и результат будет выглядеть следующим образом:

{"MY-DATA":{"FIRST-PART":"DATA1","SECOND-PART":"DATA2"}}

Это не совсем то, что вы хотели, но «ближе».Вы можете легко изменить приведенный выше пример в раздел, а затем выполнить его (что будет похоже на «один вызов»)

...