COBOL - Comando INSPECT - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

INSPECT

Enterprise COBOL for z/OS 4.2.0


A instrução INSPECT examina caracteres ou grupos de caracteres em um item de dados e faz o seguinte:
  • Conta as ocorrências de um caractere específico (alfanumérico, DBCS ou nacional) em um item de dados (formatos 1 e 3).
  • Conta as ocorrências de caracteres específicos e preenche toda ou parte de um item de dados com caracteres especificados, como espaços ou zeros (formatos 2 e 3).
  • Converte todas as ocorrências de caracteres específicos em um item de dados em caracteres de substituição fornecidos pelo usuário (formato 4).

Formato1 - (INSPECT/TALLYING)

O formato 1 pode ser usado para contar o número de vezes que um determinado caracter aparece.

Primeiro exemplo

           INSPECT CAMPO-1 TALLYING CMP1 FOR ALL ZEROES

           INSPECT CAMPO-2 TALLYING CMP2 FOR CHARACTERS
                   BEFORE INITIAL ZEROES 

           INSPECT CAMPO-3 TALLYING CMP3 FOR LEADING ZEROES

Resultado

           Itens                Conteúdo do resultado

           CAMPO-1 = 000670     CMP1 = 4                
           CAMPO-2 = 123450     CMP2 = 5                
           CAMPO-3 = 007800     CMP3 = 2                
       

Formato 2 - (INSPECT/REPLACING)

O formato 2 substituirá ocorrências especificadas de um determinado caracter por outro.
Ela não contará o número de ocorrências de qualquer caracter.

Segundo exemplo

           INSPECT DATA-HOJE REPLACING ALL '-' BY '/'                

           INSPECT NUMERO-1 REPLACING ALL SPACES BY '-'

           INSPECT NUMERO-2 REPLACING LEADING '4' BY '5'

           INSPECT NUMERO-3 REPLACING CHARACTERS BY '3'
                   BEFORE INITIAL '2'

           INSPECT NUMERO-4 REPLACING FIRST 'X' BY 'Y'

Resultado

           Campo            Antes           Depois

           DATA-HOJE        06-03-1951      06/03/1951                
           NUMERO-1         44 21 11        44-21-11                
           NUMERO-2         442111          552111                
           NUMERO-3         112111          332111                
           NUMERO-4         ABCXYZ          ABCYYZ

Formato 3 - (INSPECT/TALLYING/REPLACING)

Mais um formato do comando INSPECT.

Terceiro exemplo (1):

           INSPECT ITEM TALLYING
                   COUNT-0 FOR ALL "AB", ALL "D"
                   COUNT-1 FOR ALL "BC"
                   COUNT-2 FOR LEADING "EF" 
                   COUNT-3 FOR LEADING "B" 
                   COUNT-4 FOR CHARACTERS

           INSPECT ITEM REPLACING
                   ALL "AB" BY "XY", "D" BY "X"
                   ALL "BC" BY "VW"
                   LEADING "EF" BY "TU" 
                   LEADING "B" BY "S" 
                   FIRST   "G" BY "R" 
                   FIRST   "G" BY "P" 
                   CHARACTERS BY "Z"

Resultado (1):

VALOR INICIAL COUNT-0 COUNT-1 COUNT-2 COUNT-3 COUNT-4 VALOR FINAL
EFABDBCGABEFGG 3 1 1 0 5 TUXYXVWRXYZZPZ
BABABC 2 0 0 1 1 SXYXYZ
BBBC 0 1 0 2 0 SSVW

Terceiro exemplo (2):

           INSPECT ITEM TALLYING
                   COUNT-0 FOR ALL "AB" BEFORE "BC"
                   COUNT-1 FOR LEADING "B" AFTER "D"
                   COUNT-2 FOR CHARACTERS AFTER "A" BEFORE "C" 
           INSPECT ITEM REPLACING
                   ALL "AB" BY "XY" BEFORE "BC"
                   LEADING "B" BY "W" AFTER "D"
                   FIRST "E" BY "V" AFTER "D" 
                   CHARACTERS BY "Z" AFTER "A" BEFORE "C" 

