FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Extraer números en una string alfanumérica
Tengo un RichEdit con un texto dividido en capítulos y estos en párrafos, los cuales están numerados, como puedo pasar, los números de párrafo, a una variable.
El número de párrafos por capitulo pueden ser hasta 150 el máximo y 10 el mínimo. Con Cadena[i] saco hasta 9, pero si el párrafo es el número 10, solamente me saca el 0, es decir la última cifra del número de párrafo. He hecho varios intentos, cuando hago un stop en el bucle, con un showmessage, por ejemplo, si sale el 10, pero sin el stop, nada de nada. ¿Qué debo hacer? Gracias de antemano. Un saludo. Tonio. |
#2
|
||||
|
||||
Hola Tonio: No sé que código utilizas, pero una aproximación puede ser esta,
1º. Busco un número 2º. Cuando lo encuentro lo guardo en una variable. 3º.-Busco a ver si el siguiente caracter sigue siendo número, si es así lo acumulo en la variable de tipo caracter. 4º.- Cuando no encuentre más números doy por finalizado el actual y paso al siguiente. Un saludo, espero te sirva la idea.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
||||
|
||||
Serviría si nos especificaras más acerca de cómo está almacenado el número de párrafo (al principio de una línea, en una línea aparte, etc) Quizá te sirva el procedimiento Val:
Val(S, V, Code) que convierte una cadena S en un entero V. Si S no es un entero entonces Code indicará el primer caracter que no es número y V contendrá el número hasta donde haya podido convertirse. Así, por ejemplo, si el número de párrafo está al comienzo de una línea, digamos Linea = '23 Mañana comienzo a trabajar...' Val(Linea, V, Code) te pondrá en V el valor 23 y en Code el valor 3. // Saludos |
#4
|
||||
|
||||
Todo seria mas facil si se tuviera un separador estandar (y preferiblemente no tan comun) entre los números y los capitulos. Por ejemplo:
1.) Intriducción el separdor es un punto y un paréntesis cerrado, podria ser simplenete el paréntesis... o un doble guon asi: 1--Introducción Para esto, yo utilizaria la siguiente función: Código:
Function get_NumeroCapitulo(pCadena:String; pSepardor:string):Integer var i, vPos:Integer; vCadena:string; ves_numerico:Boolean; Begin Result:=-1; vPos:=Pos(pSeparador,pCadena); if vPos>0 then begin // si existe el caracter separador, // verifica si hay un número a la izquierda. vCadena:=Trim(Copy(pCadena,1,vPos-1)); if vCadena:='' then begin ves_numerico:=True; //Comienza el ciclo para //verificar si es numerico For i:=1 to length(vCadena) do begin if not (vCadena[i] in ['0'..'9']) then begin ves_numerico:=False; Break; end;//if end; //for i if ves_numerico then Result:=StrToint(vCadena); end; //if vCadena end; //vpos end; |
#5
|
|||
|
|||
Gracias a los tres por vuestras respuestas.
La de Roman, me serviría si también pudiera ver los números a mitad de string, ya que puede haber dos números en la misma linea, es decir puede ser: 23 las cosas de aquí. 24 las cosas del otro lado. Siguiendo tu solución solamente me cogería el 23. En cuanto a la de Gatosoft, había comenzado a hacer algo parecido, pero me ha ayudado mucho. Gracias de nuevo. Un saludo. Tonio. |
|
|
|