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