PDA

Ver la Versión Completa : Eliminar no numericos


nachoregi
25/03/08, 15:16:12
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
25/03/08, 15:20:38
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!!!

nachoregi
25/03/08, 15:28:49
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.

robert_milan
25/03/08, 15:52:57
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

DavidXD_XD
25/03/08, 16:06:49
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 ...

nachoregi
25/03/08, 16:08:01
Sip como me complico a ver si esto le convence.

Saludos y Gracias

abapconsultoria
25/03/08, 16:23:51
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