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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2009, 22:21   #1
WinApi
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 13
По умолчанию Поиск текста по маске

Есть текстовый файл, есть слово, содержащее подстановочные символы ?(1 символ) и * (несколько символов). К примеру Borland?e* (BorlandDelphi)

Необходимо определить есть ли слово, удовлетворяющее заданной маске в данном файле.

Бьюсь 2 дня с этим, пока не сумел ничего придумать.

Буду рад любым алгоритмам и примерам поиска по маске.
WinApi вне форума Ответить с цитированием
Старый 26.12.2009, 22:24   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...а что такое "?e" ?
функцию pos() пробовали?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.12.2009, 22:31   #3
WinApi
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 13
По умолчанию

?e* = Delphi : ?=D, e=e, *=lphi

Это и есть маска. Пос пробовал, но универсальный алгоритм придумать все равно не удалось
WinApi вне форума Ответить с цитированием
Старый 26.12.2009, 23:10   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

pos() значит проигнорировали...
вам необходимо сначала определить начало и конец первого слова без маски, потом искать следующий символ без маски, по условию, если встречается символ "?", то один символ любой, если "*" то до конца слова.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.12.2009, 23:24   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
если "*" то до конца слова.
Вы наверное немного не поняли
Например нужно найти все программы, начинающиеся на знак подчеркивания. Тогда маска будет такой
Код:
_*.exe
А файлы например:
_ы.exe
_sd.exe
_34ffdfa.exe

Алгоритм примерно такой:
1. берем маску Borland?e*
2. сохраняем Pos("Borland") в num
3. переходим к num + 1; т.к. стоит "?"
4. сохраняем если num + 1 = "е", то ищем дальше

Я думаю как то так. Принцип надеюсь понятен?

Последний раз редактировалось psycho-coder; 26.12.2009 в 23:30.
psycho-coder вне форума Ответить с цитированием
Старый 26.12.2009, 23:40   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
psycho-coder
Вы наверное немного не поняли
пусть лучше WinApi уточнит... то что вы привели, у меня также.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 27.12.2009, 01:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от WinApi
Необходимо определить есть ли слово, удовлетворяющее заданной маске в данном файле.
если я правильно понял вопрос, то нужно просто применить библиотечку, позволяющую использовать регулярные выражения (т.н. RegExp), в некоторых языка поддержка регулярных выражений "зашита" в сам язык, для других есть библиотеки (для Delphi рекомендую бесплатную (и с отличным хелпом, в т.ч. на русском языке) — TRegExpr, найти несложно, например, здесь есть.)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура поиска - необходимо организовать поиск по маске *.txt в папке Test GvR Общие вопросы Delphi 3 04.11.2009 15:31
Поиск папки по маске ForzaJuve Общие вопросы Delphi 9 20.06.2009 23:50
Поиск по "маске" Родион БД в Delphi 2 16.06.2008 07:33
Поиск По маске CoreFox Общие вопросы Delphi 11 21.02.2008 21:48