jularaXD,
Cita:
Empezado por jularaXD
...estoy creando arrays de un gran tamaño, ya que tengo ficheros con registros que quiero cargar y procesar...de esta forma puedo buscar datos en concreto dentro del archivo sin tener que leer el archivo de principio a fin...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
TMonitor = record
CodMon : Array[0..9] of Char;
FecMon : Array[0..9] of Char;
DesMon : Array[0..29] of Char;
CRLF : Array[0..1] of Char;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ProcessFile(FileName , CodMon : String);
var
M : TMemoryStream;
Buffer : TMonitor;
begin
try
M := TMemoryStream.Create;
M.LoadFromFile(FileName);
M.Seek(0,soFromBeginning);
while M.Position < M.Size do
begin
M.Read(Buffer, SizeOf(Buffer));
if Buffer.CodMon = CodMon then
begin
ShowMessage('Proceso a Realizar');
end;
end;
MessageDlg('Archivo Procesado',mtInformation,[mbOK],0)
except
MessageDlg('Error en Procesamiento de Archivo',mtError,[mbOK],0)
end;
M.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileName : String;
CodMon : String;
begin
FileName := 'FileMon.txt';
CodMon := '0000100000';
ProcessFile(FileName, CodMon);
end;
end.
El código anterior
permite cargar dinámicamente un archivo en disco a memoria utilizando solo la memoria mínima requerida, procesar el mismo y liberar la memoria al finalizar el proceso,
esto es una alternativa al concepto de un arreglo de registros. En el caso de querer
procesar un registro particular, por ejemplo el número 11 (
Los registros se numeran de 0 a n)
se puede ir directamente a este por medio del siguiente código:
Código Delphi
[-]
begin
M.Seek(SizeOf(Buffer)*10,soFromBeginning);
end;
Nota: El código sugerido fue probado
con un archivo de texto de 100.000 Registros con un tiempo de proceso en el orden de las milésimas de segundos.
Espero sea útil
Nelson.