Gadgets para Blogger

Manejo de String en ABAP

CONCATENATE

Forma básica CONCATENATE f1 ... fn INTO g.

También le pueden agregar:
... SEPARATED BY h
donde h es el valor que ustedes quieran, generalmente es space.
Efecto
Combina las variables f1 a fn (n >= 2) en la variable g.
Note que los espacios sobrantes de cada variable del tipo C son ignorados.
En string C strings, en cambio, son considerados.

DATA: ONE(10) VALUE ' John ',
TWO(3) VALUE 'F.',
THREE(10) VALUE ' Kennedy',
NAME(20),
FIRST TYPE STRING.
CONCATENATE ONE TWO THREE INTO NAME.

NAME tiene el valor ' JohnF. Kennedy'.
Pero:

MOVE ONE TO FIRST. "FIRST = ' John'
SHIFT FIRST CIRCULAR. "FIRST = 'John '
CONCATENATE FIRST TWO INTO NAME.

NAME tiene el valor 'John F.'.

Adición ... SEPARATED BY h

Efecto Inserta el separador h entre las variables fi.
h es usado con su largo definido como un string del tipo C.

Ejemplos
DATA: ONE(10) VALUE 'John',
TWO(3) VALUE 'F.',
THREE(10) VALUE 'Kennedy',
NAME(20).
CONCATENATE ONE TWO THREE INTO NAME
SEPARATED BY SPACE.

NAME tiene el valor "John F. Kennedy".

DATA SEPARATOR(4) VALUE 'USA'.
CONCATENATE SPACE ONE TWO THREE INTO NAME
SEPARATED BY SEPARATOR.

NAME tiene el valor "USA JohnUSA F.USA Ke".


SPLIT
Variantes:
1. SPLIT f AT g INTO h1 ... hn.
2. SPLIT f AT g INTO TABLE itab.

Variante 1 SPLIT f AT g INTO h1 ... hn.

Efecto:
Separa f dondequiera que el separador g se encuentre y deja el resultado en las variables h1 ... hn (n >= 2).

Ejemplos
DATA: NAMES(30) TYPE C VALUE 'Charly, John , Peter',
NAMES2 TYPE STRING,
ONE(10) TYPE C,
TWO(10) TYPE C,
THREE TYPE STRING,
FOUR(4) TYPE C VALUE 'FOUR',
DELIMITER(2) VALUE ','.

SPLIT NAMES AT DELIMITER INTO ONE TWO.
* ONE contine 'Charly' y TWO contiene 'John , Pet'.
SPLIT NAMES AT ',' INTO ONE TWO THREE.
* ONE contiene 'Charly', TWO contiene ' John',
* THREE contiene ' Peter'.
SPLIT NAMES AT ', ' INTO ONE THREE TWO.
* ONE contiene 'Charly', THREE contiene 'John',
* TWO contiene 'Peter'.
CONCATENATE NAMES '' INTO NAMES2 SEPARATED BY SPACE.
SPLIT NAMES2 AT DELIMITER INTO ONE TWO THREE FOUR.
* ONE contiene 'Charly', TWO contiene 'John',
* THREE contiene 'Peter ', FOUR esta vacío.
SPLIT NAMES2 AT DELIMITER INTO ONE FOUR THREE.
* ONE contiene 'Charly', FOUR contiene 'John',
* THREE contiene 'Peter'.
Variante 2 SPLIT f AT g INTO TABLE itab.

Efecto
Similar a la Variante 1

La secciones de f son colocadas en la tabla interna itab. El sistema crea un registro en esta tabla para cada sección de f.

Ejemplo
TYPES: BEGIN OF ITAB_TYPE,
WORD(20),
END OF ITAB_TYPE.

DATA: ITAB TYPE STANDARD TABLE OF ITAB_TYPE WITH
NON-UNIQUE DEFAULT KEY INITIAL SIZE 5.

SPLIT 'STOP Two STOP Three STOP ' AT 'STOP' INTO TABLE ITAB.

ITAB ahora tiene tres registros. El primero esta vacío, el segundo contiene ' Two', y el tercero ' Three'.

CONDENSE

Forma básica
CONDENSE c.
Adición:
... NO-GAPS


Efecto:
Explora el contenido de c por la izquierda, así las secuencias de espacios son reducidas a solo uno. Los espacios sobrantes, son removidos.

Ejemplo
DATA NAME (30).
NAME(10) = ' Dr.',
NAME+10(10) = 'Michael',
NAME+20(10) = 'Hofmann'.
CONDENSE NAME.
WRITE NAME.
produce la salida:

Dr. Michael Hofmann

Adición ... NO-GAPS
Efecto:
Suprime todos los espacios de la variable c

Ejemplo
DATA: BEGIN OF NAME,
TITLE(8) VALUE ' Dr.',
FIRST_NAME(10) VALUE 'Michael',
SURNAME(10) VALUE 'Hofmann',
END OF NAME.
CONDENSE NAME NO-GAPS.

El contenido de NAME es "Dr.MichaelHofmann".

TRANSLATE
Variantes:
1. TRANSLATE c TO UPPER CASE.
2. TRANSLATE c TO LOWER CASE.
3. TRANSLATE c USING c1.

Variante 1 TRANSLATE c TO UPPER CASE.
Variante 2 TRANSLATE c TO LOWER CASE.

