PDA

Ver la Versión Completa : Secuenciar variable de caracteres.


BY_MY
20/02/09, 10:49:01
Buenos dias a todos.

La cosa en principio es muy sencilla y aunque se puede programar supongo que sap tendra algo ya echo.


Lo que estoy buscando es una funcion o comando al que si yo le paso una 'A' me devuelva 'B'. si le paso 'B' devuelva 'C'. Etc. La variable sera tipo char de 4 y el rango menos sera 'A' y el mayor 'ZZZZ'.


¿Alguna forma limpia y eficiente de hacerlo sin tener que llenar el codigo de if, case, etc.?


gracias, un saludo.

ballan
20/02/09, 12:49:01
Hasta donde yo se las tipicas funciones de CHR (le das un codigo ascii y te devuelve el caracter) y ASC(le das un caracter y te devuelve el codigo ascii) que tienen todos los lenguajes ABAP no las tiene, tendras que hacerlo por medio de field-symbols, por ejemplo



FIELD-SYMBOLS: <ascii> type x.

data: lv_caracter type c value 'A'.

assign lv_caracter to <ascii> CASTING.
*ahora en <ascii> tendrias el codigo hexadecimal de la 'A', es decir un 41

Tb podrias hacerlo al contrario

FIELD-SYMBOLS: <caracter> type c.

data: lv_ascii type x value '41'.

assign lv_ascii to <caracter> CASTING.
*ahora en <caracter> tendrias el caracter correspondiente al codigo ascii 65 (41 en hexadecimal) quicir la 'A'.

Luego es cuestion de jugar con esto, espero que te ayude


EDITO:

Se me acaba de ocurrir ahora que tb dispones de la variable de sistema SY-ABCDE que almacena 26 letras del alfabeto en orden asi que tb podrias jugar con esta variable, por ejemplo la 'A' seria el sy-abcde+0(1), la 'B' el sy-abcde+1(1), etc..

BY_MY
26/02/09, 08:23:45
Buenos dias.

Muchas gracias por ambas soluciones, al final lo solucione de una forma similar a la que me comentas pero es bueno saber lo del codigo ASCII para futuro. ;-)



Data: cadena(26) type c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
data:off TYPE I.

READ TABLE it_ziaviacionc INDEX 1.
* Buscamos en la cadena la posición de la letra
FIND letra IN cadena MATCH OFFSET off.
off = off + 1.
* Asignamos la siguiente a nuestro documento
letra = cadena+off(1).