Поиск Текста
От: serzhik Россия  
Дата: 24.04.03 18:49
Оценка:
Как искать текст в файле? Если не сложно, можете привести примерчик или ссылочку полезную сбросить???
Re: Поиск Текста
От: Кодт Россия  
Дата: 24.04.03 18:58
Оценка:
Здравствуйте, serzhik, Вы писали:

S>Как искать текст в файле? Если не сложно, можете привести примерчик или ссылочку полезную сбросить???


Какие аспекты тебя интересуют?

Алгоритмы — см., например, АлгоЛист.
Доступ к файлу — последовательный или отображение файла в память (файл-маппинг — это уже в WinAPI).
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[2]: Поиск Текста
От: serzhik Россия  
Дата: 24.04.03 19:03
Оценка:
К>Доступ к файлу — последовательный или отображение файла в память (файл-маппинг — это уже в WinAPI).

Именно это мне и нужно!
Re[3]: Поиск Текста
От: Кодт Россия  
Дата: 24.04.03 19:43
Оценка:
Здравствуйте, serzhik, Вы писали:

S>Именно это мне и нужно!


Файл-маппинг (FileMapping)? Тогда ищи в форуме WinAPI.
А также: Статья об этом
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re: Поиск Текста
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 25.04.03 02:58
Оценка:
Здравствуйте, serzhik, Вы писали:

S>Как искать текст в файле? Если не сложно, можете привести примерчик или ссылочку полезную сбросить???


Алгоритмы поиска в тексте
Автор(ы): Андрей Боровский
Дата: 28.01.2002
Re[2]: Поиск Текста
От: Дмитрий Наумов  
Дата: 25.04.03 08:37
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, serzhik, Вы писали:


S>>Как искать текст в файле? Если не сложно, можете привести примерчик или ссылочку полезную сбросить???


К>Какие аспекты тебя интересуют?


К>Алгоритмы — см., например, АлгоЛист.

К>Доступ к файлу — последовательный или отображение файла в память (файл-маппинг — это уже в WinAPI).

К>


А не знаешь ли, будет ли, например алгоритм Боуера-Мура, в общем случае эффективней чем стандартные возможности, например strstr?
... << RSDN@Home 1.0 beta 6a >>
Re[3]: Поиск Текста
От: Кодт Россия  
Дата: 25.04.03 09:16
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>А не знаешь ли, будет ли, например алгоритм Боуера-Мура, в общем случае эффективней чем стандартные возможности, например strstr?


strstr на ассемблере x86 может оказаться и быстрее... для коротких строк.
Но это надо мерять... Я этим не занимался.
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[3]: Поиск Текста
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.04.03 09:25
Оценка:
[]

ДН>А не знаешь ли, будет ли, например алгоритм Боуера-Мура, в общем случае эффективней чем стандартные возможности, например strstr?


В форуме "Исходники" — здесь
Автор: Flamer
Дата: 14.12.02
.
Re[4]: Поиск Текста
От: Дмитрий Наумов  
Дата: 25.04.03 09:38
Оценка:
Здравствуйте, Flamer, Вы писали:

F>[]


ДН>>А не знаешь ли, будет ли, например алгоритм Боуера-Мура, в общем случае эффективней чем стандартные возможности, например strstr?


F>В форуме "Исходники" — здесь
Автор: Flamer
Дата: 14.12.02
.


Ок, за ссылку спасибо. Но меня больше интересовало сравнение со стандартными функциями поиска — стоит ли овчинка выделки?
... << RSDN@Home 1.0 beta 6a >>
Re[5]: Поиск Текста
От: Sergey Россия  
Дата: 25.04.03 09:47
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>>А не знаешь ли, будет ли, например алгоритм Боуера-Мура, в общем случае эффективней чем стандартные возможности, например strstr?


F>В форуме "Исходники" — здесь
Автор: Flamer
Дата: 14.12.02
.


ДН>Ок, за ссылку спасибо. Но меня больше интересовало сравнение со стандартными функциями поиска — стоит ли овчинка выделки?


Если надо несколько раз искать одну и ту же строку — то почти всегда стоит. Но если и без того быстродействия хватает — то, разумеется, не стоит — че тут еще скажешь ?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[6]: Поиск Текста
От: Дмитрий Наумов  
Дата: 25.04.03 09:56
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Если надо несколько раз искать одну и ту же строку — то почти всегда стоит. Но если и без того быстродействия хватает — то, разумеется, не стоит — че тут еще скажешь ?


А если все хитрее — есть 100000 текстов, нужно выбрать в каких из них есть вхождение искомой строки, то есть поиск идет до первого встречного, что тогда?
... << RSDN@Home 1.0 beta 6a >>