Efecto
La primera variante convierte todas las letras minúsculas en c a mayúsculas. La segunda variante convierte todas las mayúsculas a minúsculas.

Ejemplo
DATA letters(3) TYPE C.
MOVE 'abc' TO letters.
TRANSLATE letters TO UPPER CASE.
letters contiene ahora 'ABC'.


Variante 3 TRANSLATE c USING c1.

Efecto Traduce el contenido de c de acuerdo a la regla de la variable c1.
Cuando un carácter de c corresponde a un caracter de c1, este es reemplazado por el siguiente carácter que aparece en c1. Si el carácter aparece más de una vez en c1, la primera ocurrencia es usada en el reemplazo. Si un carácter de c no aparece en c1, este permanece sin cambios.

Ejemplo
DATA: letters(20) TYPE C VALUE 'abcabcabcXabc',
change(15) TYPE C VALUE 'aXbaYBabZacZB'.
TRANSLATE letters USING change.

letters contiene 'XaZXaZXaZXXaZ'.

REPLACE

Forma básica REPLACE f
...WITH g
...INTO h.

Adición:
... LENGTH len (especificación de largo para f)

Efecto
Reemplaza la primera ocurrencia del contenido de la variable f en la variable h con el contenido de la variable g. Todas las variables son manejadas con sus largos definidos, incluso variables C, donde los espacios sobrantes son usualmente ignorados.

Ejemplo
DATA FIELD(10).
MOVE 'ABCB' TO FIELD.
REPLACE 'B' WITH 'string' INTO field.

Devuelve:

FIELD = 'AstringCB', SY-SUBRC = 0


Adición ... LENGTH len ... (especificación de largo para f)

Efecto
Busca el string f en la variable h no en su largo definido, peo si en el largo len.

Ejemplo DATA: pattern(5) VALUE 'ABC',
len TYPE I,
repl_string(5) VALUE '12345',
field(12) VALUE 'abcdeABCDE'.

REPLACE pattern WITH repl_string
INTO field.

FIELD no cambia, debido a que 'ABC ' no aparece en 'abcdeABCDE '.

LEN = STRLEN( PATTERN ).
REPLACE PATTERN LENGTH LEN
WITH REPL_STRING
INTO FIELD.

FIELD cambia a 'abcde12345D'.
SEARCH
Variantes:

1. SEARCH f FOR g.
2. SEARCH itab FOR g.


Variante 1 SEARCH f FOR g.

Adición:

1. ... STARTING AT n1

Efecto Busca el contenido de f en el string g. Este string puede tener cualquiera de los siguientes formatos:

'str' una cadena de caracteres (los espacios sobrantes se ignoran)
'.str.' cualquier carácter entre puntos
'*str' una palabra terminada en "str", incluida "str"
'str*' una palabra que comienza con "str", incluso "str"


El sistema no distingue entre mayúsculas y minúsculas.


Adición 1 ... STARTING AT n1



Efecto Busca el contenido de f partiendo desde la posición n1.
Cuando se usa esta adición, la posición del patrón encontrado se guarda en la variable SY-FDPOS.


Variante 2 SEARCH itab FOR g.

Adición:

1. ... STARTING AT line1

Efecto Busca en la tabla internas itab for the string in field g. El string puede tener el mismo formato que en la variante 1. El valor de SY-SUBRC es 0, si el es encontrado en la tabla. La variable SY-TABIX entonces contiene el número del registro de la tabla donde el string fue encontrado. Mientras, SY-FDPOS específica el offset donde se encontró el string dentro del registro.

Adición 1 ... STARTING AT line1


Efecto Busca en la tabla interna itab partiendo del registro line1 hsat el final.

10 comentarios:

  1. estimado buenas noches, como separo una cadena de caracteres cada vez q aparesca un caracter especifico por ejemplo "|". ejemplo

    123456|abc|23|
    123458|abcdf|235|

    para poner cada valor en una tabla por ejemplo asi:

    http://s2.subirimagenes.com/imagen/previo/thump_8461213sin-ttulo.png

    ResponderEliminar
  2. Hola,

    la sentencia que tenés que usar es la SPLIT.

    Saludos!

    ResponderEliminar
  3. y comparando cadenas de caracteres?
    por ejemplo, S1 CO S2.
    ¿Cómo se haría?
    Gracias.

    ResponderEliminar
  4. Tengo este código

    DATA :
    s(70) value 'hola' ,
    o(70) VALUE 'adios' .

    s CO o. Me dice que "s" no está definido ¿porque?

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. pasa que la expresion de comparacion es boooleana, tenes que ponerla como condicion en alguna sentendia como if

    DATA: f1 TYPE string VALUE '...',
    f2 TYPE string VALUE '...'.

    IF f1 (operador) f2.
    ...........
    ELSE.
    ...........
    ENDIF.

    ResponderEliminar
  7. Muchas gracias me ayudo lo de hacer split a una tabla interna

    ResponderEliminar
  8. Concatene 3 campos y la puse en una variable,
    ahora quiero que escriba esta variable los campos que terminen con '*S.C.'

    Como se realizaría esta búsqueda con el campo concatenado?

    ResponderEliminar
  9. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar

Esperamos tus comentarios y sugerencias para mejorar el sitio.

Related Posts