Ver Mensaje Individual
  #1  
Antiguo 25-08-2007
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Reputación: 19
MaxiDucoli Va por buen camino
Red face Busqueda de un string a lo largo de un TFileStream.

Hola Foro!!!
Es mi primer post y ojala pueda escribir muchos mas.
Tengo un problema el cual no pude resolver por que mi experiencia en Delphi aun no es mucha.
Lo que quiero hacer es ir leyendo un archivo, encotrar una cadena, guardar unos datos en una variable y seguir buscando esa cadena. Lo logre de una forma no muy convincente que digamos. Les paso a mostrar mi funcion a ver si pueden ayudarme.

Código Delphi [-]
Function BuscarVags (Archivo : String; const Cadena : string) : TStringList;
var
Arch : TFileStream;
buffer,texto : String;
Lista : TStringList;
Posicion : Integer;
Buf, Encontrado, ID, Offset : Integer;
Nombre : String;
begin
Lista := TStringList.Create;
Lista.Clear;
SetLength(Nombre,11);
Arch :=  TFileStream.Create(Archivo,FmOpenRead);
Buf := Arch.Size;
ID := 0;
SetLength(buffer,buf);
Arch.Position :=0;
Offset := Arch.position;
arch.Read(buffer[1],Length(buffer));

 // Encontrado:= POS(cadena,Buffer);
while Encontrado <> 0 do
begin

  Encontrado:= POSEx(cadena,Buffer,Offset);

Offset := Encontrado + 31;
            Arch.Position := Offset;
            Arch.Read(Nombre[1],Length(Nombre));
            Lista.Insert(ID,Nombre);
            //Lista := Nombre;
            //Lista.Cells[1,ID] := IntTostr(ID);
            ID := ID +1;


//            Arch.Position := Encontrado + 500;
//Archiv'

end;
         Result := TStringList(Lista);
         arch.Free;
          Lista.Delete(Lista.Count-1);
end;


Para utilizarla hago de la siguiente manera:
El ST es un St : TStringList.Create;

St := BuscarVags ('c:\Temporal\W2002j10.RA','VAGp');

Lo hace todo bien, lo que pasa es que el archivo que leo es de 40 MB y pueden llegar a ser mas grandes.
Mi idea principal era leer de a bloques de a 8192 bytes, pero la verdad es que no se como hacer para cuando termina el archivo, por que la variable OFFSET nunca va a llegar a ser mayor o igual al tamaño del archivo. No se me ingenio otra manera que esa y estuve tratando toda la noche. Si alguien es tan amable de aclararme las ideas por favor, la verdad, lo estoy necesitando.
Saludos! y muchas gracias.

Última edición por MaxiDucoli fecha: 26-08-2007 a las 02:32:42.
Responder Con Cita