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));
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);
ID := ID +1;
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.