Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Поиск фразы в бинарном файле   Найти похожие ветки 

 
harisma   (2008-09-04 11:21) [0]

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


 
Медвежонок Пятачок ©   (2008-09-04 11:22) [1]

чтением и сравнением


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

фраза - понятие не бинарное, а музыкальное


 
brother ©   (2008-09-04 11:29) [3]

странная формулировка.... а бывают не бинарные?
8 бит= 1 байт... ну и понеслась!


 
harisma   (2008-09-04 11:29) [4]


> чтением и сравнением

Ну, это понятно. А если файл довольно большой, скажем больше 2Г, как долго будет продолжаться поиск?
Какие будут еще предложения (если существуют другие способы)?


> фраза - понятие не бинарное, а музыкальное

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


 
Сергей М. ©   (2008-09-04 11:29) [5]


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


Сначала дай определение терминам "определенная фраза" и "бинарный файл"


 
harisma   (2008-09-04 11:29) [6]


> а бывают не бинарные?

Например текстовые


 
palva ©   (2008-09-04 11:30) [7]

Бинарных файлов не бывает. бывает бинарный способ доступа к нему.


 
Медвежонок Пятачок ©   (2008-09-04 11:32) [8]

Ну, это понятно. А если файл довольно большой, скажем больше 2Г

Если файл большой, то его читать нет необходимости.
Начинает работать угадывание.
Нужно просто угадать где в нем искомая фраза, не читая данных файла (так как он же большой)


 
brother ©   (2008-09-04 11:33) [9]

> бывает бинарный способ доступа к нему.

согласен, но тз - бред


 
palva ©   (2008-09-04 11:34) [10]


> Какие будут еще предложения (если существуют другие способы)?

А какие могут быть другие предложения? Можно, конечно, нанять программиста, но он тоже, собака, будет читать и сравнивать.


 
harisma   (2008-09-04 11:34) [11]


> Сначала дай определение терминам "определенная фраза" и
> "бинарный файл"

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

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


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


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

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


 
{RASkov} ©   (2008-09-04 11:35) [13]

> [6] harisma   (04.09.08 11:29)

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


 
brother ©   (2008-09-04 11:35) [14]

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

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


 
brother ©   (2008-09-04 11:36) [15]

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

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


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

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

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


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


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

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


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


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


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


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

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

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


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


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

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


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

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


 
Vlad Oshin ©   (2008-09-04 11:57) [22]

findstr /?


 
clickmaker ©   (2008-09-04 12:25) [23]

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

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


 
Vlad Oshin ©   (2008-09-04 12:27) [24]

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


 
KygECHuK ©   (2008-09-04 12:43) [25]

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


 
brother ©   (2008-09-04 12:46) [26]

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


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

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


 
brother ©   (2008-09-04 13:04) [28]

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

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


 
{RASkov} ©   (2008-09-04 13:08) [29]

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

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


 
Palladin ©   (2008-09-04 13:11) [30]

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

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;


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.016 c
2-1220249253
programmer90
2008-09-01 10:07
2008.10.12
Поворот формы на 180 градусов


2-1220458416
New_ser
2008-09-03 20:13
2008.10.12
Как создать БД с "координатами"?


15-1219098496
demon
2008-08-19 02:28
2008.10.12
Потребляемая программой память


15-1218900402
Andy BitOff
2008-08-16 19:26
2008.10.12
...примерно в сто тысяч раз большей скорости света


15-1219213129
rx275d7_jedi
2008-08-20 10:18
2008.10.12
rx275d7_jedi