Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4697
Рейтинг: 426
#1: 2010-09-02 14:57:49 ЛС | профиль | цитата
Немного поразмыслив над своим проектом, мне понадобилось в маску добавить звездочку, но к сожалению она интерпретируется компонентом как любые символы, а делать костыли не шибко хочется (да и не слишком полезно для размера и скорости выполнения конечного приложения), поэтому родилась идея добавить спец-символ "\", буква строки сравнивается с буквой после этого спец-символа, то есть можно ставить и звездочки, и знаки вопроса и т.п. Надо лишь добавить пару строк в секцию case:
#pas
'\':
begin
inc(mInd);
if M[mInd] = Str[sInd] then begin
inc(sInd); inc(mInd);
end else Break;
end;
И тогда возможно сделать следующее: code_20360.txt

Да, я понимаю, это будет кушать немного лишнего размера... да и совместимость пострадает, если изменить текущий компонент (тогда придется делать новый), но думаю будет полезно иметь еще одну полезную функцию StrMask
------------ Дoбавленo в 14.57:
Так же, думаю можно еще подумать над спец-символом для обозначение не одного любого символа, а одной любой буквы (не цифры)
карма: 10
0
файлы: 1code_20360.txt [640B] [445]
vip
#1.1контекстная реклама от партнеров
Администрация
Ответов: 15294
Рейтинг: 1518
#2: 2010-09-02 15:18:17 ЛС | профиль | цитата
а что делать, если строка для парсинга изначально выглядит так:

some text with * * symbols
?
карма: 26
0
Разработчик
Ответов: 4697
Рейтинг: 426
#3: 2010-09-02 15:20:43 ЛС | профиль | цитата
Маска для такой строки:
some text with \* *\ symbols
Немного трудновато для понимания, но работает. Хотя если разбить на части "\", "*", "*", "\" сразу понятно
карма: 10
0
Администрация
Ответов: 15294
Рейтинг: 1518
#4: 2010-09-02 15:59:23 ЛС | профиль | цитата
вопрос стоял несколько иначе: что делать тем, у кого изначально строка выглядит так ... вследствии чего после внесения означенной выше правки неожиданно изменится результат парсинга в схеме.
карма: 26
0
Разработчик
Ответов: 4697
Рейтинг: 426
#5: 2010-09-02 16:00:32 ЛС | профиль | цитата
Assasin писал(а):
совместимость пострадает, если изменить текущий компонент (тогда придется делать новый)

карма: 10
0
Ответов: 8888
Рейтинг: 823
#6: 2010-09-02 16:10:34 ЛС | профиль | цитата
Assasin, совсем недавно разбирал математические выражения со знаками * - умножить, тоже правил код в StrMask, но, подумавши, вернул на место и просто заменил в строке * на $, после разбора - обратная замена.
карма: 19

0
Разработчик
Ответов: 4697
Рейтинг: 426
#7: 2010-09-02 16:11:58 ЛС | профиль | цитата
Леонид писал(а):
Assasin, совсем недавно разбирал математические выражения со знаками * - умножить, тоже правил код в StrMask, но, подумавши, вернул на место и просто заменил в строке * на $, после разбора - обратная замена.


Assasin писал(а):
а делать костыли не шибко хочется (да и не слишком полезно для размера и скорости выполнения конечного приложения)

карма: 10
0
Администрация
Ответов: 15294
Рейтинг: 1518
#8: 2010-09-02 16:14:42 ЛС | профиль | цитата
по хорошему конечно необходимо добавлять одну из реализаций regexp, где все это сто лет назад уже предусмотрено спецификацией
карма: 26
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#9: 2010-09-02 16:17:14 ЛС | профиль | цитата
Dilma писал(а):
на хорошему конечно необходимо добавлять одну из реализаций regexp

Вот и я это хотел предложить -- копать в сторону создания компонента регулярных выражений
карма: 22

0
Ответов: 8888
Рейтинг: 823
#10: 2010-09-02 16:25:19 ЛС | профиль | цитата
Assasin, эти символы в этом качестве применяются не только в HiAsm, полагаю предлагаемое нововведение излишним, для одноразового использования можно сделать и IC
карма: 19

0
Разработчик
Ответов: 4697
Рейтинг: 426
#11: 2010-09-02 18:47:23 ЛС | профиль | цитата
Dilma писал(а):
на хорошему конечно необходимо добавлять одну из реализаций regexp, где все это сто лет назад уже предусмотрено спецификацией

А я думал, по твоим словам, что ты ее до сих пор не включил в пакет из-за проблем с ее лицензией Вот и мысль: раз нельзя RegExp значит надо хотя бы улучшить StrMask
карма: 10
0
Администрация
Ответов: 15294
Рейтинг: 1518
#12: 2010-09-02 20:52:25 ЛС | профиль | цитата
Assasin писал(а):
что ты ее до сих пор не включил в пакет из-за проблем с ее лицензией

с какой еще лицензией? я говорил об этом http://ru.wikipedia.org/wiki/Regexp
карма: 26
0
Ответов: 5446
Рейтинг: 323
#13: 2010-09-03 01:33:51 ЛС | профиль | цитата
Dilma, Всё новое..
карма: 1

0
Администрация
Ответов: 15294
Рейтинг: 1518
#14: 2010-09-03 03:25:36 ЛС | профиль | цитата
iarspider, да нового ничего тут нет - элемент RegExp валяется на диске с 2007 года с пометкой "реализация на будущее". Из реализации к нему требуется нормальная справка и куча примеров, без которых он для пакета полностью бесполезен
карма: 26
2
Голосовали:Konst, iarspider
Разработчик
Ответов: 4697
Рейтинг: 426
#15: 2010-09-03 14:44:57 ЛС | профиль | цитата
Dilma писал(а):
iarspider, да нового ничего тут нет - элемент RegExp валяется на диске с 2007 года с пометкой "реализация на будущее". Из реализации к нему требуется нормальная справка и куча примеров, без которых он для пакета полностью бесполезен

А в чем проблема? Примеров я могу попробовать накидать, справка - можно из википедии взять (со ссылкой на источник, если конечно википедия разрешает это)
------------ Дoбавленo в 14.44:
Только для начала мне бы компонент тот самый
Dilma писал(а):
элемент RegExp валяется на диске с 2007 года с пометкой "реализация на будущее"

карма: 10
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)