Реверсирование строки без использования функции реверса в COBOL - PullRequest
0 голосов
/ 29 августа 2018

Моя задача - перевернуть строку в коболе без использования функции обратного.

Пока у меня есть это:

MOVE 20 TO LOO.                       
MOVE 1  TO LOP.                       
MOVE 20 TO LOU.                       
MOVE EINA01 OF FORMAT1 TO WORTTXT1.   

PERFORM 20 TIMES                      
   MOVE WORTTXT1 (LOP:1) TO B (20:LOO)
   SUBTRACT 1 FROM LOO                
   ADD 1 TO LOP                       
   MOVE B  TO WORTTXT2 (20:LOU)       
   SUBTRACT 1 FROM LOU                
END-PERFORM.                          
MOVE WORTTXT2 TO AUSA01 OF FORMAT1.

AUSA01 это выход EINA01 вход.

Проблема, с которой я столкнулся сейчас: если я напишу «Hello» в поле ввода, все, что я получу, это «00000000000h», он просто переворачивает первую букву, но она должна выглядеть как «Hello».

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы также можете использовать INSPECT, чтобы перевернуть строку. Запишите что-то вроде этого, чтобы перевернуть 8-символьную строку SRC и получить результат в TGT:

MOVE x'0807060504030201' TO TGT
INSPECT TGT CONVERTING x'0102030405060708' TO SRC

Обратите внимание, что вы можете использовать этот трюк для изменения порядка полей любым желаемым способом.

0 голосов
/ 29 августа 2018

Поскольку вы упомянули, что программа также должна обратить пробелы, я предлагаю вам изменить цикл PERFORM, как показано ниже.

PERFORM 20 TIMES
MOVE WORTTXT1(LOP:1) TO B(LOO:1) 
SUBTRACT 1 FROM LOO
ADD 1 TO LOP
END-PERFORM.

Полная программа:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
DATA DIVISION.
WORKING-STORAGE SECTION. 
01 EINA01 PIC X(20) VALUE 'Srinivasan          '.
01 WORTTXT1 PIC X(20) VALUE SPACES.
01 WORTTXT2 PIC X(20) VALUE SPACES.
01 AUSA01 PIC X(20) VALUE SPACES.
01 B PIC X(20) VALUE SPACES. 
01 LOO PIC 9(2) VALUE 0.
01 LOP PIC 9(2) VALUE 0.
PROCEDURE DIVISION.

MOVE 20 TO LOO.
MOVE 1 TO LOP.
MOVE EINA01 TO WORTTXT1.

PERFORM 20 TIMES
MOVE WORTTXT1(LOP:1) TO B(LOO:1) 
SUBTRACT 1 FROM LOO
ADD 1 TO LOP
END-PERFORM.

MOVE B TO AUSA01.
DISPLAY AUSA01.
STOP RUN.

Примечание. Я не использую элементы данных B, LOU & WORTTXT2, так как считал, что они не нужны.

Выход:

          nasavinirS

Попробуйте здесь

...