Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.068 c
15-1220003252
data
2008-08-29 13:47
2008.10.19
Вопрос к знатокам оракла. Есть ли ограничение на кол-во действий


3-1208260163
BAX
2008-04-15 15:49
2008.10.19
Случайный выбор данных из таблицы базы


2-1221131062
programmer90
2008-09-11 15:04
2008.10.19
Команда в ShellExecute


15-1219920689
Tricky
2008-08-28 14:51
2008.10.19
Todo List не работает в D7


2-1221045757
Нов_и_чок
2008-09-10 15:22
2008.10.19
Системные иконки Shell32.dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский