Файл хранилища 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 ответа

Решение

Пара вопросов

  1. Почему вы должны перемещать значения в таблицу, а не делать тесты во время чтения в файле???
  2. В задании конкретно указано, что вы должны прочитать каждую запись в таблицу перед выполнением каких-либо тестов??? или вам просто нужно сохранить все связанные записи в таблице и распечатать их все, если одна из них имеет ошибку??? Было бы лучше хранить как можно меньше в таблице.

Если вам нужно сохранить весь файл в таблице, в основном вы могли бы

  1. Прочитайте файл в таблицу
  2. Включить тетради в рабочее хранилище
  3. Если вы хотите проверить запись таблицы, проверьте тип записи и переместите запись таблицы в соответствующую тетрадь.

      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
    

Я бы предпочел

  1. Храните только связанные записи в таблице
  2. Проверяйте значения по мере их чтения (или сохраняйте для проверки, когда была прочитана полная группа записей).

в этом случае может быть использована следующая логика

     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.

Задача, которую вы имеете, - это просто упражнение. Вряд ли вы когда-либо будете хранить такой файл в такой таблице. Это чтобы вы привыкли к обработке файлов и обработке таблиц.

Обработка файлов и обработка таблиц - очень распространенные вещи, так что добивайтесь успеха в них на практике. Попробуйте сначала изучить заметки к курсу и руководства. Затем репетитор / коллеги. Вы найдете обучение легче, чем просто прийти сюда за ответами. Если вы застряли, вы, конечно, можете спросить, но сначала застрять, пожалуйста:-)

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