COBOL - Microfocus - Универсальный ввод / вывод

Я отвечаю за преобразование старого пакетного приложения COBOL на основе UNIX, которое было разработано консультантом еще в 1990-х годах, в среду Windows, но все еще в COBOL с использованием Microfocus (Eclipse и т. Д.).

Это довольно простая задача, за исключением одного небольшого сбоя.

Старое приложение никогда не выполняло явной обработки файлов в COBOL. То есть в программах на COBOL нет команд FD, OPEN, READ, WRITE или CLOSE. Вместо этого они написали программу на C, которая будет выполнять одну из этих различных функций на основе переданных ей параметров (включая, помимо прочего, имя файла, длину записи и желаемую функцию).

Я хотел бы переписать эту подпрограмму на COBOL, что потребовало бы очень небольших изменений в преобразуемых основных программах COBOL. То есть он все равно будет вызывать эту подпрограмму, но теперь он будет на COBOL, а не на C.

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

Есть ли у кого-нибудь опыт или идеи по такой задаче? Если нет, то мне, возможно, придется пойти по прямому пути замены каждого оператора вызова этой подпрограмме конкретной командой COBOL (Open, Read и т. Д.), Которую необходимо выполнить, и, очевидно, FD и SELECT для каждого файла должны быть добавлен в основную программу.

Заранее спасибо.


person DaveL    schedule 15.04.2016    source источник
comment
У вас есть исходный код подпрограммы C, который вы можете включить в вопрос?   -  person Bill Woodger    schedule 15.04.2016
comment
Не уверен, сколько я могу здесь включить, но это функция, которая открывает файл: / ***************************** ****************************************** ** Редактировать: Это было слишком большой. Возможно, мне придется подождать до понедельника. Могу я прикрепить сюда файл?   -  person DaveL    schedule 15.04.2016
comment
Под вашим вопросом есть ссылка для редактирования. Если вы воспользуетесь этим, вы получите 30 000 персонажей, которых, я надеюсь, будет достаточно.   -  person Bill Woodger    schedule 15.04.2016
comment
Вам нужно будет прочитать РАЗДЕЛ ХРАНЕНИЯ ФАЙЛОВ. Однако, возможно, стоит спросить, почему консультант использовал C вместо COBOL. Я смутно помню, что Microfocus COBOL, когда я использовал его в 80-х, имел довольно серьезные ограничения из-за его 8-битного внутреннего хранилище (255 полей на запись, символы в varchar и т. д.). Возможно, вы захотите проверить, что теперь он может обрабатывать форматы, которые вы хотите использовать.   -  person Mike    schedule 15.04.2016
comment
Вы не хотите, чтобы в вопросе было несколько сотен строк на языке C. Так что, если это то, что у вас есть, вы можете найти внешнее место, чтобы разместить его и ссылку на него. На ваш вопрос: рассматривали ли вы вариант переноса C и взаимодействия с ним из Microfocus COBOL, как это делала исходная программа? Я не знаю, есть ли у Microfocus это средство или с какими объектами компилятора C они могут связываться, но я просто выбрасываю его как альтернативу.   -  person lurker    schedule 18.04.2016


Ответы (1)


Вы могли бы

CALL "subprogram" USING fd-name

где имя-fd

FD fd-name.
...

Так да? возможно ?, вы могли бы выполнить подпрограмму, которая может принимать общие файлы COBOL. Но затем вы перейдете к сопоставлению макетов записей и другим забавным вещам, так что будьте осторожны. Это может не работать с COBOL на COBOL, но оно работает с COBOL на C и обратно, поскольку вы в конечном итоге передаете ссылку на блок управления файлом.

Вам, вероятно, будет лучше изучить стандартные системные библиотеки. Такие вещи, как CBL_OPEN_FILE и CBL_READ_FILE, если они доступны. Это даст вам гораздо более точное соответствие потоковому вводу-выводу, который предполагается в текущей подпрограмме C.

Или, как предлагает Билл в комментариях, попробуйте выяснить, почему использовался C, и если вам не нужны сторонние функции, просто копайтесь и напишите новые процедуры COBOL, так как это, вероятно, будет лучше в конце.

person Brian Tiffin    schedule 15.04.2016
comment
Спасибо всем за комментарии. После рассмотрения с другим нашим программистом и взвешивания ответов и наших вариантов (которые включали упомянутые здесь - явное переписывание в COBOL и перенос подпрограммы C), мы решили, что объем нового кода не является чрезмерным и стоит упростить процесса, оставив его в сети. - person DaveL; 20.04.2016