Manipulação de Textos

terça-feira, 2 de abril de 2013 2 comentários
Olá Amigos do ABAP Recife.

Nos nossos trabalhos sempre lidamos com a situação de manipular algum texto. Neste Post vamos ver alguns dos comandos manipulação de texto mais comuns no ABAP.


STRLEN

Retorna o tamanho de um texto. Obs: Se usar código não Unicode de dois bytes, o caracter que usa dois bytes é contado duas vezes.
Exemplo:
  DATAv_texto(40TYPE c,
      v_numero    TYPE i.
v_texto 'Abap Recife'.
v_numero STRLENv_texto ).
WRITE v_numero.
"Saída: 11
 
NUMOFCHAR

Retorna o tamanho de um texto. Obs: Se usar código não Unicode de dois bytes, o caracter que usa dois bytes só é contado uma vez.

Exemplo

DATAv_texto TYPE STRING,
      v_numero    TYPE i.
v_texto 'Olá! sou abap recife'.
v_numero NUMOFCHARv_texto ).
WRITE v_numero.
"Saída: 20



CONCATENATE
Retorna dois ou mais textos concatenados em uma única variável.
Exemplo:
DATAv_texto1 TYPE char10 VALUE 'Isto',
      v_texto2 TYPE string VALUE 'concatenação',
      v_saida  TYPE string.
CONCATENATE v_texto1 'é' v_texto2 INTO v_saida SEPARATED BY SPACE.
WRITE v_saida.
"Saída: Isto é concatenação

O comando SEPARATED BY indica que todos os textos unidos podem ser separados por um delimitador, neste caso foi um espaço vazio (SPACE).
O comando RESPECTING BLANKS mantém o tamanho do elemento texto envolvido na concatenação.

