Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1: 2014-02-11 23:18:30 ЛС | профиль | цитата
Есть такой код в StrMask:

function _StrCmp(Str,MskChar):boolean;
begin
while (Str^<>#0)and(Msk^<>#0) do begin
if Msk^ = '*' then begin
if _StrCmp(Str,Msk+1) then begin
Result := true;
exit;
end;
end else if Msk^ = '#' then begin
if Str^ in ['0'..'9'] then Inc(Msk)
else break;
end else if (Msk^ = '?')or(Msk^ = Str^) then Inc(Msk)
else break;
Inc(Str);
end;
Result := (Str^ = #0)and(Msk^ = #0);
end;

Собственно если '#' то 1 цифра..а если диапазон цифр нужен? например > 1 ?
Можно как-то в данный код добавить такую функцию?
карма: 0

0
Ответов: 8961
Рейтинг: 824
#2: 2014-02-12 10:07:56 ЛС | профиль | цитата
Gunnman, имеется в виду логика: "#" -- одна любая цифра, а скажем "`#" -- несколько подряд идущих цифр ?
карма: 19

0
Ответов: 2059
Рейтинг: 132
#3: 2014-02-12 11:33:59 ЛС | профиль | цитата
Не плохо и верхнюю точку для маски добавить, а не только для стоки.
Я себе добавил.
Гораздо удобней стало.
карма: 6

0
Ответов: 9906
Рейтинг: 351
#4: 2014-02-12 11:35:49 ЛС | профиль | цитата
Неплохо и универсальный сканер сделать...
Потом уже и универсальный парсер синтаксиса...
карма: 9

0
Ответов: 8961
Рейтинг: 824
#5: 2014-02-12 14:35:18 ЛС | профиль | цитата
Galkov,
Анекдот (по Маяковскому) писал(а):
Сейчас бы тётю тра-та-та!
Да, сынок, неплохо!
Меня хватает только на пару строк Вот этих: code_33048.txt
карма: 19

0
файлы: 2newstrmask.rar [2.3KB] [109], code_33048.txt [360B] [161]
Ответов: 655
Рейтинг: 18
#6: 2014-02-12 16:24:33 ЛС | профиль | цитата
Леонид, "#" -- одна любая цифра, а скажем "`#" -- несколько подряд идущих цифр - совершенно верно!

Спасибо за код!
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#7: 2014-02-13 17:44:15 ЛС | профиль | цитата
Galkov, не нужно никаких новых синтаксисов, все уже есть давно
Gunnman, если твои задачи не получается решить с помощью StrMask, попробуй RE_Search, RegularExpressions. Решить ту же задачу с его помощью будет сложнее, чем со StrMask, но зато функционал намного шире.
Например, задача из первого поста на регулярках решается такой маской: "^d+$", где "^" - значит, что последовательность должна начинаться с начала строки, "d" - любая цифра, "+" - означает, что "d" может повторяться 1 и более раз (т.е. 1 и более цифр в строке), "$" - означает, что на цифрах строка и заканчивается.
карма: 10
1
Голосовали:foksov
Ответов: 9906
Рейтинг: 351
#8: 2014-02-13 19:16:12 ЛС | профиль | цитата
Assasin писал(а):
все уже есть давно

Не смешите мои подковы.
Лучше книжки почитайте. Прежде, чем произносить суждения про "синтаксис" - лучше знать, что это такое.
карма: 9

0
Разработчик
Ответов: 4698
Рейтинг: 426
#9: 2014-02-13 20:26:12 ЛС | профиль | цитата
Galkov писал(а):
Прежде, чем произносить суждения про "синтаксис" - лучше знать, что это такое.

Wikipedia писал(а):
Синтаксис — сторона языка программирования, которая описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию). Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.

Сколько ни вчитывался, не понял, почему нельзя назвать правила построения выражений для RegExpr синтаксисом. Galkov, если не затруднит, объясни, пожалуйста.
карма: 10
0
Ответов: 9906
Рейтинг: 351
#10: 2014-02-14 08:25:55 ЛС | профиль | цитата
"Правила построения выражений для RegExpr" можно назвать синтаксисом.
Которому на вход необходимо уже не буквы подавать, а лексемы.
А та хренька, которая из входного потока букв делает поток лексем -- называется лексическим анализатором, или сканером.

Однако вопрос не стоял о том, чем следует называть "правила построения чего-то там", а об анализе некоторого входного текста.
И Ваше утверждение, Assasin, состояло в том, что все уже давно есть, и никаких новых синтаксисов Вам не надо.

Нету.
Настоящего (чуть более сложного, чем установление факта присутствия чего-то там, где-то там) анализа, с помощью приведенного Вами списка элементов -- не сделаешь.
Конкретно: Вы не сделаете MathParse на элементах RE_Search, RegularExpressions.
А уже эта беседа -- вовсе не на 5 минут.
Именно поэтому я и предложил Вам книжки почитать. Перед утверждением о нужности/не нужности чего то там. А не Wikipedia.

карма: 9

0
Разработчик
Ответов: 4698
Рейтинг: 426
#11: 2014-02-14 10:57:30 ЛС | профиль | цитата
А, это-то верно, ничего универсального не существует и к этому стремятся. Это тема философская, и действительно не на 5 минут. Я то хотел сказать, что для большинства возникающих в реале задач регексов достаточно, и, применительно к этому топику, с моей точки зрения, никаких новых синтаксисов не нужно, хватит и RegExpr - достаточно коротко и понятно.
карма: 10
0
Ответов: 9906
Рейтинг: 351
#12: 2014-02-14 13:16:12 ЛС | профиль | цитата
В большинстве случаев не требуется селектор от 3-х до 8-ми (к примеру) символов, из определенного множества (к примеру 3..6). И, в случае нахождения таковых (причем: не стоящих в "рекурсивных комментариях") -- обработать как-то 4-ю и 5-ю цифру.

Но, наличие "большинства случаев" мало помогает, когда похожая задача возникает.
Тогда возникают топики под условным заголовком "хорошо бы ..."
Не первый, кстати говоря.

Вот мне надо было "человеческую" формулу (с пользовательскими именами переменных) преобразовать в пригодную на съедение для MathParse.
Да, базовыми элементами это еще можно сделать (и делал, до его доработки).
А вот если бы в синтаксисе нашего MathParse допускались БЫ строковые переменные (почему бы и нет, если как аргумент какой-то функции), то было БЫ - фигу с маслом.
И не помогли бы ни RE_Search, ни RegularExpressions


Ведь что я говорил-то: просто универсализировал по максимуму "хотелось бы". И не более того.

карма: 9

0
Ответов: 2059
Рейтинг: 132
#13: 2014-02-14 14:46:29 ЛС | профиль | цитата
Galkov
Да.
Всё правильно.
Проблема существует.
По мере возможности надо её минимизировать, вовсе её снять нельзя.
Нельзя цепляться за мысль, что всё вроде устаканилось и слава богу, а какие то нововведения породят разброд и смуту.
Одно время я вообще хотел отказаться от HiAsm.
Потом приспособился, из IC стали рождаться "укрупнённые" компоненты.
Ведь в природе как?
Где чего убудет, то с другого бока - прибудет.
Ведь в среде разработки Borland Delphi7, или NET Framework есть минусы по сравнению с HiAsm.
Зависит, - с какой позиции разглядывать.
Моё мнение, что подавляющее бешенство задач типичны, отличие в нюансах, и стоит делать "укрупнённые" компоненты, может быть несколько однотипных с какими то отличиями.
Это сложнее, чем перетащить компонент из какой то среды разработки в HiAsm.
Но как говорил Остап Ибрагимович, - "Киса, - мы же художники!".
Лучше иметь переполненную палитру, чем бедную. Лучше больше, чем никогда.
карма: 6

0
Ответов: 9906
Рейтинг: 351
#14: 2014-02-14 14:57:13 ЛС | профиль | цитата
flint2 писал(а):
Проблема существует

Угу.
Просто хотелось бы добавить, что у этой проблемы есть своя сложность.
Примерно уровня MathParse (это не точный расчет, а оценка).
Не простая, но вовсе не неразрешимая.
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#15: 2014-02-14 15:43:50 ЛС | профиль | цитата
flint2 писал(а):
Моё мнение, что подавляющее бешенство задач типичны
Это точно.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)