Вверх ↑
Этот топик читают: Гость
Ответов: 2059
Рейтинг: 132
#1: 2018-01-11 00:05:56 ЛС | профиль | цитата
Такое впечатление, что компонентами 'Регулярные выражения' никто не пользовался и понятно почему.
На кирилеце они не хрена не работают!
Ни "Якоря", ни "Символьные классы"
Вот простой пример:

Add(Button,3126655,259,168)
{
Left=25
Top=535
link(onClick,4880804:doExecute,[])
}
Add(ODialog,4880804,315,168)
{
Filter="All|*.txt"
link(onExecute,8259123:doLoad,[(367,174)(367,116)])
}
Add(MainForm,4093148,266,105)
{
Width=514
Height=588
}
Add(Memo,8259123,386,82)
{
Left=5
Top=40
Width=490
Height=480
Strings=#108:Аннотация: Фантастический детективные рассказ опубликованный в журнале "Юный техник", 1991, © 8, С. 30 – 34.|15: OCR В. Кузьмин|11: Sept. 2001|27: Проект "Старая фантастика"|16: http://sf.nm.ru|45:---------------------------------------------|0:|12: Предисловие|0:|0:|530: Рассказ, предлагаемый в этом номере, не совсем обычен. И не потому, что написал его непрофессионал. "Я – математик, – сообщает автор в письме – И знаю, что любой материал ребята усваивают гораздо быстрее и проще, если облечь его в увлекательную и забавную форму. Не берусь судить, насколько мне это удалось, но в основу своего рассказа я положил реальную математическую задачу, попытавшись придать ей форму фантастического детектива " Итак, перед нами рассказ-загадка. И, кроме увлекательного чтения, нам предстоит ее разгадать. |11: Попробуем?|1: |14: Сергей ИВАНОВ|6: Алиби|1: |35: – Вот тот, кто вам нужен, капитан!|10: – Но это…|66: – Спокойствие, только спокойствие. У него необычайно острый слух.|254: В дальнем углу захудалого бара, какой только можно встретить на большой Звездной Дороге, сидело весьма несимпатичное существо, которое сопровождавший представил капитану самым выдающимся частным детективом Союза ББ – Галактик спиральной Туманности С-07.|153: Опершись на переднюю пару ложноног, Великий Детектив изучал меню двумя наборами глаз. В каждом из них поблескивал металлическим отливом 161 инфразрачок.|100: – Разрешите познакомить, – произнес спутник капитана – Капитан Глазз. Мистер Марбл – Великий Сыщик.|75: – Вы преувеличиваете,- буркнул Марбл, – просто сыщик хорошей квалификации.|84: При этом задняя пара его ложноног незаметно скользнула под стол, словно за оружием.|95: Представивший капитана почел за благо тихо исчезнуть, справедливо решив, что миссия исчерпана.|119: Капитан был закален и выдержан. Слегка поежившись, он смело подсел к столу и как человек прямой, приступил к рассказу.|39: – Видите ли, мистер Марбл, дело в том…|95: – Вы недавно вернулись с планеты Лю созвездия Хрю-Оз? – неожиданно прервал капитана м-р Марбл.|47: – Да – удивился капитан – А как вы догадались?|205: – О! Это очень просто, – проворчал Марбл. Он выбрался из своего угла, попеременно перебирая парой ложноног и ложнорук, и принялся совершать методичные перемещения, то удаляясь от капитана, то приближаясь.|428: – Все просто. Я бы сказал: все написано у вас на лице, капитан… – задумчиво заговорил Марбл. – Ваше лицо имеет синеватый оттенок. Так бывает, если провести некоторое время на планете, где атмосфера несколько отличается по составу от привычной. А какой уважающий себя Звездный Волк, пусть даже испытывая некоторый дискомфорт, не посчитает делом чести обойтись без скафандра? Именно такой планетой и является Лю созвездия Хрю-Оз.|332: – Просто поразительно! – воскликнул потрясенный капитан Глазз. – А я-то думал, что такой цвет лица у меня от несварения желудка. Видите ли, мистер Марбл, у нас вышел из строя корабельный кок-кибер, и я вынужден был сам готовить завтрак. Радист и механик есть его отказались, сказав, что я хочу их отравить, а я съел все три порции…|75: – Это совпадение случайное, – перебил капитана Марбл и, помолчав, добавил:|53: – Значит, на корабле вас трое, не считая кок-кибера…|61: – Сверхъестественно, – прошептал капитан Глазз, – но откуда…|123: – Вы сами об этом только что сказали, – отрезал Марбл и впился взглядом своих 322 зрачков в район сонной артерии капитана.|64: Тот решил не затягивать визит и торопливо изложил суть истории:|639: – Вчера в 16 часов 00 минут по среднегалактическому времени весь экипаж, включая кок-кибера, собрался в кают-компании обсудить итоги экспедиции. Вся собранная информация была помещена в единый блок памяти – кристалл. Копии материалов стерты. В 16 часов 29 минут все отправились по своим местам. Радист – в рубку (ровно через минуту должен был начаться сеанс связи с базой). Я – на мостик. Механик – в рефрижераторный отсек, а кок-кибер – на камбуз. Как только я поднялся на мостик, меня по видеофону вызвал механик из рефрижераторного. Было ровно 16 часов 30 минут. И тут я вспомнил, что кристалл с отчетом остался на столе кают-компании.|224: Закончив разговор с механиком, я направился в кают-компанию, но на полпути был застигнут сигналом тревоги с камбуза. Из рубки выскочил радист, а в дальнем конце коридора показался механик. Все втроем мы бросились на камбуз.|125: Печальная картина предстала перед нашими глазами. Очевидно, микрометеорит пробил обшивку и вывел из строя нашего кок-кибера.|88: Когда мы вернулись в кают-компанию обсудить наше положение, кристалла на столе не было.|121: – Значит, – подытожил м-р Марбл, – если исключить возможность сговора, что мне кажется маловероятным, алиби есть у всех.|91: М-р Марбл взгромоздился на стул, сплел все свои ложноруки и ложноноги в единый тугой узел.|40: – Алиби есть у всех, кроме… кок-кибера.|100: – В том-то и дело, мистер Марбл. Я бы первый заподозрил этого паршивца! – воскликнул капитан Глазз.|32: – Почему? – удивился м-р Марбл.|253: – Видите ли, – смущенно опустив глаза, отвечал капитан, – я понемногу становлюсь несколько э-э-э… рассеянным: то скафандр забуду на место повесить, то вот кристалл оставил… А этот паршивец в силу своего скверного характера вечно грозился меня проучить.|17: – Вот и проучил!|79: – И я бы так подумал. Но у него алиби самое железное. Он жарил гренки к ленчу.|12: – Ну и что?|138: – Так ведь очень просто. Кок-кибер приступил к приготовлению гренок в 16 часов 30 минут, а в 16 часов 34 минуты уже был выведен из строя.|58: – Ему хватило бы четырех минут – прийти и взять кристалл?|43: – Хватило бы и минуты. Но он жарил гренки!|54: – Дались вам эти гренки! – рассвирепел Великий Сыщик.|84: – Как же?! – запротестовал капитан. – Ведь в них-то все дело. В них и в сковородке…|36: – Вы считаете? – хмыкнул м-р Марбл.|281: – Да, – невозмутимо ответствовал Глазз. – Гренку надо обжарить с двух сторон. На сковороде умещаются одновременно только две гренки, а каждая из сторон обжаривается ровно минуту. К моменту аварии готовых гренок было как раз три, то есть на их обжаривание ушло ровно четыре минуты.|213: Капитан замолчал и посмотрел на м-ра Марбла. Но Великий Сыщик, казалось, впал в спячку. Только слабое подрагивание ложнорук да подергивание ложноног говорило о том, что шла интенсивная и мучительная работа мысли.|19: Но вот Марбл ожил:|36: – Вы прилетели на десантном катере?|20: – Да, мистер Марбл.|50: – Ваш корабль не входил в плотные слои атмосферы?|21: – Нет, мистер Марбл.|211: – Тогда, – просиял Великий Сыщик, – свяжитесь с кораблем и спросите, не обратили ли ваши соратники свое драгоценное внимание на некий объект, вращающийся на орбите искусственного спутника вокруг вашего корабля?|102: Капитан Глазз достал портативный видеофон и, недоверчиво поглядывая на Марбла, стал вызывать корабль.|67: – Радист Носс слушает, – пропищал видеофон через несколько секунд.|70: – Интересно, – пробурчал Марбл, – как зовут механика на этом корабле?|106: – Да, капитан, – пищал тем временем видеофон, – мы уже давно заметили ЭТО, но не решались вас беспокоить.|69: – Прекрасно, – вмешался Великий Сыщик, – пусть доставят ЭТО на борт.|71: – Капитан! – заверещал через некоторое время видеофон. – Это кристалл!|44: – Вот и чудесно! – подытожил Великий Сыщик.|111: – Но как? Откуда? Каким образом? – обрушил на сыщика шквал вопросов не столь уж сообразительный капитан Глазз.|324: – Все проще простого, капитан. Вы сами подсказали мне разгадку. Ваш кок кибер все таки проучил вас. Это он выкинул кристалл в мусоропровод. Правда, пожалев вас, не аннигилировал его. Поэтому кристалл, целый и невредимый, болтался вокруг корабля. Ваше счастье, что вы не вошли в плотные слои, а то бы он сгорел безвозвратно.|98: – Но этого не может быть, – прошептал совершенно сбитый с толку капитан – Кок-кибер жарил гренки!|161: – Да, гренки, вы правы. В них-то все дело, – весело потирая ложноруки и ложноноги, подтвердил м-р Марбл – Ваш кок-кибер улучил-таки минутку, чтобы наказать вас.|10: – Но как?|143: – А вот этого я вам не скажу, – и в знак того, что аудиенция закончена, м-р Марбл прикрыл свои многочисленные зрачки и забился в дальний угол.|65: Капитан покинул бар в сильной задумчивости, растерянно, бормоча:|53: – Это ж надо! С виду паук пауком, а какой интеллект!|273: … Всю оставшуюся часть экспедиции капитан Глазз жарил гренки. Он так и не разгадал тайну сэкономленной минуты. Зато гренки к концу путешествия у него получались отменные. Радист Носс уже не отказывался есть их, как, впрочем, и другое, что готовил капитан Глазз. И механик…|0:|0:|5:* * *|0:|153: А как звали механика? Помните, его именем заинтересовался и мистер Марбл. И как удалось кок-киберу улучить минутку, чтобы стащить кристалл,- догадались?|0:|0:|0:|0:|21: Как улучить минутку.|0:|0:|64: Разгадка содержалась в письме автора фантастического детектива.|200: "Если обжаривать гренки в последовательности, приведенной в рассказе: две гренки с одной, а затем с другой стороны – это займет 2 минуты, третья гренка с обеих сторон – еще 2 минуты; итого -4 минуты.|297: Но по условиям, сформулированным в рассказе, можно обойтись и быстрее. Достаточно, обжарив первые две гренки с одной стороны, снять одну, вторую перевернуть и положить третью. Затем снять готовую, третью перевернуть и вновь вернуть на сковороду первую гренку. Теперь вся операция займет 3 минуты.|57: А вот как звали механика, пусть так и останется тайной".|19: Или вы догадались?|
ScrollBars=2
Point(doSetSelStart)
Point(doSetSelLength)
Point(doEnsureVisible)
}
Add(Edit,16768161,490,98)
{
Left=25
Top=5
Width=465
Height=30
Font=[MS Sans Serif,14,0,0,1]
Text="\bЭТО\b"
}
Add(Button,9345993,259,203)
{
Left=185
Top=535
Caption="Искать"
link(onClick,5386917:doExec,[(349,209)(349,188)])
}
Add(RE_Search,5386917,406,182)
{
link(onMatch,999126:doEvent1,[(446,188)(446,174)])
link(SourceStr,8259123:Text,[(412,158)(392,158)])
link(Expression,16768161:Text,[(419,156)(496,156)])
}
Add(Button,10206297,301,231)
{
Left=260
Top=535
Width=85
Caption="Следующий"
link(onClick,5386917:doExecNext,[(369,237)(369,195)])
}
Add(Hub,999126,455,168)
{
OutCount=3
link(onEvent1,7399570:doOperation,[(481,174)(481,240)(352,240)(352,307)])
link(onEvent2,15111858:doData,[(481,181)(481,244)(422,244)(422,307)])
link(onEvent3,8259123:doEnsureVisible,[(481,188)(481,166)(374,166)(374,144)])
}
Add(DoData,15111858,434,301)
{
link(onEventData,8259123:doSetSelLength,[(478,307)(478,222)(374,222)(374,137)])
link(Data,5386917:MatchLen,[(440,257)(426,257)])
}
Add(Math,7399570,364,301)
{
OpType=1
Op2=1
link(onResult,8259123:doSetSelStart,[(408,307)(408,219)(374,219)(374,130)])
link(Op1,5386917:MatchPos,[(370,257)(419,257)])
}

