Eliminar no numericos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • nachoregi
    Member
    • jul
    • 72

    #1

    Eliminar no numericos

    HOla he hecho un algoritmo k elimina todos los caracteres no numericos de una cadena y mi jefe de dice k lo cambie k tiene k existir algo mas directo o mas sencillo , si alguien lo conoce agradeceria la ayuda.

    Saludos.
  • robert_milan
    Senior Member
    • jun
    • 315

    #2
    podriamos ver tu codigo de tu funcion y ver si no esta optimizada o no?.


    Pero podrias especificar mas lo que quieres y ver si es posible mas sencillo o no.

    Saludos!!!
    Un Huevon No Inútil


    Solo di lo que piensas, a la mejor tienes la mejor respuesta....

    Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

    Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

    Consultor FI jr/ABAP Sr.

    Comentario

    • nachoregi
      Member
      • jul
      • 72

      #3
      tengo una cadena y quiero dejar solo los caracteres numericos eliminando tb los 0's de la izquierda , el campo es it_fichero-cantxpza y todas las variables son enteros.

      shift it_fichero-cantxpza left deleting leading '0'.

      clear: cont , elim , cont_1 , y , i , elim_aux , cont_aux.
      i = strlen( it_fichero-cantxpza ).

      DO i times.
      IF ( it_fichero-cantxpza+cont(1) CN '0123456789' ).
      **Si es la primera letra se elimina directamente sino DUMP
      IF ( cont = 0 ) .
      it_fichero-cantxpza+cont(1) = ''.
      ELSE.
      elim_aux = elim + 1.
      y = cont - elim.
      cont_aux = y + 1.
      it_fichero-cantxpza+elim_aux(y) = it_fichero-cantxpza+elim(y) .
      it_fichero-cantxpza+elim(1) = ''.
      elim = elim + 1.
      ENDIF.
      ENDIF.
      cont = cont + 1.
      ENDDO.

      Comentario

      • robert_milan
        Senior Member
        • jun
        • 315

        #4
        Mira asi seria mas facil

        DATA: i TYPE i, tam TYPE i.
        anyval = string.

        CLEAR i.

        tam = strlen( anyval ).

        tam = tam - 1.

        DO tam TIMES.

        IF ( anyval+i(1) < '0' OR anyval+i(1) > '9' ).
        CLEAR anyval+i(1).
        ENDIF.

        ADD 1 TO i.

        ENDDO.

        Condese anyval no-gaps.

        Con esto limpias todos los que no son numeros
        saludos
        Un Huevon No Inútil


        Solo di lo que piensas, a la mejor tienes la mejor respuesta....

        Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

        Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

        Consultor FI jr/ABAP Sr.

        Comentario

        • DavidXD_XD
          Moderator
          • ago
          • 1255

          #5
          Creo que no hay, y si le colocas asi:

          DATA: cadena LIKE it_fichero-cantxpza.

          clear: i, cadena, cont.
          i = strlen( it_fichero-cantxpza ).

          DO i times.
          IF ( it_fichero-cantxpza+cont(1) CA '0123456789' ). "Ojo es CA
          CONCATENATE cadena it_fichero-cantxpza+cont(1) INTO cadena.
          ENDIF.
          cont = cont + 1.
          ENDDO.

          * Eliminando los ceros a la izquierda para evitar el DUMP
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
          INPUT = cadena
          IMPORTING
          OUTPUT = cadena.

          * Al final solo igualamos
          it_fichero-cantxpza = cadena.

          Espero te sirva ...
          Editado por última vez por DavidXD_XD; 25/03/2008, 16:31:19.
          David Carballido Córdova

          Comentario

          • nachoregi
            Member
            • jul
            • 72

            #6
            Sip como me complico a ver si esto le convence.

            Saludos y Gracias

            Comentario

            • abapconsultoria
              Senior Member
              • ene
              • 101

              #7
              Se me ocurre esto.... seguramente hay algo mejor.


              DATA : texto TYPE string .
              DATA : texto_aux TYPE string .
              DATA : i TYPE i.
              DATA : offset TYPE i.
              texto = 'HJS001l2k493400'.

              i = STRLEN( texto ).

              DO i TIMES.
              offset = sy-index - 1.
              CHECK texto+offset(1) CO '123456789' OR ( texto+offset(1) EQ '0' AND STRLEN( texto_aux ) >= 1 ).
              CONCATENATE texto_aux texto+offset(1) INTO texto_aux.
              ENDDO.


              Saludos.

              Javier
              ABAPCONSULTORIA@GMAIL.COM

              www.consultoriaabap.blogspot.com

              Lo importante no es saber sino saber quien es el que sabe

              Comentario

              Trabajando...