Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 15:10   #1
witia03
 
Регистрация: 15.01.2012
Сообщений: 8
По умолчанию поиск hex значения в бинарном файле (большого объема)

имеется бинарный файл размером 300 мб. как в нем осуществить поиск hex значения?
witia03 вне форума Ответить с цитированием
Старый 23.05.2012, 15:17   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

маппим файл, далее repne scasb (если 1 байт).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.05.2012, 15:24   #3
witia03
 
Регистрация: 15.01.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
маппим файл, далее repne scasb (если 1 байт).
а на дельфи как это выглядит?
witia03 вне форума Ответить с цитированием
Старый 23.05.2012, 15:29   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ну, например, так

Код:
// --  --
function mscanb(buf: pointer; count: unsigned; value: uint8): pointer; assembler;
{
	IN:	EAX = buf
		EDX = count
		ECX = value
	OUT:
		EAX = result
}
asm
	or	eax, eax
	je	@exit

	push	edi
	mov	edi, eax
	mov	eax, ecx
	mov	ecx, edx

	// cld			assumed
	or	edi, edi	// reset ZF
	jecxz	@skip

	repne	scasb
  @skip:
	mov	eax, ecx	// ecx will be 0 if nothing was found
	jne	@none

	mov	eax, edi
	dec	eax
  @none:
	pop	edi
  @exit:
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.05.2012, 15:35   #5
witia03
 
Регистрация: 15.01.2012
Сообщений: 8
По умолчанию

да уж......
witia03 вне форума Ответить с цитированием
Старый 23.05.2012, 15:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы для начала воспользовался банальным TFileStream и поиском в цикле.
посмотрел, что там со временем поиска получается.
А уже только после этого (если скорость не устроит) я занимался поиском более скоростных и оптимальных вариантов!

(имхо, скорость всё равно упрётся в скорость чтения файла в носителя + наличие данных файла в файловом кэше системы).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2012, 16:01   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

А что собственно и не получается? TFileStream, IntToHex и одна переменная типа byte, вроде больше ничего и не надо.
FaTaL вне форума Ответить с цитированием
Старый 23.05.2012, 16:42   #8
witia03
 
Регистрация: 15.01.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
А что собственно и не получается? TFileStream, IntToHex и одна переменная типа byte, вроде больше ничего и не надо.
т.е читаем файл частями в переменную byte, производим поиск, читаем следующую часть?
witia03 вне форума Ответить с цитированием
Старый 23.05.2012, 17:24   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Лучше в буфер порциями читать и в нем искать. Так быстрей будет, чем по-байтное чтение
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2012, 20:04   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Читать в память кусочками Мбайт так по 16 и там искать.

Для такого "большого" файла - несколько секунд. Практически все время уйдет на чтение.

Последний раз редактировалось s-andriano; 23.05.2012 в 20:08.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрый поиск сигнатуры HEX в файле, как это делается? Человек_Борща Общие вопросы Delphi 3 02.12.2012 15:47
Вывод большого объема текста в Delphi NowLast Общие вопросы Delphi 2 29.12.2011 13:11
Сокеты. Отправка текста большого объема. Rapala Работа с сетью в Delphi 2 10.04.2011 16:17
Поиск числа в бинарном файле. mazak Общие вопросы C/C++ 5 18.02.2010 12:05
Поиск в файле большого объема za4ot Общие вопросы Delphi 2 26.03.2009 20:26