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-2 etc. é 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, POINTER ou NACIONAL-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 STRING for 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 POINTER com 1 antes do STRING.

  • Use DELIMITED BY SIZE para garantir que o conteúdo completo seja transferido.

  • Evite campos com OCCURS ou JUSTIFIED no destino.

  • Combine com UNSTRING quando 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.