Добавление поля в существующий файл данных COBOL - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть существующая программа MF COBOL 4.0 с многолетними данными в файле ISAM, но мне нужно добавить новое поле в существующий файл. В настоящее время запись содержит 1208 символов, и мне нужно добавить еще 10 к ней.

Если я просто добавлю дополнительное поле PIC X (10) в мою тетрадь, это выдаст мне ошибку.

Ответы [ 4 ]

2 голосов
/ 02 марта 2010

Вам необходимо изменить базовый файл данных, чтобы он соответствовал определению вашего файла в COBOL. Один из способов сделать это - определить строку вывода точно так же, как сейчас выглядят строки ваших данных, но с дополнительным Pic x (10) в конце. Затем вы будете читать данные в строке за строкой и выводить их в новое место с 10 дополнительными пробелами в конце. Таким образом, ваши данные будут на 10 символов длиннее, и вы можете вернуться и добавить этот дополнительный Pic x (10) в свою основную программу. Это должно работать после этого.

0 голосов
/ 07 апреля 2012

При ошибках в файлах вы захотите сохранить список под рукой.Я рекомендую начинать со списка, который вы найдете в Интернете, и в любое время, когда вы получите сообщение об ошибке, которую вы не можете найти в течение 5 секунд, добавьте подробное объяснение решения, чтобы оно было в ваших заметках при следующем появлении.Вот несколько приличных списков, чтобы начать с

В моем списке статус файла 39:

  • OPEN-CONFLICT-FILE-ATR - Оператор 'open' не выполнен, поскольку обнаружен конфликт между фиксированными атрибутами файла, указанными для этого файла в программе.Эти атрибуты включают в себя организацию файла (последовательный, относительный или индексированный), первичный ключ записи, альтернативные ключи записи, набор кодов, максимальный размер записи и тип записи (фиксированная или переменная).

А это из личной заметки: Проверьте файл, который вы присвоили своему ddname в вашем JCL.Особенно длина распределения .В вашем случае вы знаете, что длина не совпадает, так как вы только что изменили программу.

Существуют утилиты для переформатирования наборов данных, в частности SYNCSORT.Или, конечно, вы можете написать свой собственный.

0 голосов
/ 12 марта 2012

Поздний ответ, но я подумал, что вас это может заинтересовать.

Я работаю над нашей системой Cobol более 20 лет, и мы неоднократно сталкивались с этой проблемой.

Изменения в структуре наших индексных файлов - это то, что мы считаем «Основным выпуском». Это требует специальных программ преобразования, которые:

  1. Переименуйте физический файл, переместив его в сторону «старого» файла
  2. Открыть «старую» версию файла (используя версию тетради до изменения)
  3. Открыть (создать) «новую» версию файла
  4. Переместить содержимое каждой из «старых» записей в «новую» запись и ЗАПИСАТЬ ее

Конечно, для этих преобразований требуется, чтобы система была отключена, и поэтому они считаются основными выпусками.

Если у вас есть файлы, в которые, вероятно, будут добавлены поля в будущем, вы можете добавить дополнительный FILLER в конец индексного файла, чтобы вы могли справиться с добавлением новых полей. Мы склонны добавлять FILLER 50 или 100. Конечно, это не поможет вам, если вы измените одно из существующих полей или даже структуру любого из ключей.

0 голосов
/ 18 февраля 2010

С изменением тетради вы изменяете только представление данных, используемых в вашей программе. Разве вы не должны реструктурировать источник данных (то есть файл ISAM)?

...