Ir al contenido


Foto

Como encontrar un numero dentro de una cadena


  • Por favor identifícate para responder
1 respuesta en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 24 febrero 2020 - 08:36

Hola a todos
Pues tengo una situacion en la que necesito obtener un numero dentro de una cadena, por ejemplo:

En la cadena: "El nombre que tiene numero 20 y mas" obtener el 20

He estado probando con Pos, Copy y Val, pero se me hace engorroso, ademas de no salir bien en todos los casos, pues la cadena puede ser de cualquier tamaño y el numero puede estar en cualquier posicion

Para explicarme mejor:
El objetivo es renombrar una lista de archivos que son los capitulos de novelas o series, que estan en varias carpetas.
Estan con varias nomenclaturas diferentes, y quiero organizarlas usando una unica nomenclatura igual para todas
(## es el numero del capitulo y dd-mm-aa es una fecha)

Estan guardadas de estas formas:
nombre [cap.-##] [dd-mm-aa]
nombre - ##
nombre [otronombre] [capt-##] [dd-mm-aa]
nombre capitulo ##

Y quiero que se renombren de la forma: "nombre ##",

Alguna idea de como hacerlo?

Lo que he hecho hasta ahora es eliminar los contenidos entre [ ], y obtener el numero cuando le precede cap-, pues las fechas tambien son numeros

Pero en los demas casos que no hay [ ] y capitulo puede estar de varias formas (Cap, Capt, Capitulo) no se que criterio usar para obtener el numero del capitulo

Editado por JoAnCa, 24 febrero 2020 - 08:39 .

  • 0

#2 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 29 febrero 2020 - 10:38

Pues parece que con este codigo se resuelve el problema para la mayoria de los casos


delphi
  1. function BuscaCapitulo(Cadena :string): string;
  2. var
  3. i :Integer;
  4. Numero :string;
  5. EsNum :Boolean;
  6. begin
  7. Numero:=''; EsNum:=True;
  8. for i:=1 to Length(Cadena) do
  9. begin
  10. if (Cadena[i] in['0'..'9']) then
  11. begin
  12. Numero:=Numero + Cadena[i];
  13. EsNum:=True;
  14. end
  15. else
  16. EsNum:=False;
  17. if (not EsNum) and (Length(Numero) > 0) then Break;
  18. end;
  19. Result:=Numero;
  20. end;


Editado por JoAnCa, 29 febrero 2020 - 10:39 .

  • 0




IP.Board spam blocked by CleanTalk.