2016-04-15 6 views
2

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

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

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

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

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

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

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

+0

У вас есть источник подпрограммы C, который вы можете включить в вопрос? –

+0

Не уверен, сколько я могу включить здесь, но это функция, которая открывает файл:/***************************** ********************************************* ** Редактировать : Он был слишком велик. Возможно, мне придется подождать до понедельника. Могу ли я прикрепить файл здесь? – DaveL

+0

У вас есть ссылка для редактирования по вашему вопросу. Если вы используете это, есть 30 000 символов, с которыми я надеюсь, достаточно. –

ответ

0

Вы можете быть в состоянии

CALL "subprogram" USING fd-name 

где ФД-зовут

FD fd-name. 
... 

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

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

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

+0

Спасибо всем за комментарии. После обзора с нашим другим программистом и взвешивания ответов и наших опций (в том числе упомянутых здесь - переписывания явно в COBOL и портирования подпрограммы C) мы решили, что объем нового кода не является чрезмерным, и стоит упростить процесс, удерживая его в сети. – DaveL

 Смежные вопросы

  • Нет связанных вопросов^_^