terça-feira, 21 de junho de 2011

Controle de Caracteres

  "  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(1ne 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
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário