Pergunta

Como concatenar duas strings, de comprimento desconhecido, em COBOL?Então, por exemplo:

WORKING-STORAGE.
    FIRST-NAME    PIC X(15) VALUE SPACES.
    LAST-NAME     PIC X(15) VALUE SPACES.
    FULL-NAME     PIC X(31) VALUE SPACES.

Se FIRST-NAME = 'JOHN ' e LAST-NAME = 'DOE ', Como posso obter:

FULL-NAME = 'JOHN DOE                       '

em oposição a:

FULL-NAME = 'JOHN            DOE            '
Foi útil?

Solução

Acredito que o seguinte lhe dará o que você deseja.

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

Outras dicas

À primeira vista, a solução é usar a modificação de referência para STRING juntando as duas strings, incluindo o espaço.O problema é que você deve saber quantos espaços à direita estão presentes em FIRST-NAME, caso contrário você produzirá algo como 'JOHNbbbbbbbbbbbbDOE', onde b é um espaço.

Não existe uma função COBOL intrínseca para determinar o número de espaços finais em uma string, mas existe uma para determinar o número de espaços iniciais em uma string.Portanto, a maneira mais rápida, até onde sei, é inverter o nome, encontrar o número de espaços iniciais e usar a modificação de referência para encadear o nome e o sobrenome.

Você terá que adicionar estes campos ao armazenamento de trabalho:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  1. Inverta o PRIMEIRO NOME
    • MOVER FUNÇÃO REVERSE (PRIMEIRO NOME) PARA CAMPO DE TRABALHO.
    • WORK-FIELD agora contém espaços à esquerda, em vez de espaços à direita.
  2. Encontre o número de espaços à direita em FIRST-NAME
    • INSPECIONE OS ESPAÇOS DE RASTREAMENTO DE REGISTRO DO CAMPO DE TRABALHO PARA ESPAÇOS PRINCIPAIS.
    • TRAILING-SPACE agora contém o número de espaços finais em FIRST-NAME.
  3. Encontre o comprimento do campo FIRST-NAME
    • COMPUTE FIELD-LENGTH = COMPRIMENTO DA FUNÇÃO (PRIMEIRO NOME).
  4. Concatene as duas strings juntas.
    • STRING PRIMEIRO NOME (1: COMPRIMENTO DO CAMPO – ESPAÇOS DE TRILHAGEM) “ “ SOBRENOME DELIMITADO POR TAMANHO, EM NOME COMPLETO.

Você poderia tentar fazer um loop para obter o comprimento real.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top