Ver Mensaje Individual
  #1  
Antiguo 02-07-2012
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Reputación: 22
adebonis Va por buen camino
Buscar una cadena en un Stream

Hola a todos.

El caso es que tengo que buscar una cadena dentro de un MemoryStream. El memoryStream lo cargo con un archivo pdf y debo buscar una cadena específica y conocer la posición dentro del stream. Posteriormente debo extraer a partir de esa posición una cadena más larga que la de búsqueda.

La cadena a buscar es de 8 posicions ('20120606') y una vez encontrada debo extraer 20 caracteres desde la posición de inicio de la cadena encontrada.

Utilizo el siguiente código, pero no funciona:

Código Delphi [-]
procedure LocalizaCadena;
var
  NomFichero, Texto: String;
  Stream: TMemoryStream;
  i, n, Long: Integer;
  Val: PByte;
begin

  dm.OpenDialogo.InitialDir := 'd:\Vistas';
  dm.OpenDialogo.Filter := 'Adobe Acrobat (*.pdf)|*.pdf';
  if dm.OpenDialogo.Execute then
    NomFichero := dm.OpenDialogo.Filename
  else begin
    Exit;
  end;

  Texto := '20120606';
  Val := PBYTE(PCHAR(Texto));
  Long := Length(Texto);

  Stream := TMemoryStream.Create;
  Stream.LoadFromFile(nomFichero);
  try
  for n:= 0 to Stream.Size- 1 do begin
    if PBYTE((cardinal(Stream.Memory) + n))^ = Val^ then begin
      for i:= 1 to Long do
        if PBYTE(cardinal(Stream.Memory)+n+i)^ <> PBYTE(cardinal(Val)+i)^ then break;
      if i = Long then
        mensaje(cadena encontrada');
    end;
  end;
  finally
  Stream.Free;
  end;
end;

Gracias a todos.

Adolfo Bonis
Barcelona
Responder Con Cita