" Tentarei mostrar um código muito interessante onde vc consegue
" controlar os caracteres dentro de campos ou variaveis, desmembrando
" caso queira dentro de outras variáveis ou campos de de estruturas
" ou tabelas.
" Debuggem, coloquem contadores em lugares diferentes e ve oq acontece
" mexam nisso pois com certeza um dia isso irá te ajudar.
*&---------------------------------------------------------------------*
REPORT zmj_crtl_caract.
" Variáveis .....
DATA : vg_text TYPE string,
vg_qtde TYPE i.
" Tela de seleção ...
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
PARAMETERS:
p_text TYPE string OBLIGATORY, " Texto ( Texto : ).
p_value TYPE c
.
SELECTION-SCREEN END OF BLOCK b01.
" Inicio da seleção ...
START-OF-SELECTION.
" Aqui eu alimento uma variável com a quantidade de caracter do
" parameters que o usuário informado.
vg_qtde = strlen( p_text ).
PERFORM : z_tira_carac,
z_leitura_especif
.
*&---------------------------------------------------------------------*
*& Form z_tira_carac
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM z_tira_carac .
" Joga o texto informado pelo usuário pra dentro de uma variável
" para que vc possa trabalha deboua com a informação.
vg_text = p_text.
" Tira os 3 primeiros caracteres da variavel.
DO 3 TIMES.
SHIFT vg_text.
ENDDO.
WRITE : 'O texto sem os 3 primeiros digitos é : ', vg_text .
ENDFORM. " z_tira_carac
*&---------------------------------------------------------------------*
*& Form Z_LEITURA_ESPECIF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form Z_LEITURA_ESPECIF .
vg_text = p_text.
" Variáveis locais tarbalhando como contadores.
data : vl_cont TYPE i VALUE '1',
vl_posi TYPE i
.
DO vg_qtde TIMES.
" verifica se primeiro caracter do texto e diferente do caracter informado
IF vg_text(1) ne p_value.
" Anda um caracter e joga ele no final da string pois eh 'CIRCULAR'.
shift vg_text CIRCULAR.
add 1 to vl_cont.
ENDIF.
ENDDO.
IF vl_cont >= vg_qtde.
write : /, 'O caracter ', p_value,' Não foi encontrado no texto ', p_text, ' .'.
ELSE.
write : /, 'O caracter ', p_value,' está na posição ', vl_cont, ' .'.
ENDIF.
WRITE : /,'O texto com "Shift Circular" fica assim a',
/,' partir do caracter selecionado : ', vg_text ,' .'.
endform. " Z_LEITURA_ESPECIF