Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.19;
Скачать: CL | DM;

Вниз

Поиск...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.014 c
2-1219596481
Виталий_д
2008-08-24 20:48
2008.10.19
высота TMainMenu


6-1192515079
Dennis I. Komarov
2007-10-16 10:11
2008.10.19
Для опытного глаза


11-1194295636
Elec3C
2007-11-05 23:47
2008.10.19
Вопрос по OpenSaveDialog у


8-1187125306
Dr. Andrew
2007-08-15 01:01
2008.10.19
Где можно найти encoder-decoder для ogg файлов?


2-1221159246
programmer90
2008-09-11 22:54
2008.10.19
Переменные среды в Delphi