Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизПоиск фразы в бинарном файле Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.036 c