Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Help-Me Ler string em arquivo binario


cgm2k7

Pergunta

Olá a todos.
Estou com a seguinte duvida:

Tenho este condigo para localizar um string especifica em um arquivo binário.

procedure TForm3.Button1Click(Sender: TObject);
var
  StStream: TStringStream;
  FStream: TFileStream;
  S, SDS : UnicodeString;
begin
   FStream := TFileStream.Create('c:/file.bin', fmOpenRead);
   StStream := TStringStream.Create('');
   StStream.CopyFrom(FStream, FStream.Size);
   SDS := StStream.DataString;
   try
     S := 'blablabla';
     if Pos(S, SDS) > 0 then
        ListBox1.Items.Add(S);
   finally
     StStream.Free;
     FStream.Free;
   end;
end;

Mas o o problema é que: só localiza se eu souber o que procurar.
Como faço para localizar strings em vários pontos do arquivo bin. Usando o seek() sei como localiza os pontos que quero ler, como ler as strings a partir destes pontos. Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Exemplo:

const
  offsetV: array[0..99] of integer =
    (16,64,112,160,208,256,304,352,400,448,496,544,592,640,688,736,784,832,880,
    928,976,1024,1072,1120,1168,1216,1264,1312,1360,1408,1456,1504,1552,1600,
    1648,1696,1744,1792,1840,1888,1936,1984,2032,2080,2128,2176,2224,2272,2320,
    2368,2416,2464,2512,2560,2608,2656,2704,2752,2800,2848,2896,2944,2992,3040,
    3088,3136,3184,3232,3280,3328,3376,3424,3472,3520,3568,3616,3664,3712,3760,
    3808,3856,3904,3952,4000,4048,4096,4144,4192,4240,4288,4336,4384,4432,4480,
    4528,4576,4624,4672,4720,4768);

No arquivo bin que quero ler, sem que tem vários offset (StStream.Seek(offsetV, soFromBeginning)) quero ler as strings que vem depois de cada offset encontrado e jogar em uma ListBox.

Editado por cgm2k7
Link para o comentário
Compartilhar em outros sites

  • 0

ok... vamos tentar esclarecer um pouco mais

pelo que eu entendi voce quer usar a sua constante array ( 16, 64,112 ... etc ) para procurar esse valor dentro de um arquivo binario e extrair dele a string entre esses pontos ... seria isso ?

seu arquivo binário é muito grande ?

 

Link para o comentário
Compartilhar em outros sites

  • 0

sim

e já consegui .

Desculpas ae foi falta de atenção minha mesmo, muito coisa na cabeça aqui que não tava pensando direito

StStream.Seek(16, soFromBeginning); //localiza o offset

S:= StStream.ReadString(17); // ler 17 bytes a partir do offset localizado

       ListBox1.Items.Add(S);

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...