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.