![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск...
programmer90 © (2008-09-09 18:05:00)Здравствуйте ещё раз. На самом деле задача не так проста, несмотря на то что в теме сообщения я указал лишь одно слово...поиск
Нужно разработать такой алгоритм поиска
Допустим у нас в стринг массиве имеется строка : Sorry, "argument" is not found.
Если мы запросим в поиске : Sorry, "здесь_может_быть_что_угодно_без_пробелов_и_без_кавычек" is not found, то поиск должен обнаружить вышеуказанную строку.
Всего таких "argument"-ов может быть 2 штуки .
Благодарю-с.
Zeqfreed (2008-09-10 20:21:00) [1]> Медвежонок Пятачок © (10.09.08 08:46) [31]
Эскимо? Страус!
Johnmen (2008-09-10 09:15:00) [2]
> programmer90 (09.09.08 23:49) [23]
> Теперь самое сложное) как искать текст по файлу не использую
> мемо и.т.д?
Никак. Это невозможно.
Медвежонок Пятачок (2008-09-10 08:46:00) [3]Какое регулярное выражение из строки a1b2c3 вернет 123? Я как-то ни разу не видел, чтобы с помощью регулярок осуществляли фильтрацию.
123? Да элементарно.
Zeqfreed (2008-09-10 07:28:00) [4]> programmer90 (09.09.08 23:37) [20]
Ага. Т.е. здесь_может_быть_что_угодно_без_пробелов_и_без_кавычек это новый способ наименования звездочки, понятно. Прокачал себе уровень телепатии.
programmer90 (2008-09-10 00:11:00) [5]Да и огромное спасибо всем, особенно Юрию Зотову© , уже тута [9] вы попали в яблочко.
programmer90 (2008-09-10 00:09:00) [6]
> Искать непосредственно в файле что мешает? Или хочется разбитие
> по строкам? Тогда TStrings
В принципе абсолютно ничего, просто немного заработался, завтра с утра я наверное буду смеятся над тем как я мог такой вопрос задать))))
programmer90 (2008-09-10 00:06:00) [7]Суть задачи такова:
Делаю оболочку для компилятора FP, которая будет польностью на трех языках будет!!!
Уже достаточно много сделано, часть сделана с помощью Delphimasters и спасибо вам за это!
Так на текущий момент задача такова:
Надо перевести ошибки компилятора.
Но некоторые ошибки представлен в обобщенном виде напр:
Fatal: Syntax error, "arg1" expected but "arg2" found - где arg1, arg2 могут принимать различные значения.
поэтому нужен поиск по маске , вот в принципе и всё.
KilkennyCat (2008-09-09 23:57:00) [8]
> programmer90 (09.09.08 23:49) [23]
>
> Теперь самое сложное)
> как искать текст по файлу не использую мемо и.т.д?
> Просто файл большой...
Искать непосредственно в файле что мешает? Или хочется разбитие по строкам? Тогда TStrings
Юрий Зотов (2008-09-09 23:57:00) [9]> programmer90 (09.09.08 23:49) [23]
10 тыс. слов - это не большой файл. Даже если среднее слово состоит из 10 символов (а скорее всего, оно будет короче), то это всего лишь 100 кБ. Вполне можно целиком загрузить в память, тогда работать с ним будет намного проще и быстрее. Для этого подойдут, например, TStringList или TStringStream.
Юрий Зотов (2008-09-09 23:52:00) [10]> programmer90 (09.09.08 23:41) [21]
> маска может быть где угодно
Если параметры всегда в кавычках, то маску можно формировать динамически, тогда она всегда окажется правильной.
Любая Ваша строка имеет такую структуру:
константа"параметр"константа"параметр"константа "параметр"...
где константа и параметр - произвольные подстроки.
Нам нужно получить такую маску:
константа"*"константа"*"константа "*"...
То есть, каждую подстроку в кавычках (параметр) надо заменить на символ *. Это легко делается через PosEx и Copy.
========================
Вообще, надо бы подробнее знать суть задачи. А то пока не очень понятно, что это за поиск такой. Может быть, все можно решить проще.
programmer90 (2008-09-09 23:49:00) [11]Теперь самое сложное)
как искать текст по файлу не использую мемо и.т.д?
Просто файл большой...
Юрий Зотов (2008-09-09 23:41:00) [12]> programmer90 (09.09.08 23:37) [20]
Маска
Fatal: Syntax error, "*" expected but "*" found
удовлетворяет любому из этих трех запросов. Будет найдена строка {1}.
programmer90 (2008-09-09 23:41:00) [13]
> Так зачем же задавать неправильную маску? Ясно, что тогда
> и работать будет тоже неправильно.
К сожалению я даже не буду знать на какой позиции будет находится , маска может быть где угодно ....в файле размером до 5-10 тысяч слов
programmer90 (2008-09-09 23:37:00) [14]
> Я всегда очень удивляюсь и не верю, что можно сознательно
> написать настолько непонятно :)
Вот допустим дана строка в каком-то файле:
Fatal: Syntax error, "arg1" expected but "arg2" found {1}
У нас поступает запрос найти :
Fatal: Syntax error, "identifier" expected but "Begin" found {2}
Поиск среди тысяч строк должен найти и запомнить номер строки {1}
У нас поступает запрос найти :
Fatal: Syntax error, ":" expected but ";" found {3}
Он опять таки должен запомнить номер строки {1}
Опять таки он никак не угомониться поступает запрос найти
Fatal: Syntax error, ";" expected but "end of file" found
И как вы думаете на какую строку он должен указать?
Юрий Зотов (2008-09-09 23:36:00) [15]> programmer90 (09.09.08 23:23) [16]
Так зачем же задавать неправильную маску? Ясно, что тогда и работать будет тоже неправильно.
KilkennyCat (2008-09-09 23:30:00) [16]Странно... но я мне бы хватило Pos и проверки где.
Johnmen (2008-09-09 23:23:00) [17]Всё, что игнорируется, заменяется на *
programmer90 (2008-09-09 23:23:00) [18]
> [9]
проверил вроде всё хорошо, единственное он пробелы не контролирует, то есть слов может быть больше... это не очень хорошо
если ему дать 'Sorry, arg is not found' и 'Sorry, arg *' он скажет что верно, а это не совсем удовлетворяет условию...
Zeqfreed (2008-09-09 23:08:00) [19]> programmer90 (09.09.08 22:54) [13]
Я всегда очень удивляюсь и не верю, что можно сознательно написать настолько непонятно :)
Zeqfreed (2008-09-09 23:06:00) [20]> Медвежонок Пятачок © (09.09.08 22:24) [12]
Какое регулярное выражение из строки a1b2c3 вернет 123? Я как-то ни разу не видел, чтобы с помощью регулярок осуществляли фильтрацию.