|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.06.2013, 18:47 | #1 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
Поиск по маске
Здравствуйте!
Необходимо реализовать поиск в файле (открытый на чтение в текстовом режиме) например такой строки: ?? ?? ?? ?? ?? 66 9C 60 50 8D 88 ?? F0 ?? ?? 8D 90 знак вопроса неизвестный символ. Кто сталкивался с подобным вопросом? В каком направлении двигаться? Буду благодарен за статьи и ссылки или примеры на си. С Уважением Алексей. |
10.06.2013, 21:17 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Самое простое - считать в некий буфер нужное количество чисел (17 16-ричных чисел). Затем, сравнить с эталоном (специальным образом пометить "неважные" числа, чтобы по ним не проводилось сравнение). Если не совпало, то считать еще 1 число (буфер сделать циклическим), выкинув первый символ из буфера, и повторить сравнение. Таким образом или найдем эту строку в файле, или дойдем до конца файла.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
11.06.2013, 00:45 | #3 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
спасибо за совет, но не совсем понял (проблемы с программной реализацией)
FILE *fop; char c[200]; char search[] = "?? 8D 90 04 16 ?? ??"; fop = fopen("1.txt", "r+"); fseek (fop,0,SEEK_SET); while (!feof(fop)) { fgets(c, sizeof(c), fop); if (strstr(c, search)) printf("%X\n", c); } считывание посимвольно с помощью fread? |
11.06.2013, 10:44 | #4 |
Форумчанин
Регистрация: 05.04.2012
Сообщений: 134
|
Код:
|
11.06.2013, 13:18 | #5 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
спасибо за код Nuklon, но наличие не определяется если искомая строка:
?? ?? ?? 8A 06 46 88 07 , а текст для поиска: 00426000: 00 60 BE 00 40 44 00 8D BE 00 D0 FB FF C7 87 9C 00426010: 20 05 00 E6 0E 08 76 57 83 CD FF EB 0E 90 90 90 00426020: 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 00426030: 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 символы ?? подразумевают неизвестные данные (байт) байты (символы) 8A 06 46 88 07 находит |
11.06.2013, 13:27 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Alexey_68, так Вы не говорили, что в файле еще и оффсет записан.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
11.06.2013, 14:21 | #7 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
BDA, тип вывода в файл разный, для поиска можно без смещения хотя как это влияет?
|
11.06.2013, 14:28 | #8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Ну раз разный, то нормально. Просто если в файле записаны смещения, то просто так искать подстроку не получится. Кстати, в файле без смещений все числа записаны подряд через пробел или на разных строчках (есть ли переносы строк)?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
11.06.2013, 14:43 | #9 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
используется форматируемый вывод:
fprintf(out1, " %02X", buf[i]); переносы через 16 байт: 00426000: 00 60 BE 00 40 44 00 8D BE 00 D0 FB FF C7 87 9C Последний раз редактировалось Alexey_68; 11.06.2013 в 14:45. |
11.06.2013, 15:06 | #10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Из-за наличия переносов код Nuklonа и не работает (что неудивительно, так как про переносы нельзя было догадаться по первоначальной постановке вопроса).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск по маске Delphi | Ztman | Помощь студентам | 2 | 28.10.2012 19:59 |
Поиск текста по маске | WinApi | Помощь студентам | 6 | 27.12.2009 01:17 |
Поиск папки по маске | ForzaJuve | Общие вопросы Delphi | 9 | 20.06.2009 23:50 |
Поиск По маске | CoreFox | Общие вопросы Delphi | 11 | 21.02.2008 21:48 |