Exemplo:
DATAN(3)  TYPE N      VALUE 7,
      C(10TYPE C      VALUE 'ABAP',
      S     TYPE STRING VALUE 'Recife'.
CONCATENATE S N INTO S RESPECTING BLANKS.
WRITE S.
* Saída: ABAP      Recife007


REPLACE

Realiza substituições em um texto.

Exemplo:
DATATEXT(40TYPE VALUE 'Gol do brasil é gol de placa'.
REPLACE ALL OCCURRENCES OF 'gol' IN TEXT WITH 'golaço' IGNORING CASE.
WRITETEXT.
* Saída: golaço do brasil é golaço de placa


O comando IGNORING CASE faz com que seja ignorado o fato de possuir letras maiúsculas ou minúsculas.


SHIFT


Desloca caracteres em um texto. Acompanhe o exemplo a seguir: 


Exemplo:

DATAv_texto     TYPE string VALUE 'Copa do Mundo no Brasil',
      v_textoaux  TYPE string.

v_textoaux v_texto.
SHIFT v_textoaux.                       "Apenas desloca uma posição à esquerda.
WRITE/ v_textoaux.                    "Saída: opa do Mundo no Brasil

v_textoaux v_texto.
SHIFT v_textoaux BY PLACES LEFT.      "Desloca 5 posições a esquerda
WRITE/ v_textoaux.                    "Saída: do Mundo no Brasil

v_textoaux v_texto.
SHIFT v_textoaux BY PLACES RIGHT.     "Desloca 5 posições a direita
WRITE/ v_textoaux.                    "Saída:      Copa do Mundo no Brasil

v_textoaux v_texto.
SHIFT v_textoaux BY PLACES CIRCULAR.  "Desloca 5 posições de forma circular esq/dir
WRITE/ v_textoaux.                    "Saída: do Mundo no BrasilCopa


Outros usos do SHIFT

DATAv_texto(30TYPE VALUE '  99.999,00',
      v_texto_aux        LIKE v_texto.
WRITE/ v_texto.
v_texto_aux v_texto.
* Desloca para a esquerda, removendo o espaço em branco no início
SHIFT v_texto_aux LEFT DELETING LEADING SPACE IN CHARACTER MODE.
WRITE/ v_texto_aux.
v_texto_aux v_texto.
* Desloca para a direita, removendo o espaço em branco no fim
SHIFT v_texto_aux RIGHT DELETING TRAILING SPACE IN CHARACTER MODE.
WRITE/ v_texto_aux.
* Desloca para a direita, removendo ',00' do fim do texto
SHIFT v_texto_aux RIGHT DELETING TRAILING ',00'.
WRITE/ v_texto_aux.
* Saída
*
*  99.999,00
*99.999,00
*                     99.999,00
*                        99.999



FIND

Retorna a posição de um subtexto dentro de um texto.

Exemplo
  DATAv_texto(40TYPE VALUE 'O ABAP Recife é ABAP na sua vida',
      v_resultado TYPE MATCH_RESULT.

FIND FIRST OCCURRENCE OF 'abap' IN v_texto IGNORING CASE RESULTS v_resultado.

writev_resultado-offset.

* Saída: 2
* Esta é a posição inicial em v_texto de 'abap'



TRANSLATE

Baseada em uma cadeia de caracteres esta função altera caracteres em um texto. Por exemplo se tivermos a cadeia de caracteres 'áaêe', onde houver 'á' será substituído por 'a' e onde houver 'ê' será substituído por 'e'. 

Exemplo

DATA v_texto TYPE string VALUE 'ABCDE'.

TRANSLATE v_texto USING 'AaBeCiDoEu'.
WRITE v_texto.

"Saída: aeiou

clearv_texto.
v_texto 'Só Têm Carrões'.

skip.
TRANSLATE v_texto USING 'óoêeõo'.
WRITE v_texto.

"Saída: So Tem Carroes




CONDENSE

Remove espaços em branco do início e fim de um texto.

Exemplo

DATA v_texto(30TYPE VALUE '        Abap Recife        '.

CONDENSE v_texto.
WRITE v_texto.
"Saída: Abap Recife

CONDENSE v_texto NO-GAPS.
WRITE/ v_texto.
"Saída: AbapRecife



SPLIT

Separa um texto em partes individuais através de um delimitador.

Exemplo

DATAv_texto(10TYPE VALUE '11.12.2013',
      v_parte1(10TYPE C,
      v_parte2(10TYPE C,
      v_parte3(10TYPE C.

SPLIT v_texto AT '.' INTO v_parte1 v_parte2 v_parte3.
WRITEv_parte1,
       / v_parte2,
       / v_parte3.

* Saída:
*
* 11
* 12
* 2013



WRITE TO

A instrução WRITE além de imprimir saídas de tela, permite a atribuição com formatação de textos.

Exemplo

DATAv_texto1     TYPE VALUE '66056.3-',
      v_texto2(15TYPE C,
      v_texto3(15TYPE C.

WRITE v_texto1.
WRITE v_texto1 TO v_texto2 NO-GAP NO-GROUPING.
WRITE/ v_texto2.
WRITE v_texto1 TO v_texto2 DECIMALS LEFT-JUSTIFIED NO-SIGN.
WRITE/ v_texto2.
WRITE v_texto2 TO v_texto3 RIGHT-JUSTIFIED.
WRITE/ v_texto3.

* Saída
*
*          66.056-
*          66056-
* 66.056,00000
*    66.056,00000



O comando USING EDIT MASK permite que sejam aplicadas máscaras a um texto, como: telefone, cpf, cnpj, data, hora, entre outros.

Exemplo

DATA:  l_dt(10)   TYPE c,
       l_hr(5)    TYPE c,
       l_cpf(14)  TYPE c.
WRITE sy-datum USING EDIT MASK '__/__/____' TO l_dt.
WRITE sy-uzeit USING EDIT MASK '__:__' TO l_hr.
WRITE '86463258491' USING EDIT MASK '___.___.___-__' TO l_cpf.
WRITEl_dt,
       / l_hr,
       / l_cpf.
* Saída:
*
* 02/04/2013
* 10:25
* 864.632.584-91


Overlay

Sobrepõe caracteres em um texto a partir de outro texto.
Exemplo
DATAv_texto1(60)      TYPE C      VALUE 'Abap para Abapeiros',
      v_texto2          TYPE STRING VALUE 'Abap_para_Abapeiros',
      v_texto3(6)       TYPE C      VALUE 'A B C ',
      v_texto4(6)       TYPE C      VALUE '1_B_3 ',
      v_texto5(2)       TYPE C      VALUE 'AB'.


OVERLAY v_texto1 WITH v_texto2.
WRITE/ v_texto1.

OVERLAY v_texto3 WITH v_texto4 ONLY v_texto5.
WRITE/ v_texto3.

* Saída:
*
* Abap_para_Abapeiros
* 1 B C

Obs: Se não for passada a instrução ONLY, apenas sobrepõem espaços vazios, se não os texto colocados após o ONLY.
FONTE: ABAP passo a passo; Márcio Brener; 2010

2 comentários:

Postar um comentário