Слово находящееся между \b и \b должно найтись только в том случае, если оно полностью совпадает.
На латинице всё в порядке, а на кирилеце нет. И так везде, где только нет перечисления [А-я].
Вот исправленный файл. http://forum.hiasm.com/getfile/38285 Он используется во всех компонентах RE.

Редактировалось 2 раз(а), последний 2018-01-11 07:47:05
карма: 6

0
Ответов: 2059
Рейтинг: 132
#2: 2018-01-12 09:42:48 ЛС | профиль | цитата
nesco, а нет желания пофиксить?

Редактировалось 1 раз(а), последний 2018-01-12 09:43:33
карма: 6

0
Ответов: 1926
Рейтинг: 172
#3: 2018-01-12 19:28:37 ЛС | профиль | цитата
flint2,

карма: 9
0
Разработчик
Ответов: 4698
Рейтинг: 426
#4: 2018-01-12 19:49:52 ЛС | профиль | цитата
Фикс не совсем корректный: библиотека работает с utf и ascii, а твой фикс учитывает только ascii и ломает код для utf. По-хорошему, там надо по-другому сделать, но у меня пока нет времени разбираться с этим.

Редактировалось 1 раз(а), последний 2018-01-12 19:50:33
карма: 10
0
Ответов: 2059
Рейтинг: 132
#5: 2018-01-12 20:03:26 ЛС | профиль | цитата
а твой фикс учитывает только ascii и ломает код для utf.