Resultado (2):

VALOR INICIAL COUNT-0 COUNT-1 COUNT-2 VALOR FINAL
BBEABDABABBCABEE 3 0 2 BBEXYZXYXYZCABVE
ADDDDC 0 0 4 AZZZZC
ADDDDA 0 0 5 AZZZZZ
CDDDDC 0 0 0 CDDDDC
BDBBBDB 0 3 0 BDWWWDB

Terceiro exemplo (3):

           INSPECT ITEM TALLYING
                   COUNT-0 FOR ALL "AB" AFTER "BA" BEFORE "BC"

           INSPECT ITEM REPLACING
                   ALL "AB" BY "XY" AFTER "BA" BEFORE "BC"

Resultado (3):

           Valor inicial    COUNT-0    Valor final
           ABABABABC              1    ABABXYABC

Formato 4 - (INSPECT/CONVERTING)

O formato 4 poderá ser usado para converter letras maiúsculas em minúsculas.

Quarto exemplo (1):

           INSPECT ITEM CONVERTING
                   "ABCD" TO "XYZX" AFTER QUOTE BEFORE "#"

           INSPECT ITEM CONVERTING
                   ALL "A" BY "X" AFTER QUOTE BEFORE "#"
                   ALL "B" BY "Y" AFTER QUOTE BEFORE "#"
                   ALL "C" BY "Z" AFTER QUOTE BEFORE "#"
                   ALL "D" BY "X" AFTER QUOTE BEFORE "#" 

Resultado (1):

           Valor inicial           Valor final

           AC"AEBDFBCD#AB"D        AC"XEYXFYZX#AB"D

Formato 5 - (INSPECT FUNCTION REVERSE)

INSPECT FUNCTION REVERSE verifica quantidade de brancos depois o último caracter significativo

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-TAMANHO   PIC 9(09)  VALUE 0.
    05  WS-TAMANHO-1 PIC 9(09)  VALUE 0.
    05  WS-RESULT    PIC 9(09)  VALUE 0.
    05  WS-CAMPO     PIC X(30)  VALUE 'CARLOS ALBERTO        '.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CAMPO) 
        TALLYING WS-TAMANHO-1 FOR LEADING SPACES

DISPLAY 'Quantidade de brancos depois o último caracter significativo '
DISPLAY 'WS-TAMANHO-1 - ' WS-TAMANHO-1.
COMPUTE WS-RESULT = FUNCTION LENGTH (WS-CAMPO)
COMPUTE WS-RESULT = WS-RESULT - WS-TAMANHO-1
DISPLAY 'Quantidade de dados até o último caracter significativo' 
DISPLAY 'WS-RESULT    - ' WS-RESULT
DISPLAY 'WS-CAMPO     - ' WS-CAMPO  (1:WS-RESULT)

STOP RUN.

Resultado do teste:

Quantidade de brancos depois o último caracter significativo 
WS-TAMANHO-1 - 000000016

Quantidade de dados até o último caracter significativo 
WS-RESULT    - 000000014
WS-CAMPO     - CARLOS ALBERTO

