Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 30-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Vaya, si que le dieron muchas soluciónes mientras yo estaba en "otras"; acá les doy la mía que tiene mi estilo clásico:

En realidad no entiendo muy bien cuál es el problema? Incrementar (duplicar o triplicar) el tamaño del vector TAlbumInfo, no es ningun problema tomando en cuenta que el espacio de cada estructura es menor a un Kb. Ahora si el problema es el espacio que utiliza en disco tampoco lo veo muy problemático; si usaras una BD el espacio ocupado por ésta sobrepasaría los 100 Kb. SIN datos.

Sin embargo para ahorrar algo de tamaño te aconsejaría utilizar un archivo sin "tipo", por ejemplo; abres tu pseudo BD, lees el primer caracter (Byte), el cual representará la cantidad de Albunes que tienes; luego entras a un bucle en el que lees un byte y en éste obtienes el tamaño del primer Track; lees el siguiente (segundo) y así susesivamente, claro que es mi perspectiva, y la adecúo un poco para fines genéricos:

Código Delphi [-]
uses Windows;
type
 PTrack = ^TTrack;                                             // TTrack de tipo Puntero
 TTrack = packed record                                        // Tu estructura, parecida al ID3v1 de los MP3s
  Number: Byte;
  Title: string [30];
  Artist: string [30];
  Album: string [30];
  Year: Word;
  Comment: string [30];
  Genre: Byte;
 end;
 
var
 Dummy: Cardinal;                                              // Por optimización Dummy es global
 Items: packed record                                          // Items es el formato en sí de tu "BD"
  Count: Cardinal;                                             // Utilizo una variable de 32 bits; por optimización y el posible uso del ejemplo en otros casos.
  Item: array [0..255] of PTrack;                              // Si te molesta que haya un vecor muy "grande" o inutil; pues lo que se hace es un vector de
 end;                                                          // punteros los cuales son asignados individualmente cada vez que se agrega un registro nuevo.
 
function NewItem: PTrack;                                      // Para asignar/crear un nuevo registro al final del vector
begin
 New(Result);                                                  // Asignamos en memoria un nuevo registro,
 Items.Item[Items.Count] := Result;                            // Lo guardamos en el vector...
 Inc(Items.Count);                                             // e incrementamos el valor que indica la cantidad de elementos del vector.
end;
 
function DelItem(Index: Cardinal): LongBool;                   // Para borrar un registro del vector
begin
 Result := Index < Items.Count;                                // Verificamos si el índice introducido está fuera de rango
 if not Result then Exit;
 Dispose(Items.Item[Index]);                                   // Liberamos la memoria anteriormente asignada...
 while Index < Items.Count do
  begin
   Items.Item[Index] := Items.Item[Index + 1];                 // Vamos recorriendo los elementos del vector para tapar el "hueco" generado...
   Inc(Index);
  end;
 Dec(Items.Count);                                             // y decrementamos nuestro contador
end;
 
function Save(lpFileName: PChar): LongBool;
var hFile, Index: Cardinal;
begin
 hFile := CreateFile(lpFileName, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0); // Creamos / pisamos la "BD"
 Result := hFile <> INVALID_HANDLE_VALUE;
 if not Result then Exit;
 Index := 0;
 WriteFile(hFile, Items.Count, 4, Dummy, nil);                 // Guardamos en nuestro archivo el tamaño del vector
 while Index < Items.Count do
  begin
   WriteFile(hFile, Items.Item[Index]^, SizeOf(Items.Item[0]^), Dummy, nil); // Guardamos los elementos del vector
   Inc(Index);
  end;
 CloseHandle(hFile);
end;
 
function Open(lpFileName: PChar): LongBool;
var hFile, Index: Cardinal;
begin
 hFile := CreateFile(lpFileName, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); // Abrimos la "BD"
 Result := hFile <> INVALID_HANDLE_VALUE;
 if not Result then Exit;
 ReadFile(hFile, Index, 4, Dummy, nil);
 while Items.Count < Index do
  ReadFile(hFile, NewItem^, SizeOf(Items.Item[0]^), Dummy, nil);
 CloseHandle(hFile);
end;
 
begin
 Open('pseudoBD.dat');
 if Items.Count >= 4 then
  DelItem(0);
 with NewItem^ do                                              // La forma de acceso tambien se hace sencilla:
  begin
   Number := 1;
   Title := 'Allegro Club Delphi';
   Artist := 'cHackAll';
   Year := 2007;
  end;
 with NewItem^ do                                              // Añadimos otro...
  begin
   Number := 2;
   Title := 'Sinfonía Nº1 Delphiana';
   Artist := 'Moderadores';
   Year := 2008;
  end;
 Save('pseudoBD.dat');
end.

PD: Utilizando una BD; no tendrás que preocuparte por los registros...; integridad, duplicidad, etc, etc, etc... (tampoco de componentes)
Archivos Adjuntos
Tipo de Archivo: zip unaTabla.zip (1,4 KB, 8 visitas)
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
variable dentro de una variable molinero1 Varios 3 23-04-2007 12:44:48
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Es posible trabajar con xp en oracle 10g... uper Oracle 6 07-04-2006 15:44:04
Es posible para solo la estructura de la base de datos de ib expert a Access Nelly Varios 3 10-02-2006 08:37:59
Tipo de Estructura variable pplacido Varios 4 04-01-2004 01:50:16


La franja horaria es GMT +2. Ahora son las 13:33:52.


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