A instrução STRING no COBOL permite concatenar conteúdos de vários campos ou literais em um único campo de destino. Ela é usada para montar frases, códigos compostos, nomes completos e outras estruturas de texto em uma única variável.
📌 Para que serve
-
Concatenar campos e/ou literais em um único destino.
-
Montar strings compostas dinamicamente.
-
Substituir múltiplas instruções
MOVE. -
Controlar onde os dados serão inseridos com o uso de
POINTER.
🧾 Sintaxe básica
STRING campo-1 DELIMITED BY SIZE
campo-2 DELIMITED BY ' '
literal-1 DELIMITED BY SIZE
INTO destino
WITH POINTER ponteiro
ON OVERFLOW DISPLAY "Erro: campo de destino cheio"
NOT ON OVERFLOW DISPLAY "String montada com sucesso"
END-STRING.
✅ Exemplo prático
01 NOME PIC X(10) VALUE "COBOL".
01 SOBRENOME PIC X(15) VALUE "DICAS".
01 RESULTADO PIC X(30) VALUE SPACES.
01 POSICAO PIC 9(02) VALUE 1.
STRING NOME DELIMITED BY ' '
SOBRENOME DELIMITED BY SIZE
INTO RESULTADO
WITH POINTER POSICAO
END-STRING.
DISPLAY RESULTADO. *> Resultado: "COBOL DICAS"
⚙️ Como funciona internamente
-
O conteúdo de
campo-1,campo-2etc. é transferido caractere por caractere para o campo de destino. -
O delimitador indica onde parar a cópia (ex: espaço, tamanho do campo ou outro valor).
-
O POINTER indica onde começar a inserir os dados dentro do campo de destino.
-
Se não houver espaço suficiente no destino, a cláusula
ON OVERFLOWé executada.
⚠️ Regras importantes
-
O campo de destino não pode ser
EDITADO,JUSTIFIED,FLOAT,POINTERouNACIONAL-EDITADO. -
Campos numéricos são convertidos para alfanuméricos antes da concatenação.
-
O ponteiro deve iniciar em 1 e ser grande o bastante para representar
TAMANHO+1. -
Se
STRINGfor mal usada, os resultados podem ser imprevisíveis. -
O campo de destino mantém os dados antigos após o fim da nova string, se não for totalmente preenchido.
🔄 Tipos de delimitação
| Tipo | Significado |
|---|---|
DELIMITED BY SIZE |
Copia o campo inteiro |
DELIMITED BY ' ' |
Copia até encontrar espaço |
DELIMITED BY variável |
Copia até encontrar o conteúdo da variável delimitadora |
🧠 Dicas práticas
-
Sempre inicialize o
POINTERcom 1 antes doSTRING. -
Use
DELIMITED BY SIZEpara garantir que o conteúdo completo seja transferido. -
Evite campos com
OCCURSouJUSTIFIEDno destino. -
Combine com
UNSTRINGquando precisar quebrar a string posteriormente.
✅ Conclusão
A instrução STRING é ideal para criar textos compostos de forma controlada e dinâmica em COBOL. Ela reduz o número de instruções MOVE, melhora a legibilidade do código e oferece controle total sobre a montagem da informação em campos de saída. Com POINTER, DELIMITED e OVERFLOW, você tem segurança e precisão na manipulação de strings.