PDA

Ver la Versión Completa : Número de posición de un caracter en string


malaga01
29/02/08, 09:22:50
Hola:

Una duda básica pero que no acabo de encontrar respuesta.

En un campo string, tengo numeros separados por '-', necesito saber como puedo calcular la posición que tiene '-' para tomar sólo los primeros caracters que son lo numéricos.

¿Hay algún comando o función que te diga el número de posición de un caracter en un string? No he encontrado nada en la ayuda ni usando el buscador.

Gracias por vuestr ayuda.

Saludos

LouieBoy
29/02/08, 09:29:18
Buenas,

¿Te has mirado la ayuda para el comando FIND?

Saludos,

LouieBoy

ballan
29/02/08, 10:14:20
Quiza te interese mas hacer lo siguiente:

data: cadena(8) values '01-02-03',
numero1(2)
numero2(2)
numero3(2).

split cadena at '-' into numero1 numero2 numero3.

en numero1 te almacenaria 01
en numero2 te almacenaria 02
en numero3 te almacenaria 03

malaga01
29/02/08, 10:15:14
Hola LouieBoy:

He bsucado el comando FIND, pero no existe en la versión 4.6C no existe ¿Sabes si hay alguno similar? El comando SEARCH no hace lo mismo.

Gracias por tu respuesta.

Saludos

LouieBoy
29/02/08, 10:33:20
hmmm, vaya putada, si la solucion que te ha dado el compi no te sirve, siempre puedes hacer una rutina rollo:

strlen de la string

WHILE longitud de la string <= contador_general.
add 1 to contador
add 1 to contador_general
if string(1)+contador = '-'.
contador contendra la cantidad de caracteres hasta -
clear contador.
endif.
ENDWHILE.

Es lo primero que se me ocurre. respecto al search creo, que no te deja hacer for all ocurrences, lo que significa que a la que encuentre el primer guion, acabara.

Saludos,

LouieBoy

malaga01
29/02/08, 10:46:50
Muchas Gracias Loui, Ballan

Lo haré por código como me habeis comentado, ya que no existe el comando.

Buen fin de semana.

Saludos

Floren
29/02/08, 11:52:15
Hola compañero de Málaga,

Con la sentencia SEARCH lo puedes hacer, te cuento:

search cadena for '-'.

En sy-postd te vendrá el desplazamiento del caracter '-' dentro de la cadena.
En este caso, si cadena valiese 'hola-amigo':
sy-subrc valdría 0 por haber encontrado el caracter '-'.
sy-postd valdría 4, por ser el desplazamiento.

Espero haberte ayudado. Por cierto, en Málaga ... estarás en coritel no?

Un saludo

LouieBoy
03/03/08, 06:58:58
Floren, no es nada personal, pero vamos a ser un poco malos... que pasa si tienes esto hola-amigo-quetal? y utilizas el search con '-' ? :D

Saludos,

LouieBoy

Floren
03/03/08, 10:18:36
Hola LouieBoy,

La pregunta de malaga01 era:
'¿Hay algún comando o función que te diga el número de posición de un caracter en un string?'. Y con mi post anterior quedaría resuelta.

Si quieres obtener todas las posiciones, es cuestión de añadir algo de código. Por ejemplo:

REPORT ztest_floren.

PARAMETERS: cadena(40) TYPE c.

DATA: aux(40) TYPE c,
cont TYPE i,
len type i.

CLEAR: aux, cont, len.
aux = cadena.

DO.
SEARCH aux FOR '-'.
IF sy-subrc EQ 0.
len = strlen( aux ).
IF len EQ 1.
WRITE: len, /.
exit.
ELSE.
cont = 1 + cont + sy-fdpos.
WRITE: cont, /.
aux = cadena+cont.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.

Este report te escribirá en pantalla todas las apariciones del caracter '-' en el string que introduzcas por pantalla.

Si hay algo que no entiendes, postéalo. :)

Un saludo

malaga01
03/03/08, 10:33:04
Gracias por las aclaraciones, está todo más que claro con lo que me habéis comentado.

Por cierto Floren, estuve, pero ya no estoy allí.

Saludos

LouieBoy
03/03/08, 10:36:56
Buenas, Floren, quizás tienes razón a lo que la pregunta respecta, aunque yo siempre intento ir un poco mas allá. Buen rollete :D

Saludos,

LouieBoy