Troca de caracteres especiais
      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

       01  W00-FILLER.
           02  W00-CHAR-INVALIDO.
               05  CHAR-INV1            PIC X(32) VALUE SPACES.
               05  CHAR-INV2            PIC X(32) VALUE SPACES.
               05  CHAR-INV3            PIC X(32) VALUE SPACES.
               05  CHAR-INV4            PIC X(32) VALUE SPACES.
               05  CHAR-INV5            PIC X(32) VALUE SPACES.
               05  CHAR-INV6            PIC X(32) VALUE SPACES.
               05  CHAR-INV7            PIC X(32) VALUE SPACES.
               05  CHAR-INV8            PIC X(32) VALUE SPACES.
           02  W01-CHAR-INVALIDO        REDEFINES W00-CHAR-INVALIDO 
                                        PIC X(256).
       01  W00-FILLER2.
           02  W00-CHAR-VALIDO.
               05  CHAR-VAL1            PIC X(32) VALUE SPACES.
               05  CHAR-VAL2            PIC X(32) VALUE SPACES.
               05  CHAR-VAL3            PIC X(32) VALUE SPACES.
               05  CHAR-VAL4            PIC X(32) VALUE SPACES.
               05  CHAR-VAL5            PIC X(32) VALUE SPACES.
               05  CHAR-VAL6            PIC X(32) VALUE SPACES.
               05  CHAR-VAL7            PIC X(32) VALUE SPACES.
               05  CHAR-VAL8            PIC X(32) VALUE SPACES.
           02  W01-CHAR-VALIDO          REDEFINES W00-CHAR-VALIDO 

      *-----------------------------------------------------------------
       PROCEDURE DISIVION.
      *-----------------------------------------------------------------

      * TROCA DE CARACTERES ESPECIAIS

           MOVE  SPACES                             TO CHAR-INV1  
           MOVE  SPACES                             TO CHAR-INV2  
           MOVE  '  âäàáãåçñ¢.<(+|&éêëèíîïìß!$*);¬' TO CHAR-INV3
           MOVE  '-/ÂÄÀÁÃÅÇѦ,%_>?øÉÊËÈÍÎÏÌ`:#@ ="' TO CHAR-INV4
           MOVE  X'7D'                              TO CHAR-INV4(30:1)
           MOVE  'Øabcdefghi«»ðýþ±°jklmnopqrªºæ¸Æ¤' TO CHAR-INV5
           MOVE  'µ~stuvwxyz¡¿ÐÝÞ®^£¥·©§¶¼½¾[]¯¨´×' TO CHAR-INV6
           MOVE  '{ABCDEFGHI­ôöòóõ}JKLMNOPQR¹ûüùúÿ' TO CHAR-INV7
           MOVE  '\÷STUVWXYZ²ÔÖÒÓÕ0123456789³ÛÜÙڟ' TO CHAR-INV8

           MOVE  SPACES                             TO CHAR-VAL1  
           MOVE  SPACES                             TO CHAR-VAL2  
           MOVE  '  AAAAAAC  .     EEEEIIII     ; ' TO CHAR-VAL3
           MOVE  '-/A A   C  ,     EEEEIIII :   ="' TO CHAR-VAL4
           MOVE  X'40'                              TO CHAR-VAL4(30:1)
           MOVE  ' ABCDEFGHI       JKLMNOPQR      ' TO CHAR-VAL5
           MOVE  '  STUVWXYZ                      ' TO CHAR-VAL6
           MOVE  ' ABCDEFGHI       JKLMNOPQR uu   ' TO CHAR-VAL7
           MOVE  '  STUVWXYZ OO   0123456789 U    ' TO CHAR-VAL8

      *-----------------------------------------------------------------
      * NO LOCAL DESEJADO DO PROGRAMA
      *-----------------------------------------------------------------

           INSPECT NOME-CAMPO
                   CONVERTING W01-CHAR-INVALIDO TO W01-CHAR-VALIDO

Argumentos
identifier-1
É o item inspecionado e pode ser um dos seguintes:
  • Um item de grupo alfanumérico ou um item de grupo nacional
  • Um item de dados elementar descrito explícita ou implicitamente com o uso DISPLAY, DISPLAY-1 ou NATIONAL.
    O item pode ter qualquer categoria que seja válida para o uso selecionado.
identifier-3, identifier-4, identifier-5, identifier-6, identifier-7
Deve fazer referência a um item de dados elementar descrito explícita ou implicitamente com o uso DISPLAY, DISPLAY-1 ou NATIONAL.

