Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar una cadena en un Stream (https://www.clubdelphi.com/foros/showthread.php?t=79405)

adebonis 02-07-2012 20:40:23

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

escafandra 02-07-2012 23:18:39

Ese código sólo busca la cadena, no extrae 20 caracteres....

Buscar busca y encuentra. Me pregunto si esa cadena está en el pdf. Un pdf no es un archivo de texto. ¿Has comprobado que la cadena está con un editor hexadecimal?. ¿Buscas una cadena o números hexadecimales?


Saludos.

adebonis 03-07-2012 00:20:20

Hola.

De hecho no sé como esta guardada esta cadena dentro de pdf, yo suponía que los valores de los campos estaban en ascci.

El documento pdf es un formulario que ya tiene unos campos con valores predeterminados. Uno de esos valores ya conocidos empieza por esta cadena y necesito conocer toda la cadena de la que ya sé su longitud.

Probaré de editar el pdf en un editor hexadecimal para ver si la encuentro. Ya veremos...

Gracias y saludos

adebonis 03-07-2012 17:14:19

Hola.

He editado el pdf en un editor hexadecimal y no he encontrado la cadena.

¿Alguien sabe cómo se guardan los datos de los valores de los campos en un archivo pdf?

Gracias.
Adolfo Bonis
Barcelona


La franja horaria es GMT +2. Ahora son las 16:43:15.

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