concatenando strings de comprimento desconhecido em COBOL
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 '
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.
- 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.
- 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.
- Encontre o comprimento do campo FIRST-NAME
- COMPUTE FIELD-LENGTH = COMPRIMENTO DA FUNÇÃO (PRIMEIRO NOME).
- 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.