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.
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:
DATA: v_texto(40) TYPE c,
v_numero TYPE i.
v_texto = 'Abap Recife'.
v_numero = STRLEN( v_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
DATA: v_texto TYPE STRING,
v_numero TYPE i.
v_texto = 'Olá! sou abap recife'.
v_numero = NUMOFCHAR( v_texto ).
WRITE v_numero.
"Saída: 20
CONCATENATE
Retorna dois ou mais textos concatenados em uma única variável.
Exemplo:
DATA: v_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:
DATA: N(3) TYPE N VALUE 7,
C(10) TYPE C VALUE 'ABAP',
S TYPE STRING VALUE 'Recife'.
CONCATENATE C S N INTO S RESPECTING BLANKS.
WRITE S.
* Saída: ABAP Recife007
Realiza substituições em um texto.
Exemplo:
DATA: TEXT(40) TYPE C VALUE 'Gol do brasil é gol de placa'.
REPLACE ALL OCCURRENCES OF 'gol' IN TEXT WITH 'golaço' IGNORING CASE.
WRITE: / TEXT.
* 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:
Outros usos do SHIFTDATA: v_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 5 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 5 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 5 PLACES CIRCULAR. "Desloca 5 posições de forma circular esq/dir
WRITE: / v_textoaux. "Saída: do Mundo no BrasilCopa
DATA: v_texto(30) TYPE C 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
DATA: v_texto(40) TYPE c 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.
write: v_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
clear: v_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(30) TYPE C 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
DATA: v_texto(10) TYPE C VALUE '11.12.2013',
v_parte1(10) TYPE C,
v_parte2(10) TYPE C,
v_parte3(10) TYPE C.
SPLIT v_texto AT '.' INTO v_parte1 v_parte2 v_parte3.
WRITE: v_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
DATA: v_texto1 TYPE P VALUE '66056.3-',
v_texto2(15) TYPE C,
v_texto3(15) TYPE C.
WRITE v_texto1.
WRITE v_texto1 TO v_texto2 NO-GAP NO-GROUPING.
WRITE: / v_texto2.
WRITE v_texto1 TO v_texto2 DECIMALS 5 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.
WRITE: l_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
DATA: v_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:
ótimo post! Que venha muitos e muitos outros.. Parabéns!
Muito bom! Parabéns
Postar um comentário