Удалено избыточное цитирование. -- ПК.
Re[7]: Поиск Текста
От: Sergey Россия  
Дата: 25.04.03 10:26
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>А если все хитрее — есть 100000 текстов, нужно выбрать в каких из них есть вхождение искомой строки, то есть поиск идет до первого встречного, что тогда?


Юзать однозначно. Там по сравнению с "тупым" поиском есть некоторые потери на заполнение таблицы, зависящей от строки, поэтому если их можно считать малыми (длинные тексты, длинная строка или много поисков одной и той же строки), то применение этого алгоритма целесообразно. А вот для юникода оно не очень подходит — алфавит большой, придется разреженный массив городить.

Удалено избыточное цитирование. -- ПК.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[8]: Поиск Текста
От: Кодт Россия  
Дата: 25.04.03 10:58
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Юзать однозначно. Там по сравнению с "тупым" поиском есть некоторые потери на заполнение таблицы, зависящей от строки, поэтому если их можно считать малыми (длинные тексты, длинная строка или много поисков одной и той же строки), то применение этого алгоритма целесообразно. А вот для юникода оно не очень подходит — алфавит большой, придется разреженный массив городить.


Для юникода (UTF-16 и UTF-32) можно сделать побайтовый поиск, а при нахождении проверять смещение. Если найденный блок байтов не выравнен на границу юникодного символа — продолжить поиск.
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[9]: Поиск Текста
От: Sergey Россия  
Дата: 25.04.03 11:17
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Sergey, Вы писали:


S>Юзать однозначно. Там по сравнению с "тупым" поиском есть некоторые потери на заполнение таблицы, зависящей от строки, поэтому если их можно считать малыми (длинные тексты, длинная строка или много поисков одной и той же строки), то применение этого алгоритма целесообразно. А вот для юникода оно не очень подходит — алфавит большой, придется разреженный массив городить.


К>Для юникода (UTF-16 и UTF-32) можно сделать побайтовый поиск, а при нахождении проверять смещение. Если найденный блок байтов не выравнен на границу юникодного символа — продолжить поиск.


Тут еще вопрос, что медленней будет. IMHO, алгоритм с разреженным массивом для алфавитов с фиксированной длиной символа можно сделать более быстрым.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[10]: Поиск Текста
От: Кодт Россия  
Дата: 25.04.03 11:52
Оценка:
Здравствуйте, Sergey, Вы писали:

К>>Для юникода (UTF-16 и UTF-32) можно сделать побайтовый поиск, а при нахождении проверять смещение. Если найденный блок байтов не выравнен на границу юникодного символа — продолжить поиск.


S>Тут еще вопрос, что медленней будет. IMHO, алгоритм с разреженным массивом для алфавитов с фиксированной длиной символа можно сделать более быстрым.


Ну, если не жалко 2^16 вордов на таблицу, то Боуер-Мур над вордами будет быстрее, чем над байтами.

Более того, можно сделать наоборот: строку байтов рассмотреть как строку вордов, и искать ее в тексте со смещением +0 и +1
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[11]: Поиск Текста
От: Sergey Россия  
Дата: 25.04.03 13:03
Оценка:
Здравствуйте, Кодт, Вы писали:

К>>Для юникода (UTF-16 и UTF-32) можно сделать побайтовый поиск, а при нахождении проверять смещение. Если найденный блок байтов не выравнен на границу юникодного символа — продолжить поиск.


S>Тут еще вопрос, что медленней будет. IMHO, алгоритм с разреженным массивом для алфавитов с фиксированной длиной символа можно сделать более быстрым.


К>Ну, если не жалко 2^16 вордов на таблицу, то Боуер-Мур над вордами будет быстрее, чем над байтами.


128 Кб? Копейки. Но я вообще-то говорил про разреженный массив. Фактически, массив в Бойер-Муре использован просто для табличного задания функции — позиция(текущий символ). позиция == длина строки для всех букв, не встречающихся в строке. Обычный массив — самый простой и быстрый вариант реализации такой функции в случае маленького алфавита. В случае большого алфавита для реальных строк большая часть значений такой функции будет равна длине строки, поэтому можно попробовать поизвращаться в сторону двух и более уровней массивов и перестановки битов в символах, например.

К>Более того, можно сделать наоборот: строку байтов рассмотреть как строку вордов, и искать ее в тексте со смещением +0 и +1


Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Поиск Текста
От: Дмитрий Наумов  
Дата: 25.04.03 14:18
Оценка:
Здравствуйте, Кодт, Вы писали:

А вы случаем не знаете, какой алгоритм используется в реализации std::string.find от Dinkumware?
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.