literal-1, literal-2, literal-3, literal-4
Deve ser da categoria alfanumérica, DBCS ou nacional.
Quando o identifier-1 é de uso NACIONAL, os literais devem ser da categoria nacional.
Quando o identifier-1 é de uso DISPLAY-1, os literais devem ser da categoria DBCS.
Quando o identifier-1 é usado, os literais devem ser da categoria alfanuméricos.
Quando o identifier-1 é útil, os literais DISPLAY-1 (DBCS) podem ser a constante figurativa SPACE.
Quando o identifier-1 é usado DISPLAY ou NATIONAL, os literais podem ser qualquer constante figurativa que não comece com a palavra ALL, conforme especificado em Constantes figurativas.
A constante figurativa é tratada como um literal alfanumérico de um caractere quando o identifier-1 é de uso DISPLAY, e como um literal nacional de um caractere quando o identifier-1 é de uso NATIONAL.

Todos os identificadores (exceto o identifier-2 ) devem ter o mesmo uso que o identifier-1.
Todos os literais devem ter categoria alfanumérica, DBCS ou nacional quando o identificador-1 usa DISPLAY, DISPLAY-1 ou NATIONAL, respectivamente.

Nenhum dos identificadores em uma instrução INSPECT pode ser campos de data em janela.

TALLYING phrase (formats 1 and 3)

Esta frase conta as ocorrências de um caractere específico ou caractere especial em um item de dados.

Quando o identifier-1 é um item de dados DBCS, os caracteres DBCS são contados; quando o identifier-1 é um item de dados nacional de uso, os caracteres nacionais (unidades de codificação) são contados; caso contrário, os caracteres alfanuméricos (bytes) serão contados.

identifier-2
É o campo de contagem e deve ser um item inteiro elementar definido sem o símbolo P em sua cadeia de caracteres PICTURE.
o identifier-2 não pode ser da categoria ponto flutuante externo.
Você deve inicializar o identifier-2 antes que a execução da instrução INSPECT comece.
Nota de uso: O campo de contagem pode ser um item de dados inteiro definido com o uso NATIONAL.

identifier-3 or literal-1
É o campo de cálculo (o item cujas ocorrências serão registradas).

CHARACTERS
Quando CHARACTERS é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de contagem (identifiEr-2 ) é aumentado em 1 para cada caractere (incluindo o caractere de espaço) no item inspecionado (identifiEr-1).
Portanto, a execução de uma instrução INSPECT com a frase TALLYING aumenta o valor no campo count pelo número de posições de caracteres no item inspecionado.

ALL
Quando ALL é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de contagem (identifier-2) é aumentado em 1 para cada ocorrência não sobreposta do comparador de cálculo (identifier-3 ou literal-1) no item inspecionado (identifier-1), começando na posição do caractere mais à esquerda e continuando à direita.

LEADING
Quando LEADING é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de contagem (identifiEr-2) é aumentado em 1 para cada ocorrência não sobreposta contígua da comparação de cálculo e no item inspecionado (identifiEr-1), desde que o mais à esquerda seja A ocorrência é no ponto em que a comparação começou no primeiro ciclo de comparação do qual o comparador de cálculo é elegível para participar.

FIRST (somente formato 3)
Quando FIRST é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de substituição substitui a ocorrência mais à esquerda do campo de assunto no item inspecionado (identifier-1 ).

REPLACING phrase (formats 2 and 3)

Essa frase preenche todos ou partes de um item de dados com caracteres especificados, como espaços ou zeros.

identifier-3 or literal-1
É o campo de assunto, que identifica os caracteres a serem substituídos.

identifier-5 or literal-3
É o campo de substituição (o item que substitui o campo de assunto).
O campo de assunto e o campo de substituição devem ter o mesmo comprimento.

CHARACTERS BY
Quando a frase CHARACTERS BY é usada, o campo de substituição deve ter uma posição de caractere de comprimento.
Quando CHARACTERS BY é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de substituição substitui cada caractere no item inspecionado (identifier-1), começando na posição de caractere mais à esquerda e continuando à direita.

ALL
Quando ALL é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de substituição substitui cada ocorrência não sobreposta do campo de assunto no item inspecionado (identifier-1), começando na posição de caractere mais à esquerda e continuando à direita.

