Получавайте имена на полета, докато изпълнявате програма

Имам книжка като:

  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
За пояснение: имате COBOL програма C и искате C да може да извежда всеки член или всяка структура, която съдържа? (Начинът, по който поставяте изискванията, може да поискате C да изведе съдържанието на произволна структура, която НЕ съдържа; откъде ще вземе такива екземпляри на структура?)   -  person Ira Baxter    schedule 05.01.2015
comment
Какъв компилатор и ОС използвате? Какво всъщност се опитвате да постигнете?   -  person Bill Woodger    schedule 05.01.2015
comment
Както Бил каза, какво се опитваш да постигнеш???. По принцип можете да напишете анализатор за cobol-Copybooks, да използвате съществуващ анализатор (напр. file-aid на мейнфрейма или cb2xml) да използвате cobol-компилатора, за да изведете списък на оформлението на запис във файл.   -  person Bruce Martin    schedule 06.01.2015
comment
Здравейте, използвам Z/OS. Сега не съжалявам за компилатора.   -  person Rockley    schedule 06.01.2015
comment
Искам да използвам само код на Cobol, за да чета тетрадките си. Искам да запиша книгата си с копия във файл като: field1 : value-field1 \n field2 : value-field2 \n field3 : value-field3 \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 няма нищо подобно на API за отражение на Java.   -  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. Записвате имената на полетата на копието във вътрешна таблица. И secuential чете таблицата за вашия запис на вашия изход.

  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