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
  #1  
Antiguo 25-08-2007
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Poder: 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
 



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
Como Transormar un string largo a Integer largo RodoRodo Varios 1 27-06-2007 02:26:29
TFileStream jorge_mosquera Varios 1 03-03-2007 16:28:45
Búsqueda muy específica en un string... JuanBCT Varios 15 02-05-2005 14:58:00
Uso de TFileStream esocrates Varios 4 09-04-2005 23:47:17
TFileStream doverzhoff Varios 1 25-10-2003 18:49:38


La franja horaria es GMT +2. Ahora son las 04:52:07.


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