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

 
 
Herramientas Buscar en Tema Desplegado
  #6  
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
 



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 11:15:49.


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