Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];
ВнизПоиск... Найти похожие ветки
← →
programmer90 (2008-09-09 18:05) [0]Здравствуйте ещё раз. На самом деле задача не так проста, несмотря на то что в теме сообщения я указал лишь одно слово...поиск
Нужно разработать такой алгоритм поиска
Допустим у нас в стринг массиве имеется строка : Sorry, "argument" is not found.
Если мы запросим в поиске : Sorry, "здесь_может_быть_что_угодно_без_пробелов_и_без_кавычек" is not found, то поиск должен обнаружить вышеуказанную строку.
Всего таких "argument"-ов может быть 2 штуки .
Благодарю-с.
← →
Palladin © (2008-09-09 18:16) [1]Pos + F1
← →
Юрий Зотов © (2008-09-09 19:43) [2]Похоже, здесь нужны регулярные выражения. Что-то типа
Sorry, "*" is not found.
← →
Zeqfreed © (2008-09-09 19:56) [3]Для такого простого случая регулярные выражения, наверное, не нужны.
← →
Юрий Зотов © (2008-09-09 20:04) [4]Возможно, и не нужны. Задача сформулирована не совсем понятно, но смущает вот эта фраза: здесь_может_быть_что_угодно. Если при поиске это самое "что_угодно" нужно игнорировать, то регулярные выражения - самое то.
← →
Юрий Зотов © (2008-09-09 20:10) [5]Еще стоит посмотреть в сторону функции MatchesMask.
← →
Zeqfreed © (2008-09-09 20:12) [6]> Юрий Зотов © (09.09.08 20:04) [4]
Там ведь написано, что без пробелов и без кавычек. Единственная трудность могла быть с экранированными кавычками, но раз их там не может быть, то и обрабатывать такой случай не нужно.
← →
Юрий Зотов © (2008-09-09 20:15) [7]> Zeqfreed © (09.09.08 20:12) [6]
Там может быть "что угодно", вот в чем соль. И если это "что угодно" надо при поиске игнорировать, то вся сложность в этом и есть. А пробелы и кавычки никакой роли не играют.
← →
Zeqfreed © (2008-09-09 20:54) [8]> Юрий Зотов © (09.09.08 20:15) [7]
Насколько я понял, то нужно найти все то, что внутри кавычек. А если получить надо только некоторые символы из последовательности, то регулярные выражения, вроде как, не сильно помогут.
← →
Юрий Зотов © (2008-09-09 21:06) [9]Автор писшет, что "то поиск должен обнаружить вышеуказанную строку". Какую именно строку надо найти - то ли всю целиком, то ли только параметры - этого он не уточнил. Поэтому я и говорю, что задача сформулирована не совсем понятно. Но если я правльно ее понял, то вот возможное решение:
uses
Masks;
procedure TForm1.Button1Click(Sender: TObject);
const
YesNo: array[boolean] of string = ("No", "Yes");
begin
Caption := YesNo[MatchesMask("Sorry, "параметр1" "параметр2" is not found.", "Sorry, * is not found.")]
end;
← →
Zeqfreed © (2008-09-09 21:10) [10]> Юрий Зотов © (09.09.08 21:06) [9]
Остается тогда только ожидать уточнений от автора.
← →
Юрий Зотов © (2008-09-09 21:12) [11]> Zeqfreed © (09.09.08 21:10) [10]
Видимо, да. Подождем.
← →
Медвежонок Пятачок © (2008-09-09 22:24) [12]А если получить надо только некоторые символы из последовательности, то регулярные выражения, вроде как, не сильно помогут.
Поиогут. РВ позволяют ответить не только на вопрос "совпало/не совпало"
← →
programmer90 (2008-09-09 22:54) [13]А вот и уточнения:
Вот дан массив из строк:
Sorry, qwerty is not found
Sorry, asd123 is not found
Sorry, 123asd is not found
Sorry, sd123+_) is not found
Sorry, wqeq**90_)98 is not found
Sorry, продолжаем_в_том_же_духе is not found
Здесь находится текст который вообще не в тему
Я ввожу Sorry, "asd" is not found тогда
в результате он должен указать на СТРОКУ где находиться искомая строка
в данном случае это начиная 1-6 строки
Я ввожу Sorry, "asd2" is not found или
Sorry, "Мама_мыла_раму" is not found
и в результате тоже самое 1-6
То есть обобщая вышесказанное:
В поиске учавствуют несколько слов (совукупность символов разделенные пробелами) из этих слов 2 слова взятые в кавычки могут быть проигнорированы в процессе поиска.
Sorry, первое слово
"Мама_мыла_раму" второе слово его можно проигнорировать и.т.д....
← →
Zeqfreed © (2008-09-09 23:06) [14]> Медвежонок Пятачок © (09.09.08 22:24) [12]
Какое регулярное выражение из строки a1b2c3 вернет 123? Я как-то ни разу не видел, чтобы с помощью регулярок осуществляли фильтрацию.
← →
Zeqfreed © (2008-09-09 23:08) [15]> programmer90 (09.09.08 22:54) [13]
Я всегда очень удивляюсь и не верю, что можно сознательно написать настолько непонятно :)
← →
programmer90 (2008-09-09 23:23) [16]
> [9]
проверил вроде всё хорошо, единственное он пробелы не контролирует, то есть слов может быть больше... это не очень хорошо
если ему дать "Sorry, arg is not found" и "Sorry, arg *" он скажет что верно, а это не совсем удовлетворяет условию...
← →
Johnmen © (2008-09-09 23:23) [17]Всё, что игнорируется, заменяется на *
← →
KilkennyCat © (2008-09-09 23:30) [18]Странно... но я мне бы хватило Pos и проверки где.
← →
Юрий Зотов © (2008-09-09 23:36) [19]> programmer90 (09.09.08 23:23) [16]
Так зачем же задавать неправильную маску? Ясно, что тогда и работать будет тоже неправильно.
← →
programmer90 (2008-09-09 23:37) [20]
> Я всегда очень удивляюсь и не верю, что можно сознательно
> написать настолько непонятно :)
Вот допустим дана строка в каком-то файле:
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
И как вы думаете на какую строку он должен указать?
← →
programmer90 (2008-09-09 23:41) [21]
> Так зачем же задавать неправильную маску? Ясно, что тогда
> и работать будет тоже неправильно.
К сожалению я даже не буду знать на какой позиции будет находится , маска может быть где угодно ....в файле размером до 5-10 тысяч слов
← →
Юрий Зотов © (2008-09-09 23:41) [22]> programmer90 (09.09.08 23:37) [20]
МаскаFatal: Syntax error, "*" expected but "*" found
удовлетворяет любому из этих трех запросов. Будет найдена строка {1}.
← →
programmer90 (2008-09-09 23:49) [23]Теперь самое сложное)
как искать текст по файлу не использую мемо и.т.д?
Просто файл большой...
← →
Юрий Зотов © (2008-09-09 23:52) [24]> programmer90 (09.09.08 23:41) [21]
> маска может быть где угодно
Если параметры всегда в кавычках, то маску можно формировать динамически, тогда она всегда окажется правильной.
Любая Ваша строка имеет такую структуру:
константа"параметр"константа"параметр"константа "параметр"...
где константа и параметр - произвольные подстроки.
Нам нужно получить такую маску:
константа"*"константа"*"константа "*"...
То есть, каждую подстроку в кавычках (параметр) надо заменить на символ *. Это легко делается через PosEx и Copy.
========================
Вообще, надо бы подробнее знать суть задачи. А то пока не очень понятно, что это за поиск такой. Может быть, все можно решить проще.
← →
Юрий Зотов © (2008-09-09 23:57) [25]> programmer90 (09.09.08 23:49) [23]
10 тыс. слов - это не большой файл. Даже если среднее слово состоит из 10 символов (а скорее всего, оно будет короче), то это всего лишь 100 кБ. Вполне можно целиком загрузить в память, тогда работать с ним будет намного проще и быстрее. Для этого подойдут, например, TStringList или TStringStream.
← →
KilkennyCat © (2008-09-09 23:57) [26]
> programmer90 (09.09.08 23:49) [23]
>
> Теперь самое сложное)
> как искать текст по файлу не использую мемо и.т.д?
> Просто файл большой...
Искать непосредственно в файле что мешает? Или хочется разбитие по строкам? Тогда TStrings
← →
programmer90 (2008-09-10 00:06) [27]Суть задачи такова:
Делаю оболочку для компилятора FP, которая будет польностью на трех языках будет!!!
Уже достаточно много сделано, часть сделана с помощью Delphimasters и спасибо вам за это!
Так на текущий момент задача такова:
Надо перевести ошибки компилятора.
Но некоторые ошибки представлен в обобщенном виде напр:
Fatal: Syntax error, "arg1" expected but "arg2" found - где arg1, arg2 могут принимать различные значения.
поэтому нужен поиск по маске , вот в принципе и всё.
← →
programmer90 (2008-09-10 00:09) [28]
> Искать непосредственно в файле что мешает? Или хочется разбитие
> по строкам? Тогда TStrings
В принципе абсолютно ничего, просто немного заработался, завтра с утра я наверное буду смеятся над тем как я мог такой вопрос задать))))
← →
programmer90 (2008-09-10 00:11) [29]Да и огромное спасибо всем, особенно Юрию Зотову© , уже тута [9] вы попали в яблочко.
← →
Zeqfreed © (2008-09-10 07:28) [30]> programmer90 (09.09.08 23:37) [20]
Ага. Т.е. здесь_может_быть_что_угодно_без_пробелов_и_без_кавычек это новый способ наименования звездочки, понятно. Прокачал себе уровень телепатии.
← →
Медвежонок Пятачок © (2008-09-10 08:46) [31]Какое регулярное выражение из строки a1b2c3 вернет 123? Я как-то ни разу не видел, чтобы с помощью регулярок осуществляли фильтрацию.
123? Да элементарно.
← →
Johnmen © (2008-09-10 09:15) [32]
> programmer90 (09.09.08 23:49) [23]
> Теперь самое сложное) как искать текст по файлу не использую
> мемо и.т.д?
Никак. Это невозможно.
← →
Zeqfreed © (2008-09-10 20:21) [33]> Медвежонок Пятачок © (10.09.08 08:46) [31]
Эскимо? Страус!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.009 c