Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск фразы в бинарном файле [D5]


Страницы:   1 2

harisma ©   (2008-09-04 11:21:00) 

Собственно сабж. Как найти определенную фразу в бинарном файле?


Правильный$Вася   (2008-09-04 13:12:00) [1]


> Без вашей помощи разобрался. >:-(

всегда бы так, а то сопли размазываются, а потом на них другие поскальзываются


Palladin   (2008-09-04 13:11:00) [2]

Держи, болезный...

Procedure FindInFile(Const fn:String;p:PByte;l:Integer;offsets:TList);
Const
BUFFSIZE=32*1024*1024;

Var
f:TFileStream;
next_srch_byte:PByte;
next_srch_byte_counter:Integer;
next_byte:Byte;
buf_readed_from:Integer;
buf_readed:Integer;
buf_pos:Integer;
buf:Array of Byte;

Function _GetNextByte(Var b:Byte):Boolean;
Begin
 If buf_readed=buf_pos Then
  Begin
   Result:=f.position<>f.size;
   If Not Result Then Exit;
   buf_pos:=0;
   buf_readed_from:=f.Position;
   buf_readed:=f.Read(buf[0],BUFFSIZE);
  End;
 Result:=True;
 b:=buf[buf_pos];
 Inc(buf_pos);
End;

Procedure _ResetSrchByte;
Begin
 next_srch_byte:=p;
 next_srch_byte_counter:=0;
End;

Procedure _NextSrchByte;
Begin
 Inc(next_srch_byte);
 Inc(next_srch_byte_counter);
End;

Begin
SetLength(buf,BUFFSIZE);
f:=TFileStream.Create(fn,fmOpenRead or fmShareDenyWrite);
Try
 buf_readed:=0; buf_pos:=0;
 _ResetSrchByte;
 While _GetNextByte(next_byte) Do
  If next_byte<>next_srch_byte^ Then _ResetSrchByte Else
   Begin
    _NextSrchByte;
    If next_srch_byte_counter=l Then
     Begin
      offsets.Add(Pointer(buf_readed_from+buf_pos));
      _ResetSrchByte;
     End;
   End;
Finally
 f.Free;
End;
End;

procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
offsets:TList;
i:Integer;
begin
offsets:=TList.Create;
Try
 s:='ceil';
 FindInFile('c:\Untitled-1.htm',@s[1],Length(s),offsets);
 s:='';
 For i:=0 to offsets.Count-1 Do
  s:=s+IntToStr(Integer(offsets[i]))+#13#10;
 ShowMessage(s);
Finally
 offsets.Free;
End;
end;


но тут есть маленькая ошибка :) ну что ж, не все в этом мире так легко дается :)


{RASkov}   (2008-09-04 13:08:00) [3]

> [27] harisma   (04.09.08 13:03)
> Без вашей помощи разобрался. >:-(

Вот уж не ври... :)


brother   (2008-09-04 13:04:00) [4]

> Всем спасибо - все свободны. Обсуждение закрыто!!!
> Без вашей помощи разобрался. >:-(

каков вопрос, таков ответ...


harisma   (2008-09-04 13:03:00) [5]

Всем спасибо - все свободны. Обсуждение закрыто!!!
Без вашей помощи разобрался. >:-(


brother   (2008-09-04 12:46:00) [6]

в общем... в бинарном файле "слова", "фразы" быть не может (тк нельзя точно сказать к какого бита начинается формирование байта)... это только набор 0 и 1 ...


KygECHuK   (2008-09-04 12:43:00) [7]

Удалено модератором


Vlad Oshin   (2008-09-04 12:27:00) [8]

Удалено модератором


clickmaker   (2008-09-04 12:25:00) [9]

> [7] palva ©   (04.09.08 11:30)
> Бинарных файлов не бывает. бывает бинарный способ доступа
> к нему.

текстовых файлов не бывает


Vlad Oshin   (2008-09-04 11:57:00) [10]

findstr /?


Правильный$Вася   (2008-09-04 11:56:00) [11]

или вообще заархивирована с паролем, ага?


Правильный$Вася   (2008-09-04 11:56:00) [12]


> В условии задачи "бинарный файл" - любой нетекстовый файл
> (пример: файл картинки, архив, тот же вордовский файл и
> т.д.)"определенная фраза" - в моем случае, это текстовая
> строка известного содержания.

а, так у тебя фраза может быть нарисована на картинке? ужос
или в ворде в неизвестной кодировке с установкой разных стилей для каждой буквы? успехов


Медвежонок Пятачок   (2008-09-04 11:45:00) [13]

Лучше в секундах, но можно и в тиках - я сам в секунды пересчитаю :)

пиццот с половиной.


Игорь Шевченко   (2008-09-04 11:43:00) [14]


> Не умничай. И так всем понятно, о чем речь идет.


а ты вопросы научись задавать.
Читай http://ln.com.ua/~openxs/articles/smart-questions-ru.html


harisma   (2008-09-04 11:42:00) [15]


> тебе в секундах ответить или в тиках?

Лучше в секундах, но можно и в тиках - я сам в секунды пересчитаю :)


Медвежонок Пятачок   (2008-09-04 11:37:00) [16]

как долго будет продолжаться поиск?

тебе в секундах ответить или в тиках?


brother   (2008-09-04 11:36:00) [17]

> Определение достаточное для получения ответа?

как правило в них текст присутствует и он означен байтами.... вот и лети по байтам... сравнивай с шаблоном...


brother   (2008-09-04 11:35:00) [18]

> > а бывают не бинарные?
>
> Например текстовые

О_о , ты это..... теорию то учил?


{RASkov}   (2008-09-04 11:35:00) [19]

> [6] harisma   (04.09.08 11:29)

Все определения файлов - условно.
Но все файлы имеют однотипное содержание данных.


Правильный$Вася   (2008-09-04 11:34:00) [20]


>И так всем понятно, о чем речь идет.

а, так это вопрос для понятливых
догадайтесь семи, о чем он
ну-ну, догадайся сам ответ


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо