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