Обычно я бы не стал так сильно помогать с домашним заданием, но, поскольку вы уже приложили немало усилий и вряд ли найдете здесь многих из нас, динозавров, я помогу вам.
Ваша проблема здесь (не обращайте внимания на то, что указано в скобках справа, это просто комментарии, которые помогут вам):
200-PROCESS-ONE-RECORD.
MOVE NAME-IN TO LEFT-LABEL-OUT
MOVE ADDRESS-IN TO LEFT-LABEL-OUT (overwrite)
MOVE CITY-STATE-ZIP-IN TO LEFT-LABEL-OUT (overwrite)
MOVE SPACES TO BLANK-OUT
MOVE NAME-IN TO RIGHT-LABEL-OUT
MOVE ADDRESS-IN TO RIGHT-LABEL-OUT (overwrite)
MOVE CITY-STATE-ZIP-IN TO RIGHT-LABEL-OUT (overwrite)
MOVE SPACES TO BLANK-A-OUT
WRITE LABEL-RECORD-OUT (only wrote one line)
Этот параграф обрабатывает один запись.То, что вы делаете здесь, это помещает три вещи в левый и правый разделы вывода (так что первые два перезаписываются).
Вам нужна переменная-переключатель, чтобы выбрать, обрабатываете ли вы левую часть.значение или правильное значение, а также возможность сохранять левые данные, чтобы вы могли выводить их оба при обработке правильных данных, что-то вроде:
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 DOING-LEFT PIC X(3) VALUE 'YES'.
01 LEFT-NAME-IN PIC X(20).
01 LEFT-ADDRESS-IN PIC X(20).
01 LEFT-CITY-STATE-ZIP-IN PIC X(20).
Затем измените обработку записейкод (проверьте синтаксис IF
, прошло много времени с тех пор, как я вырезал любой код COBOL):
200-PROCESS-ONE-RECORD.
IF DOING-LEFT = 'YES' THEN
PERFORM 201-PROCESS-LEFT-RECORD
ELSE
PERFORM 202-PROCESS-RIGHT-RECORD.
201-PROCESS-LEFT-RECORD.
MOVE NAME-IN TO LEFT-NAME-IN. (just store it)
MOVE ADDRESS-IN TO LEFT-ADDRESS-IN.
MOVE CITY-STATE-ZIP-IN TO LEFT-CITY-STATE-ZIP.
MOVE 'NO' TO DOING-LEFT. (and toggle to right)
202-PROCESS-RIGHT-RECORD.
MOVE LEFT-NAME-IN TO LEFT-LABEL-OUT. (first line, both sides)
MOVE SPACES TO BLANK-OUT.
MOVE NAME-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.
MOVE LEFT-ADDRESS-IN TO LEFT-LABEL-OUT. (second line, both sides)
MOVE SPACES TO BLANK-OUT.
MOVE ADDRESS-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.
MOVE LEFT-CITY-STATE-ZIP-IN TO LEFT-LABEL-OUT. (third line, both sides)
MOVE SPACES TO BLANK-OUT.
MOVE CITY-STATE-ZIP-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.
MOVE 'YES' TO DOING-LEFT. (toggle back to left)
Затем, в конце, после того, как файл полностью прочитан, вам нужно определить,Вы заполнили левые данные (т.е. было нечетное количество входных строк).Это будет иметь место, если DOING-LEFT
установлен на 'NO'
.
Я оставлю это вам, но это включает перемещение левых данных и заполнение правых данных пробелами, в порядке очень аналогично 202-PROCESS-RIGHT-RECORD
выше (подтолкнуть, подтолкнуть, подмигнуть, подмигнуть).
И теперь, когда у меня был хороший взгляд на желаемый результатПохоже, вам на самом деле нужны две копии каждого адреса на , оба слева и справа.Вы уверены, что хотите именно так, потому что это довольно необычное требование для программы почтовой метки?
В любом случае я оставлю весь этот код выше, так как это хороший способ сделатьиндивидуальный метод рассылки меток, но код, который вам нужен, гораздо проще, очень незначительный вариант абзаца 202-PROCESS-RIGHT-RECORD
.
Забудьте все дополнительное рабочее хранилище, о котором я говорил, и просто измените 200-PROCESS-ONE-RECORD
до:
200-PROCESS-ONE-RECORD.
MOVE NAME-IN TO LEFT-LABEL-OUT.
MOVE SPACES TO BLANK-OUT.
MOVE NAME-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.
MOVE ADDRESS-IN TO LEFT-LABEL-OUT.
MOVE SPACES TO BLANK-OUT.
MOVE ADDRESS-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.
MOVE CITY-STATE-ZIP-IN TO LEFT-LABEL-OUT.
MOVE SPACES TO BLANK-OUT.
MOVE CITY-STATE-ZIP-IN TO RIGHT-LABEL-OUT.
MOVE SPACES TO BLANK-A-OUT.
WRITE LABEL-RECORD-OUT.