A instrução UNSTRING
no COBOL separa partes de uma string (campo de envio) em campos menores (campos de recepção), usando delimitadores definidos. É útil para extrair informações contidas em uma única variável com conteúdo estruturado.
📌 Para que serve
-
Separar dados contíguos em substrings.
-
Distribuir os pedaços da string original em múltiplos campos.
-
Substituir múltiplas instruções
MOVE
. -
Extrair dados com base em delimitadores (como espaço, vírgula, barra, etc.).
🧾 Sintaxe básica
UNSTRING campo-fonte
DELIMITED BY delimitador
INTO campo-1 DELIMITER IN delimitador-1 COUNT IN contador-1
campo-2 DELIMITER IN delimitador-2 COUNT IN contador-2
WITH POINTER ponteiro
TALLYING IN total-campos
ON OVERFLOW DISPLAY "Erro de estouro"
NOT ON OVERFLOW DISPLAY "Separação realizada com sucesso"
END-UNSTRING.
✅ Exemplo prático
01 TEXTO-COMPLETO PIC X(30) VALUE "JOSE,ROBERTO,SANTOS".
01 NOME PIC X(10).
01 SOBRENOME PIC X(10).
01 ULTIMO-NOME PIC X(10).
01 PONTEIRO PIC 9(02) VALUE 1.
UNSTRING TEXTO-COMPLETO
DELIMITED BY ","
INTO NOME, SOBRENOME, ULTIMO-NOME
WITH POINTER PONTEIRO
END-UNSTRING.
DISPLAY "Nome: ", NOME.
DISPLAY "Sobrenome: ", SOBRENOME.
DISPLAY "Último nome: ", ULTIMO-NOME.
📝 Saída esperada:
Nome: JOSE
Sobrenome: ROBERTO
Último nome: SANTOS
⚙️ Como funciona internamente
-
A variável de origem é percorrida da esquerda para a direita.
-
Ao encontrar um delimitador, o conteúdo até esse ponto é copiado para o campo de recepção.
-
O delimitador pode ser armazenado e a quantidade de caracteres pode ser contabilizada.
-
O ponteiro pode ser usado para controlar de onde começa a próxima leitura.
-
É possível capturar todos os delimitadores com
ALL
ou considerar apenas um de cada vez.
⚠️ Regras importantes
-
O campo de origem (identifier-1) deve ser alfanumérico, DBCS ou nacional.
-
Campos numéricos de recepção devem ter
USAGE DISPLAY
ouNATIONAL
, sem símbolo P. -
Quando há
DELIMITED BY ALL
, múltiplos delimitadores contíguos são tratados como um só. -
O uso de
POINTER
,COUNT IN
eDELIMITER IN
é opcional, mas oferece mais controle e rastreabilidade. -
Ao usar
TALLYING IN
, você sabe quantos campos foram preenchidos. -
Um delimitador com dois ou mais caracteres só é reconhecido se estiver exatamente igual e na ordem no campo de origem.
🧠 Dicas práticas
-
Ideal para processar strings CSV ou campos concatenados.
-
Inicialize o ponteiro e o tally antes da execução para evitar comportamentos imprevisíveis.
-
Combine com
INSPECT
para verificar a presença de delimitadores antes doUNSTRING
. -
Sempre trate possíveis estouros com
ON OVERFLOW
para maior segurança.
✅ Conclusão
A instrução UNSTRING
é extremamente útil para separar dados estruturados contidos em uma única string, simplificando o código e aumentando a legibilidade. É uma ferramenta poderosa, especialmente em programas que lidam com entradas concatenadas, arquivos texto, ou campos compostos vindos de sistemas externos.