Como localizar uma substring dentro de uma string?

Para obter a posição de uma substring dentro de uma string podemos usar o comando INSPECT com a opção TALLYING CHARACTERS BEFORE, como no exemplo abaixo:

identification division.
program-id. gtc003.
data division.
working-storage section.
01 wt-string pic x(024) value "contato@gotocobol.com.br".
01 wt-posicao pic 9(002) value zeros.
procedure division.
main.
    move zeros to wt-posicao
    inspect wt-string 
        tallying wt-posicao 
        for characters before "@"
    add 1 to wt-posicao
    display wt-string " possui @ na posicao " wt-posicao
    stop run.

A substring que se está procurando também pode estar numa variável:

identification division.
program-id. gtc003.
data division.
working-storage section.
01 wt-string pic x(024) value "contato@gotocobol.com.br".
77 wt-substring pic x(001) value "@".
01 wt-posicao pic 9(002) value zeros.
procedure division.
main.
    move zeros to wt-posicao
    inspect wt-string 
        tallying wt-posicao 
        for characters before wt-substring
    add 1 to wt-posicao
    display wt-string " possui " 
            wt-substring " na posicao " wt-posicao
    stop run.

A opção TALLYING CHARACTERS BEFORE do comando INSPECT conta quantos caracteres existem antes da substring procurada. Por isso, somamos 1 ao contador (wt-posicao) para que ele guarde a posição inicial da substring.

Ao executar esse programa, a seguinte mensagem é exibida na tela:

[aeisxpad ~/cbl]$ gtc003
contato@gotocobol.com.br possui @ na posicao 08

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *