Файл хранилища COBOL с несколькими типами записей
Цель этого упражнения - прочитать и сохранить входной файл в таблице, затем проверить определенные поля во входных данных и вывести любые записи об ошибках. Входной файл, который необходимо сохранить, состоит из 285 записей. Проблема в том, что каждая запись различна, со своей собственной тетрадью, поэтому я не знаю, как загрузить ее в таблицу, где я мог бы искать каждую 10, 20 или 32 запись для определенного поля. Вот пример входного файла FYI... Не уверен, понадобится ли мой текущий код на этом этапе, так как в нем не так много, кроме оператора READ.
10A 018517 2005062520060625
20A 018517000861038
32A 018517 79372
60A 0185172020 6 4
94A 018517 080 1
10A 027721 2005082520060825
20A 027721000187062
32A 027721 05038
60A 0277212003 6 4
94A 027721 090 1
....
Я смог загрузить файл в таблицу, но теперь моя дилемма заключается в том, как искать каждую отдельную запись в таблице для проверки? то есть, как я могу проверить, что почтовый индекс в записи 32 является числовым?
Я знаю, что могу читать в тетрадь, но я не знаю, как, или, если возможно, даже прочитать файл в несколько тетрадей, а затем сохранить его в таблице... если это имеет смысл.
Любой совет о том, куда идти отсюда, будет принята с благодарностью!
2 ответа
Пара вопросов
- Почему вы должны перемещать значения в таблицу, а не делать тесты во время чтения в файле???
- В задании конкретно указано, что вы должны прочитать каждую запись в таблицу перед выполнением каких-либо тестов??? или вам просто нужно сохранить все связанные записи в таблице и распечатать их все, если одна из них имеет ошибку??? Было бы лучше хранить как можно меньше в таблице.
Если вам нужно сохранить весь файл в таблице, в основном вы могли бы
- Прочитайте файл в таблицу
- Включить тетради в рабочее хранилище
Если вы хотите проверить запись таблицы, проверьте тип записи и переместите запись таблицы в соответствующую тетрадь.
01 File-Records. 03 filler occurs 285. 05 Table-Entry Pic X(80). 05 Filler redefines Table-Entry Pic XX. 88 Record-Type-10 value "10". .... 88 Record-Type-94 value "94". Evaluate true when Record-Type-10(table-index) Move Table-Entry(table-index) to Copybook-10 ...Whatever processing is needed... ... when Record-Type-94(table-index) Move Table-Entry(table-index) to Copybook-94 .... end-evaluate
Я бы предпочел
- Храните только связанные записи в таблице
- Проверяйте значения по мере их чтения (или сохраняйте для проверки, когда была прочитана полная группа записей).
в этом случае может быть использована следующая логика
Evaluate true
when Record-Type-10
if group-in-error
...write all the table-entries to the Error-File...
end-if
set group-in-error-off to true
move 1 to table-index
... Record-Type-10 tests ...
when group-in-error
continue
when Record-Type-20
... Record-Type-20 tests ...
end-Evaluate
move Intput-record to Table-entry(table-index)
Add 1 to table-index
Оглядываясь назад на тетрадь, которую вы показали ранее, на ней было 01. Это может запутать вещи для вашей задачи. Не берите в голову.
Как только у вас есть все записи, хранящиеся в вашей таблице, вы можете просматривать каждый элемент последовательно, обращая внимание только на первые два байта каждой записи, идентифицировать запись по типу записи и перемещать запись в соответствующий 01 для этого. тип записи. Используйте имена тетрадей для всех ваших проверок / отчетов.
Без 01 в тетрадях вы могли бы использовать тетради в переопределениях записи таблицы и просто использовать соответствующую тетрадь тем же способом, что и выше, без необходимости выполнять ПЕРЕМЕЩЕНИЕ.
Есть "более продвинутый" способ сделать это, но он, вероятно, вникнет в то, что вы изучаете в данный момент. Сделайте себе записку, чтобы спросить через пару месяцев, когда вам будет легче с COBOL.
Задача, которую вы имеете, - это просто упражнение. Вряд ли вы когда-либо будете хранить такой файл в такой таблице. Это чтобы вы привыкли к обработке файлов и обработке таблиц.
Обработка файлов и обработка таблиц - очень распространенные вещи, так что добивайтесь успеха в них на практике. Попробуйте сначала изучить заметки к курсу и руководства. Затем репетитор / коллеги. Вы найдете обучение легче, чем просто прийти сюда за ответами. Если вы застряли, вы, конечно, можете спросить, но сначала застрять, пожалуйста:-)