Получить имена полей во время работы программы

У меня есть копировальная книга, например:

  01 MY-STRUCTURE.
     05 STRUCTURE-NAME PIC X(20).
     05 STRUCTURE-DATE PIC X(8).
     05 STRUCTURE-LIB PIC 9(3).

Как я могу получить название своих полей?

Я хочу иметь программу, которая может получить любую тетрадь и динамически записывать ее поля и значения.

Я хочу записать его в выходной файл следующим образом:

  "STRUCTURE-NAME-> TOTO"
  "STRUCTURE-DATE-> 19780301"
  "STRUCTURE-LIB -> 123"

person Rockley    schedule 05.01.2015    source источник
comment
Чтобы уточнить: у вас есть программа C на языке COBOL, и вы хотите, чтобы C мог выводить любой элемент или любую структуру, которую он содержит? (То, как вы формулируете требования, может потребовать от C вывода содержимого произвольной структуры, которой он НЕ содержит; откуда он может получить такие экземпляры структуры?)   -  person Ira Baxter    schedule 05.01.2015
comment
Какой компилятор и ОС вы используете? Чего вы пытаетесь достичь на самом деле?   -  person Bill Woodger    schedule 05.01.2015
comment
Как сказал Билл, Чего вы пытаетесь достичь???. По сути, вы можете написать синтаксический анализатор для cobol-Copybooks, использовать существующий синтаксический анализатор (например, файловую помощь на мэйнфрейме или cb2xml), использовать cobol-компилятор для отображения макета записи в файле.   -  person Bruce Martin    schedule 06.01.2015
comment
Привет, я использую Z/OS. Я не сейчас для компилятора извините.   -  person Rockley    schedule 06.01.2015
comment
Я хочу использовать только код Cobol для чтения своих тетрадей. Я хочу записать свою тетрадь в файл, например: поле1: значение-поле1 \n поле2: значение-поле2 \n поле3: значение-поле3 \n...   -  person Rockley    schedule 06.01.2015
comment
\n - это разрыв строки   -  person Rockley    schedule 06.01.2015
comment
Это не говорит нам, что вы хотите делать с этими данными. У вас есть Filemanager или File-AID на вашем сайте? Чтобы сделать это самостоятельно, надежно, потребовалось бы нетривиальное количество нетривиального кода, и это без перекрестной ссылки входных данных на тетрадь или данных на типы.   -  person Bill Woodger    schedule 07.01.2015
comment
Вы ищете что-то похожее на Java Reflection API?   -  person cschneid    schedule 07.01.2015
comment
Привет, я хотел бы показать его. Я хочу отлаживать свои тетради. Точно так же, как Java Reflection API Да.   -  person Rockley    schedule 07.01.2015
comment
В COBOL нет ничего похожего на Java Reflection API.   -  person cschneid    schedule 30.01.2015
comment
Если ваш COBOL читает тетради, то на самом деле он читает записи из файла, которые содержат просто имена полей и значения в виде простого текста. Нет проблем с отображением имен полей и их предложений VALUE; просто напишите подстроки текста на свой вывод. Единственные «значения», которые могут иметь поля, закодированы как часть самой тетради. Но если прописи действительно составляются как часть программы, имена фиксированы (статические, неизменяемые) и вы знаете их имена при разработке кода, читать их не нужно.   -  person user2338816    schedule 09.02.2015


Ответы (2)


В мире z/OS, в зависимости от вашего уровня компилятора, вы можете использовать отладочную информацию, сгенерированную компилятором, для самоанализа ваших имен. Для этого вам нужно будет сохранить ADATA во время компиляции.

person Joe Zitzelberger    schedule 07.01.2015

У меня есть два возможных решения:

  1. Вы сохраняете имена полей копии во внутренней таблице. И последовательный читает таблицу для записи вашего вывода.

  2. Динамическое размещение сложнее, но возможно. Вы размещаете копию в своей программе, используя bpxwdyn (подпрограмма IBM).

    Вы создаете подпрограмму, с именем копии, фиксированной длиной (80), именем библиотеки копий, и размещаете эту копию в подпрограмме. Затем вы можете заполнить внутреннюю таблицу его данными.

Eg:

http://mainframe-tips-and-tricks.blogspot.com.es/2011/12/cobol-sample-program-for-dynamic-file.html

person Felipe Rodriguez Fonte    schedule 05.01.2015
comment
Я хочу отшлифовать любую тетрадь в своей подпрограмме. Это не может работать :( - person Rockley; 05.01.2015