Menu principal                 [Fechar]


Linguagem de programação COBOL - UNSTRING


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF.

O comando UNSTRING serve para extrair caracteres contíguos de um campo, armazenando-os em campos receptores
Observações:
'identifier-1' é o campo de onde serão extraídos os dados. É denominado emissor.
Cada 'LITERAL' deve ser um literal não-numérico.
'identifier-1', 'identifier-2', 'identifier-3' e 'identifier-5' devem ser itens alfanuméricos.
Cada 'identifier-4' representa um campo receptor. Pode ser alfabético (sem o caracter "B" em sua PICTURE), alfanumérico ou  numérico (sem o caracter "P" em sua PICTURE) e deve ter USAGE IS DISPLAY.
'identifier-7' é um contador cujo valor inicial indica a posição de início no 'identifier-1' a partir da qual começará a verificação.
Deve ser um item elementar numérico inteiro, com tamanho suficiente para conter um valor igual ao tamanho do 'identifier-1' + 1.
O caracter "P" não pode ser usado em sua PICTURE. Este valor deve ser fornecido pelo DESENVOLVEDOR.
'identifier-6' e 'identifier-8' devem ser itens numéricos inteiros, sem o caracter "P" em suas PICTUREs.
Todos os 'identifier' envolvidos não podem ser entradas em nível 88.
As opções DELIMITER e COUNT podem ser usadas apenas com a opção DELIMITED BY.
Cada 'identifier-2 | literal-1' representa um delimitador. Pode conter quaisquer caracteres do conjunto de caracteres aceito (ASCII ou EBCDIC).
Se o 'identifier-2 | literal-1' for uma constante figurativa, implicará na ocorrência de um único caracter desta, como um literal
não-numérico.
Quando a opção ALL for usada, uma ou mais ocorrências contíguas do 'identifier-2' ou 'literal-1' serão tratadas como uma única ocorrência e esta será movida para o 'identifier-5'.
Quando um delimitador contiver dois ou mais caracteres, todos os caracteres devem estar presentes em posições contíguas do 'identifier-1' para que sejam reconhecidos como um delimitador.
'identifier-6' indica a quantidade de caracteres processado no 'identifier-1'. São os caracteres a serem movidos para o 'identifier-4'.
'identifier-8' é um contador que registra a quantidade de campos receptores ativados durante a execução do UNSTRING. Se for
usado em mais de um UNSTRING, deverá ser zerado antes de cada execução.
Quando em uma pesquisa no 'identifier-1', forem encontrados dois delimitadores contíguos, o campo receptor corrente será preenchido com zeros ou espaços, conforme a sua categoria.
Quando dois ou mais delimitadores forem especificados na opção DELIMITED BY, existirá um condição "OR" entre eles. Cada delimitador é comparado com o 'identifier-1'. Se houver coincidência, os caracteres no 'identifier-1' serão considerados como um único delimitador. Cada delimitador é comparado com o 'identifier-1' na ordem em que aparece no comando.
Quando o UNSTRING é iniciado, o campo recepto corrente é o 'identifier-4'.
Se a opção POINTER for usada, o 'identifier-1' será verificado a partir da posição especificada no 'identifier-7'. Se não for usada, o 'identifier-1' será verificado a partir da sua posição mais à esquerda.
Se a opção DELIMITED BY for usada, a verificação ocorrerá da esquerda para a direita até o 'identifier-2' ou 'literal-1' ser encontrado. Se não for usada, a quantidade de caracteres a ser verificada será igual ao comprimento do campo receptor corrente. Entretanto,
se o sinal do campo receptor for definido como um carcter separado, a quantidade de caracteres verificada será o comprimento do campo receptor corrente menos uma unidade.
Os caracteres examinados (excluindo-se os delimitadores) são tratados como itens elementares alfa-numéricos e são movidos para o campo receptor corrente, conforme as regras do comando MOVE.
Se a opção DELIMITER IN for usada, os caracteres delimitadores serão tratados como itens elementares alfa-numéricos e serão movidos para o 'identifier-5', conforme as regras do comando MOVE.
Se a opção COUNT IN for usada, será movida para o 'identifier-6' a quantidade de caracteres processada no 'identifier-1'
(excluindo-se os caracteres delimitadores), de acordo com as regras de movimentação dos itens elementares.
Após os dados terem sido transferidos para o 'identifier-4', o campo receptor corrente será uma próxima ocorrência do 'identifier-4'.
O conteúdo do 'identifier-7' é incrementado de uma unidade para cada caracter verificado no 'identifier-1'.
Ao final da execução do UNSTRING com a opçãp WITH POINTER, o 'identifier-7' conterá um valor igual ao valor inicial mais o numéro de caracteres verificados no 'identifier-1'.
Ao final da execução do UNSTRING com a opção TALLYING, o 'identifier-8' conterá um valor igual ao seu valor inicial mais a quantidade de campos receptores ativados durante a execução.
A condição de OVERFLOW ocorrerá quando uma da scondições abaixo se verificar:
1. O valor do 'identifier-1' for menor que 1 ou maior que o comprimento do 'identifier-1'
2. Se durante a execução do UNSTRING, todos os campos receptores foram ativados e o 'identifier-1' ainda contiver caracteres não verificados.
Quando ocorrer a condição de OVERFLOW, o UNSTRING será terminado e a opção NOT ON OVERFLOW, se especificada, será ignorada. E o controle será transferido parao fim do UNSTRING ou, para o 'imperative-statement-1', se for especificada a opção ON OVERFLOW.
END-UNSTRING é o delimitador do comando.


O seu formato geral é:

Sintaxe do comando UNSTRING




Primeiro exemplo
        
      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

       01  WS-AUXILIARES.                                          
           05  WS-NOME-COMPLETO          PIC X(060) VALUE SPACES.  
           05  WS-NOME-01                PIC X(020) VALUE SPACES.  
           05  WS-NOME-02                PIC X(020) VALUE SPACES.  
           05  WS-NOME-03                PIC X(020) VALUE SPACES.  

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

           MOVE 'CARLOS ALBERTO DORNELLES' TO WS-NOME-COMPLETO    

           UNSTRING 
                  WS-NOME-COMPLETO DELIMITED BY SPACES          
           INTO 
                  WS-NOME-01                                        
                  WS-NOME-02                                        
                  WS-NOME-03                                        
           END-UNSTRING                                 
        
 Resultado: WS-NOME-01 = CARLOS
                   WS-NOME-02 = ALBERTO
                   WS-NOME-03 = DORNELLES


Volta para o início da página

Volta a página anterior

Volta ao Menu Principal