Помимо вашей таблицы четкости и фактического использования таблицы, вы в основном получили идею уже, кроме вы не уверены, что, в частности, для проверки.
Что вам нужно сделать, это найти раздел документации COBOL на класса состояния и тестов класса.
Я подозреваю, что этот бит кода:
if ws-table(1) equals to spaces
continue
else
add +1 to ws-count
end-if
был добавлен в спешке. С вашими данными ws-table(1)
никогда не будет места, а ws-count
не определен.
Назад к определению. Вы определяете структуру с тремя частями (WS-A OCCURS 3
), каждая из которых состоит из двухбайтового алфавитного поля, за которым следуют два трехбайтовых алфавитно-цифровых поля. Это определение не имеет прямого отношения к вашей задаче.
01 the-data.
05 FILLER OCCURS 24 TIMES
INDEXED BY data-byte-index.
10 the-data-byte PIC X.
Это позволит вам смотреть на каждый байт индивидуально. Обратите внимание, что вы всегда можете использовать хорошие имена, что упростит ваши программы, уменьшит вероятность небрежных ошибок и сделает жизнь людей, в том числе и ваших, когда вы вернетесь в программу через некоторое время, в целом проще.
Примечание. Вы также можете использовать ссылку-модификацию и проиграть на читаемость в целях уменьшения набора текста.
Формат вашей программы
Если это не диктуется вам (и хотя я никогда не видел его раньше в течение 30 лет, я видел его пару раз в последнее время) нет абсолютно никакого смысла в «отступы», например, в разделе WORKKING-STORAGE или даже в параграфах/SECTION. У них уже есть все отступы, в которых они нуждаются, и в дальнейшем отступы ничего не добавляют, что требует больше набрания текста, а также заставляет опытных программистов COBOL задаваться вопросом, почему вы это делаете.
Начиная со Стандарта 1985 года для COBOL, использование полных остановок/периодов в ПРОЦЕДУРНОМ РАЗДЕЛЕ значительно ослабляется. Поскольку полная остановка/период в неправильном месте может вызвать ошибки, это было хорошо. Будет также хорошо, если вы в полной мере воспользуетесь им. Запятые слишком сильно похожи на полные остановки/периоды, которые могут быть использованы в коде. Они никогда не должны быть там, поэтому им ничего не выгодно. Также следует избегать шумовых слов, таких как THEN
. В отличие от запятых, интервал может быть благом для формата программы.
Вот ваш код выше, переформатирован:
MOVE '@#@#DEF34GHIJKL56MNOPQR'
TO WS-TABLE
PERFORM A-PARA
VARYING I
FROM 1
BY 1
UNTIL I > 3
STOP RUN
.
A-PARA.
PERFORM C-PARA
VARYING J
FROM 1
BY 1
UNTIL J > 2
.
C-PARA.
if ws-table (1) equal to space
continue
else
add +1 to ws-count
end-if
DISPLAY
WS-C (I J)
.
Используйте некоторые собственные имена, и это начинают выглядеть как реальная программа.
Обратите внимание, что не все люди согласны с тем, как программа должна быть отформатирована. Шутки в сторону.
Просьба показать код, который вы пробовали, и даст нам лучшее представление о том, чего вы упускаете. –
Я добавил свой код, но мой тренер хочет использовать еще один пустой массив, который не был понят мной. –