Как я могу подсчитать общее количество записей в файле при отображении только некоторых?

#cobol

#cobol

Вопрос:

Я использую Visual Cobol для создания программы, которая считывает файл, имеет критерии пользовательского ввода и отображает только те записи в файле, которые соответствуют критериям пользователя. Мне нужно отобразить количество записей, соответствующих критериям, что я сделал с помощью накопителя, но мне также нужно отобразить общее количество записей в файле, включая те, которые не отображаются.

Мне интересно, могу ли я сделать это в инструкции Sort. Я пробовал несколько вещей, но я не уверен в необходимом синтаксисе.

Это моя текущая инструкция сортировки:

    B-100-PROCESS-FILE.

       PERFORM B-200-CRITERIA-CONTROL.

       SORT SORT-FILE
           ON DESCENDING KEY SR-UNIT-COST

           INPUT PROCEDURE B-210-SELECT-RECORDS
           OUTPUT PROCEDURE B-220-DISPLAY-REPORT.
  

Новое дополнение:

    B-210-SELECT-RECORDS.

       OPEN INPUT CUSTOMER-SALES-FILE
       MOVE "N" TO SW-END-OF-FILE.

       READ CUSTOMER-SALES-FILE INTO CUSTOMER-SALES-RECORD

          AT END MOVE "Y" TO SW-END-OF-FILE
          NOT AT END ADD 1 TO AC-RECORD-TOTAL

       PERFORM B-370-RELEASE-RECORDS
           UNTIL END-OF-FILE.

       CLOSE CUSTOMER-SALES-FILE.
  

почти готово…

Комментарии:

1. Вы можете подсчитать записи в Sort input procedure

2. Отличается ли количество от AC-RECORD-TOTAL?

3. Нет, я пытаюсь сохранить общее количество записей в этой переменной.

4. Немного позаботьтесь об условных предложениях. PERFORM B-370... Анализируется как часть NOT AT END предложения, а не так, как может показаться из-за отступа источника. Используйте END-READ или полную остановку на NOT AT END фразе.

Ответ №1:

У меня есть возможное решение:

    OPEN INPUT CUSTOMER-SALES-FILE
   MOVE "N" TO SW-END-OF-FILE.

   READ CUSTOMER-SALES-FILE INTO CUSTOMER-SALES-RECORD

      AT END MOVE "Y" TO SW-END-OF-FILE
   END-READ
   IF SW-END-OF-FILE NOT= 'Y'
      ADD 1 TO WS-CONT
   END-IF 


   PERFORM B-370-RELEASE-RECORDS
       UNTIL END-OF-FILE.

   CLOSE CUSTOMER-SALES-FILE.