COBOL - Микрофокус - Общий ввод / вывод

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

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

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

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

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

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

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

1 ответ

Вы могли бы быть в состоянии

CALL "subprogram" USING fd-name

где fd-имя

FD fd-name.
...

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

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

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

Другие вопросы по тегам