Конкатенация строк в языке COBOL без начальных и конечных пробелов - PullRequest
0 голосов
/ 28 августа 2018

У меня проблемы с этой задачей; наша задача состоит в том, чтобы объединить 2 строки без пробелов между ними, например:

Входной алфавит. , 1: эта строка
Входной Алфавит. , 2: сцепленный.
Входной Алфавит. , 3:

Alphanum. вывод 1: эта строка связана.
Alphanum. выход 2:

Я могу объединить эти две строки в вывод, но они не будут привязываться друг к другу без пробелов между ними.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Используйте команду UNSTRING с параметрами TALLYING IN и WITH POINTER, чтобы отслеживать, куда вы хотите поместить следующую строку.

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

, так что, если вы не знаете длину двух строк, вам нужно сделать что-то вроде этого:

01 WS-INPUT-STRINGS.
   05 WS-STRING1 PIC X(100) VALUE "THIS STRING IS".
   05 WS-STRING2 PIC X(100) VALUE "CONCATENATED".
   05 WS-STRING3 PIC X(100) VALUE SPACES.
01 WS-OUTPUT-STRINGS.
   05 WS-CONCATENATED-OUTPUT PIC X(300) VALUE SPACES.
01 WS-COUNTERS.
   05 WS-LEN-IN PIC 9(4) COMP VALUE 1.
   05 WS-POS    PIC 9(4) COMP VALUE 1.

IF WS-STRING1 NOT EQUAL SPACES OR LOW-VALUES
   PERFORM VARYING WS-LEN-IN
              FROM 100 BY -1
             UNTIL WS-STRING1(WS-LEN-IN:1) 
                   NOT EQUAL (SPACES OR LOW-VALUES) OR
                   WS-LEN-IN = 1
    END-PERFORM
    MOVE WS-STRING1(1:WS-LEN-IN)
      TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
    ADD WS-LEN-IN TO WS-POS
END-IF
IF WS-STRING2 NOT EQUAL SPACES OR LOW-VALUES
   PERFORM VARYING WS-LEN-IN
              FROM 100 BY -1
             UNTIL WS-STRING2(WS-LEN-IN:1) 
                   NOT EQUAL (SPACES OR LOW-VALUES) OR
                   WS-LEN-IN = 1
    END-PERFORM
    MOVE WS-STRING2(1:WS-LEN-IN)
      TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
    ADD WS-LEN-IN TO WS-POS
END-IF
IF WS-STRING3 NOT EQUAL SPACES OR LOW-VALUES
   PERFORM VARYING WS-LEN-IN
              FROM 100 BY -1
             UNTIL WS-STRING3(WS-LEN-IN:1) 
                   NOT EQUAL (SPACES OR LOW-VALUES) OR
                   WS-LEN-IN = 1
    END-PERFORM
    MOVE WS-STRING3(1:WS-LEN-IN)
      TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
    ADD WS-LEN-IN TO WS-POS
END-IF
DISPLAY WS-CONCATENATED-OUTPUT(1:WS-POS)

Вы можете поместить это в абзац и выполнять его снова и снова, но я сделал это таким образом, чтобы проиллюстрировать, что именно происходит. Когда вы определяете предложение изображения в COBOL, оно всегда будет такой длины, поэтому, если бы я просто попытался связать 3 переменные вместе, между ними было бы тонны дополнительного пространства, потому что каждое предложение изображения длиной 100 символов независимо от того, что я поместил в них. Я использую эти циклы, чтобы вычислить длину каждой переменной. Сначала я проверяю, есть ли что-то в переменной, затем возвращаюсь назад, пока не найду символ.

Вы не сказали, нужно ли вам также обрезать начальные пробелы, поэтому я предположил только конечные пробелы. Вы также можете использовать INSPECT TALLYING, чтобы получить счет, а не писать циклы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...