Тогда совсем не понятно, почему в одних местах это учтено, а в других нет?
Как-то середина на половину.
Тогда убрать из других функций поддержку кириллицы и написать "Только для латиницы".
Пол дня угробил, пока не понял, что не я что-то не так делаю, а выражения работают через один.
ломает код для utf
Код не ломается, а работает для utf, как до исправления.(сейчас проверил)
utf практически не использую, по этому не обратил внимания.


Чтобы проверить, где бы компоненты найти, работающие с utf.
Хотя бы Edit.
Add(Charset,6568922,448,616)
{
Type=7
}


для юникода, но надо где-то делать выбор между рус\lat

{$IFDEF UniCode}
RusRangeLo : array [0 .. 33] of REChar =
(#$430,#$431,#$432,#$433,#$434,#$435,#$451,#$436,#$437,
#$438,#$439,#$43A,#$43B,#$43C,#$43D,#$43E,#$43F,
#$440,#$441,#$442,#$443,#$444,#$445,#$446,#$447,
#$448,#$449,#$44A,#$44B,#$44C,#$44D,#$44E,#$44F,#0);
RusRangeHi : array [0 .. 33] of REChar =
(#$410,#$411,#$412,#$413,#$414,#$415,#$401,#$416,#$417,
#$418,#$419,#$41A,#$41B,#$41C,#$41D,#$41E,#$41F,
#$420,#$421,#$422,#$423,#$424,#$425,#$426,#$427,
#$428,#$429,#$42A,#$42B,#$42C,#$42D,#$42E,#$42F,#0);
RusRangeLoLow = #$430{'а'};
RusRangeLoHigh = #$44F{'я'};
RusRangeHiLow = #$410{'А'};
RusRangeHiHigh = #$42F{'Я'};
{$ELSE}
RusRangeLo = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
RusRangeHi = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';

Редактировалось 10 раз(а), последний 2018-01-12 21:47:18
карма: 6

0
Ответов: 5227
Рейтинг: 587
#6: 2018-01-12 21:29:41 ЛС | профиль | цитата
flint2, привет!
На моей памяти кто только не делал регулярки, вот тебе ещё одна для коллекции
тут - http://forum.hiasm.com/getfile/38286
С кириллицей проблем не было как я помню. Для vbs и js полно онлайн конструкторов регулярок
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1regexp_1_0.zip [67.7KB] [549]
Ответов: 2059
Рейтинг: 132
#7: 2018-01-12 21:34:46 ЛС | профиль | цитата
andrestudio, , привет!
Да я так, просто погулять вышел!

Да и тут теперь проблем нет.
Проблемы в том, что все редакторы (компоненты) не поддерживают юникода, кроме Scintilla.

Редактировалось 3 раз(а), последний 2018-01-12 21:49:12
карма: 6

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