Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2023
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
hola a todos!!

una alternativa puede ser utilizar las clases TArray<inteteger> o Tdictionary<integer, ....> en donde en este caso puede obtener un indice a los capitulos.

Mira si estos códigos te pueden servir:

Código:
/// ----
/// Metodo 1: con la clase TArray
/// ----
function BuscarHuecosCapitulos(Files:TStringDynArray):Tarray<Integer>;
var
  fileName: string;
  Capitulos: TArray<Integer>;
  Capitulo, j:integer;
begin
  result := [];

  /// Genera un array con los numeros de capitulos
  for fileName in Files do
    Capitulos := Capitulos + [GetFileNumCapitulo(fileName)];

  /// los ordena
  TArray.sort<Integer>(Capitulos);

  //y se recorre el array desde el primer capitulo hasta el ultimo capitulo buscando los huecos
  Capitulo := 1;
  j := 0; /// la variable J es la posicion en el array de los capitulos
  repeat
    if Capitulo < Capitulos[j] then
      result := result + [Capitulo]
    else
      inc(j);
    Inc(Capitulo);
  until j > High(Capitulos);
end;
Código:
/// ----
/// Metodo 2: con la clase TDictionary
/// ----
function BuscarHuecosCapitulos(Files:TStringDynArray):Tarray<Integer>;
var
  fileName: string;
  Capitulos: TDictionary<Integer, boolean>; /// el tipo boolean se puede sustituir por cualquier otro tipo, no se va a usar en este caso
  capitulo, UltimoCapitulo: integer;
begin

  result := [];

  Capitulos := TDictionary<Integer, BOOLean>.create;

  // en este caso se debe de obtener también el ultimo capitulo que se ha encontrado
  UltimoCapitulo := 0;
  for fileName in Files do begin
    capitulo := GetFileNumCapitulo(fileName);
    Capitulos.AddOrSetValue(capitulo, True);
    if capitulo > UltimoCapitulo then
      UltimoCapitulo := capitulo;
  end;

  for capitulo := 1 to UltimoCapitulo do
    if not Capitulos.ContainsKey(capitulo) then
      Result := result + [capitulo];

  Capitulos.free;
end;
y la forma de uso

Código Delphi [-]
uses
  IOUtils, system.Generics.collections;

...
procedure BuscarCapitulos;
var
  Dir, fileName: string;
  Files: TStringDynArray;
  i: integer;
  faltan: TArray;
begin
  Dir := 'C:\A\libros\uno\';
  Files := TDirectory.GetFiles(Dir);

  // aqui se obtine un listado con los capitulos que faltarian
  faltan := BuscarHuecosCapitulos(Files);
  for i := 0 to High(faltan) do
    memo1.lines.Add(format('falta el capituno #%d', [faltan[i]]));
end;
Responder Con Cita
  #2  
Antiguo 20-02-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Una manera simple es solo generar una lista de inicio..fin y marcar solo si encontró:

//pseudocodigo
Código PHP:
found:Vec<Bool> = 1..10

for i in 1..10:
   
current id_archivo
   
if current:
     
found[i] = true 
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 22-02-2023
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Gracias a todos por sus respuestas


Probare los metodos de Bucanero a ver que tal resulta


El metodo de mamcx, visto rapidamente, me parece que sucede lo mismo que con el metodo de escafandra
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #4  
Antiguo 22-02-2023
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Pues con el 2do metodo de bucanero (me gustó mas porque me recuerda a python), me funciono bastante bien


Lo que me queda es optimizar un poco el metodo de extraer el numero de capitulo, ya que cuando el capitulo esta delante no hay problema, pero cuando esta al final, se complica cuando el nombre de la novela contiene numeros.
Por ejemplo:

1- Enemigo intimo 1 - 25 (1 es la temporada y 25 el capitulo)
2- 100 años de soledad - 11 (100 es parte del nombre y 11 el capitulo)

Se me volvio un poco complicado ...
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda para elaborar un algoritmo para una tabla de calculo JoAnCa Varios 6 04-04-2011 15:01:05
Ayuda para hacer un algoritmo de busqueda y comparacion JoAnCa Varios 7 23-12-2008 22:55:28
Ayuda con un Algoritmo gluglu Varios 1 24-10-2007 18:07:10
Buscar siguiente en Lista con SQL rogeriobeltran Firebird e Interbase 6 23-07-2004 17:02:41


La franja horaria es GMT +2. Ahora son las 10:54:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi