FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Sacar números de cadenas de caracteres.
Parece una pregunta un tanto tonta, ya que con 2 bucles for y recorriéndola se puede hacer, pero me preguntaba si pudiera existir alguna función en delphi que sea más efectiva y menos medieval para hacerlo.
Como ejemplo, lo que quiero hacer es sacar los numeros que vienen detras de unas letras concretas en una cadena de caracteres: DHS274HGL23JH41234HGL412YG Las letras concretas aquí (p.e.) serían HGL. Por lo que los números que en este caso necesitaría sacar y guardar son el 23 y el 412. Un saludo y gracias! |
#2
|
||||
|
||||
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
||||
|
||||
Pues a mi sólo se me ocurre con 2 bucles.
El primero para encontrar y recorrer las ocurrencias de la cadena buscada (suponiendo que hay varias) y el segundo para extraer los números antes de la csiguiente letra (que por lo que veo pueden tener longitud indeterminada).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Hola McK.
Estoy de acuerdo con Neftali, se necesitan dos ciclos. Pero mas eficiente que usar dos for es:
Ejemplo de llamada:
Saludos. Última edición por ecfisa fecha: 30-11-2010 a las 19:23:55. |
#5
|
||||
|
||||
Otro enfoque, más legible, pero creo que menos eficiente:
Para llamarlo: Es más legible, pero insisto en que menos eficiente, y requiere uses StrUtils |
#6
|
|||
|
|||
Perfecto, gracias a todos. Aunque no haya una instrucción de Delphi eso está bastante simplificado. Yo lo tenía algo peor implementado.
Un saludo! |
#7
|
||||
|
||||
Desafortunadamente delphi no cuenta con un manejo de expresiones regulares, al menos delphi 7. Por ejemplo, en PHP este problema se resuelve así:
Código PHP:
|
#8
|
|||
|
|||
Cita:
|
#9
|
||||
|
||||
Cita:
Te adjunto la prueba:
¿ Podrías poner un ejemplo que te dé el ciclo infinito ? Así puedo evaluarlo. Saludos. Última edición por ecfisa fecha: 02-12-2010 a las 12:10:37. |
#10
|
|||
|
|||
Cita:
|
#11
|
||||
|
||||
Cita:
En la cadena anterior: Cita:
Es por que inicialicé mal el contador de ocurrencias numéricas y si o sí me pone un caracter aunque no sea un número. Hay que inicializar distinto a 'i':
Un saludo. |
#12
|
||||
|
||||
En la version actual si. Ademas que agregarle la libreria es cosa de niños.
__________________
El malabarista. |
#13
|
|||
|
|||
Cita:
Código:
function ExtractNum(Sub, Str: string): TStrings; var i, p: Integer; begin Result:= TStringList.Create; p:= 1; while p <> 0 do begin p:= Pos(Sub, Str); if p > 0 then begin Inc(p, Length(Sub)); i:= 1; while Str[p + i] in ['0'..'9'] do Inc(i); Result.Add(Copy(Str, p, i)); Inc(p, i); Str:= Copy(Str, p, MaxInt); // Esta línea no la había metido!!! end; // De todas formas en mi procedure he metido esto tal cual sin crear ninguna función end; // y por no modificar mi cadena por eso he utilizado el auxiliar. end; Saludos |
#14
|
||||
|
||||
Cita:
También tienes razón en que puede usarse una librería (biblioteca por si Al lee esto) externa, pero cuando se requiere para apenas un uso puntual, como que se siente que se está matando una pulga a cañonazos // Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
sacar numeros al azar | edlm | Varios | 20 | 31-05-2012 21:50:40 |
Odenar Cadenas con letras y números | Kandorf | OOP | 3 | 20-05-2010 01:51:55 |
Case pero con cadenas en vez de con caracteres | noob | Varios | 9 | 21-01-2009 18:56:07 |
Comparar cadenas y sacar su semejanza en % | CamiloVI | Varios | 5 | 15-05-2008 08:27:30 |
Sacar los números del 1 al 9 con dos digitos | David | OOP | 4 | 06-03-2008 23:08:09 |
|