A declaração FIND é usada para encontrar ocorrências de um padrão dentro de uma string. Ela também pode ser usado para localizar o padrão de sequência dentro de uma tabela interna.
A declaração REPLACE substitui uma string por uma outra e possui os mesmos parâmetros da declaração FIND, apenas acrescentando o comando WITH.
Sintaxe:
REPLACE s1 WITH s2 INTO c [LENGTH l].
e
FIND s1 IN s2.
FIND [FIRST OCCURRENCE OF ou ALL OCCURENCES OF] s1 IN s2.
FIND s1 IN s2 [IGNORING CASE ou RESPECTING CASE].
Resultado da operação de localização são armazenados na constante sy-SUBRC:
- sy-SUBRC definido como 0, se for encontrado.
- sy-SUBRC definido para 4 se não for encontrado.
Exemplo:
Neste exemplo procuramos a palavra “Amora” dentro de outro campo string, contamos o numero de ocorrências e usamos parâmetros de caso sensitivo e insensitivo.
*&---------------------------------------------------------------------*
*& Report ZENCONTRAR
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Encontrar Strings
*&---------------------------------------------------------------------*
REPORT ZENCONTRAR.
DATA : desc TYPE c LENGTH 30,
campo1 TYPE c LENGTH 50,
campo2 TYPE c LENGTH 50,
campo3 TYPE c LENGTH 100,
x TYPE i.
campo1 = 'Amora'.
campo2 = 'amora'.
campo3 = 'Você deve encontrar a string Amora dentro deste campo Amora, Amora, Amora'.
WRITE : / campo3.
desc = 'Valor default da constante:'.
WRITE : / 'A Constante sy-subrc determina o resultado do comando Find encontrou=0 não encontrou =4',
/ desc, 'sy-subrc = ', sy-subrc.
desc = 'Primeira ocorrencia '.
FIND FIRST OCCURRENCE OF campo1 IN campo3 MATCH COUNT x.
PERFORM resultadoFind USING campo1 x.
desc = 'Todas as ocorrencias'.
FIND ALL OCCURRENCES OF campo1 IN campo3 MATCH COUNT x.
PERFORM resultadoFind USING campo1 x.
desc = 'Ignora Case'.
FIND campo2 IN campo3 IGNORING CASE MATCH COUNT x.
PERFORM resultadoFind USING campo2 x.
desc = 'Respeita Case'.
FIND campo2 IN campo3 RESPECTING CASE MATCH COUNT x.
PERFORM resultadoFind USING campo2 x.
REPLACE ALL OCCURRENCES OF campo1 IN campo3 With 'Banana'.
WRITE : / 'O campo3 foi modificado para:',
/ campo3.
FORM resultadoFind USING VALUE(X1) VALUE(X2).
IF sy-subrc EQ 0.
WRITE : / sy-subrc, X1, desc, ' encontrou', X2, 'strings'.
ELSE.
WRITE : / sy-subrc, X1, desc, ' não encontrou', X2, 'strings'.
ENDIF.
ENDFORM.

