PDA

Ver la Versión Completa : Extraer numeros de cadena alfanumerica


Alfredosite
31/03/09, 17:29:53
hola compañeros quisiera saber si existe alguna función que me obtenga los numeros de una cadena alfanumérica. por ejemplo.

Tengo
511 (1) 3211133
533 (2) 4566564-3
....
..
.

Quisiera obtener
51113211133
533245665643
....
..
.

Haber si alguien se anima por alguna idea :D

Muchas gracias.:)

cmacvicar
31/03/09, 21:31:41
*No Conozco Ninguna Función Pero Esto hace lo que quieres.

* Cambia los '(' por ' '.
TRANSLATE "Variable" using '( '.

* Cambia los ')' por ' '.
TRANSLATE "Variable" using ') '.

* Cambia los '-' por ' '.
TRANSLATE "Variable" using '-'.

* Condensa y elimina los espacios en Blanco
CONDENSE "Variable" NO-GAPS.

*Para que esto no se vea feo en el Código Encapsulado en una Rutina :p


Que Estes Bien Chauuu

Alfredosite
31/03/09, 22:23:07
*No Conozco Ninguna Función Pero Esto hace lo que quieres.

* Cambia los '(' por ' '.
TRANSLATE "Variable" using '( '.

* Cambia los ')' por ' '.
TRANSLATE "Variable" using ') '.

* Cambia los '-' por ' '.
TRANSLATE "Variable" using '-'.

* Condensa y elimina los espacios en Blanco
CONDENSE "Variable" NO-GAPS.

*Para que esto no se vea feo en el Código Encapsulado en una Rutina :p


Que Estes Bien Chauuu

Bueno lo que yo hize fue esto:
Si fuese entrada: +57 (1) 4253008

DO.
REPLACE '.' INTO p0105-usrid WITH ''.
REPLACE '+' INTO p0105-usrid WITH ''.
REPLACE '-' INTO p0105-usrid WITH ''.
REPLACE '(' INTO p0105-usrid WITH ''.
REPLACE ')' INTO p0105-usrid WITH ''.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDDO.
condense p0105-usrid no-gaps.

Salida Saldria : 5714253008
^
Pero esta lógica no funcionaria en caso en ese campo tenga.

por ejemplo: 511 - 12A (1F) -14

Si fuese asi con caracteres no solo ( ),-,(,.,+) entonces seria poco mas de lineas por cada no caracter no numerico....tal haya alguna función por ahi?? :(

Igual se agradece el aporte :rolleyes:

DavidXD_XD
01/04/09, 01:37:59
Hola, nunca he visto una funcion q haga eso, pero aqui va un pequeño algoritmo q puede servir

PARAMETERS: p_cadena TYPE string.

DATA: g_out TYPE string,
g_int TYPE i,
g_cont TYPE i,
g_char TYPE c.

RANGES: gr_num FOR g_char.

START-OF-SELECTION.

gr_num-sign = 'I'.
gr_num-option = 'BT'.
gr_num-low = '0'.
gr_num-high = '9'.
APPEND gr_num.

g_cont = STRLEN( p_cadena ).

DO g_cont TIMES.
IF p_cadena+g_int(1) IN gr_num.
CONCATENATE g_out p_cadena+g_int(1) INTO g_out.
ENDIF.
ADD 1 TO g_int.
ENDDO.

WRITE: g_out.

Ahi esta el parametro de entrada y salida, espero te pueda ayudar :D