LEADING
Quando LEADING é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de substituição substitui cada ocorrência contígua e não sobreposta do campo de assunto no item inspecionado (identifier-1), desde que a ocorrência mais à esquerda esteja no ponto em que a comparação começou.
o primeiro ciclo de comparação do qual esse campo de substituição está qualificado para participar.

FIRST
Quando FIRST é especificado e nem a frase BEFORE nem AFTER é especificada, o campo de substituição substitui a ocorrência mais à esquerda do campo de assunto no item inspecionado (identifier-1).

Quando as frases TALLYING e REPLACING são especificadas (formato 3), a instrução INSPECT é executada como se uma instrução INSPECT TALLYING (formato 1) fosse especificada, seguida imediatamente por uma instrução INSPECT REPLACING (formato 2).

As seguintes regras de substituição se aplicam:

  • Quando o campo de assunto é uma constante figurativa, o campo de substituição de um caractere substitui cada caractere no item inspecionado que é equivalente à constante figurativa.
  • Quando o campo de substituição é uma constante figurativa, o campo de substituição substitui cada ocorrência não sobreposta do campo de assunto no item inspecionado.
  • Quando os campos de assunto e substituição são cadeias de caracteres, a cadeia de caracteres especificada no campo de substituição substitui cada ocorrência não sobreposta do campo de sujeito no item inspecionado.
  • Após a substituição em uma determinada posição de caractere no item inspecionado, nenhuma substituição adicional para essa posição de caractere é feita nesta execução da instrução INSPECT.

BEFORE and AFTER phrases (all formats)

Esta frase restringe o conjunto de itens que estão sendo computados ou substituídos.
Não é possível especificar mais do que uma frase BEFORE e AFTER para qualquer frase ALL, LEADING, CHARACTERS, FIRST ou CONVERTING.

identifier-4 or literal-2
É o delimitador.
Delimitadores não são contados ou substituídos.

INITIAL
A primeira ocorrência de um item especificado.
  • Quando BEFORE de ser especificado, a contagem ou substituição do item inspecionado (identifier-1) começa na posição de caractere mais à esquerda e continua até que a primeira ocorrência do delimitador seja encontrada.
    Se nenhum delimitador estiver presente no item inspecionado, a contagem ou substituição continuará na direção da posição do caracter mais à direita.
  • Quando AFTER é especificado, a contagem ou a substituição do item inspecionado (identifier-1 ) começa com a primeira posição de caractere à direita do delimitador e continua em direção à posição de caractere mais à direita no item inspecionado.
    Se nenhum delimitador estiver presente no item inspecionado, nenhuma contagem ou substituição ocorrerá.
  • CONVERTING phrase (format 4)

    Essa frase converte todas as ocorrências de um caractere específico ou sequência de caracteres em um item de dados (identifier-1 ) em caracteres de substituição fornecidos pelo usuário.

    identifier-6 ou literal-4
    Especifica a cadeia de caracteres a ser substituída.
    O mesmo caractere não deve aparecer mais de uma vez no literal-4 ou no identifier-6.

    identifier-7 ou literal-5
    Especifica a cadeia de caracteres substituída.
    A cadeia de caracteres substituída (identifier-7 ou literal-5) deve ter o mesmo tamanho que a cadeia de caracteres substituída ( identifier-6 ou literal-4 ).

    Uma instrução INSPECT no formato 4 é interpretada e executada como se uma instrução INSPECT no formato 2 tivesse sido escrita com uma série de frases ALL (uma para cada caractere do literal-4 ), especificando o mesmo identifier-1.
    O efeito é como se cada caractere único do literal-4 fosse referenciado como literal-1 e o caractere único correspondente do literal-5 referenciado como literal-3.
    A correspondência entre os caracteres do literal-4 e os caracteres do literal-5 é feita pela posição ordinal no item de dados.

    Se o identifier-4 , o identifier-6 ou o identifier-7 ocuparem a mesma área de armazenamento que o identifier-1 , o resultado da execução dessa instrução será indefinido, mesmo se eles forem definidos pela mesma entrada de descrição de dados.