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
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web