Secuenciar variable de caracteres.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • BY_MY
    Senior Member
    • nov
    • 130

    #1

    Secuenciar variable de caracteres.

    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
    Senior Member
    • oct
    • 671

    #2
    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..
    Editado por última vez por ballan; 20/02/2009, 12:51:49.

    Comentario

    • BY_MY
      Senior Member
      • nov
      • 130

      #3
      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'.
      dataff 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).

      Comentario

      Trabajando...