Вверх ↑
Этот топик читают: Гость
Ответов: 1535
Рейтинг: 176
#1: 2021-02-11 12:23:37 ЛС | профиль | цитата
Здравствуйте всем!
В общем-то, вот схема с регуляркой, но нерабочая... Почему нерабочая? В яваскрипт выражение работает, а здесь, видимо, что-то не так делаю.
Add(MainForm,2953706,224,140)
{
Width=481
link(onCreate,5185348:doReplace,[])
}
Add(RE_Replace,5185348,294,154)
{
Expression="/\B(?=(\d{3})+(?!\d))/g"
ReplaceStr="" ""
link(onReplace,7431806:doText,[])
link(SourceStr,13162034:Text,[])
}
Add(StrList,13162034,294,91)
{
Strings=#24:тысяча 1000, тысяча 1000|38:десять тысяч 10000, десять тысяч 10000|34:сто тысяч 100000, сто тысяч 100000|32:миллион 1000000, миллион 1000000|52:десять миллионов 10000000, десять миллионов 10000000|48:сто миллионов 100000000, сто миллионов 100000000|
}
Add(Memo,7431806,357,133)
{
Left=10
Top=10
Width=445
Height=245
}

Редактировалось 4 раз(а), последний 2021-02-11 12:29:04
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 4697
Рейтинг: 426
#2: 2021-02-11 12:48:34 ЛС | профиль | цитата
ser_davkin, Регулярные выражения. Насколько я помню, все просто: древний компонент не поддерживает positive lookahead (конструкции вида (?=...)).
карма: 10
0
Ответов: 8886
Рейтинг: 823
#3: 2021-02-11 13:06:24 ЛС | профиль | цитата
ser_davkin, конечная цель-то какая? "Сумма прописью"? или просто разделение числа группами по три цифры "для удобства*
Коллега Tad вам помог бы, но уже три месяца не выходит

Редактировалось 1 раз(а), последний 2021-02-11 13:07:05
карма: 19

0
Ответов: 2059
Рейтинг: 131
#4: 2021-02-11 13:45:10 ЛС | профиль | цитата
ser_davkin
А что ожидаешь на выходе?
Похоже у тебя"/\B(?=(\d{3})+(?!\d))/g" не правильно составлена https://www.freeformatter.com/regex-tester.html
На сколько я помню, эти компоненты не были до конца доделаны, из за расчёта на кодировку UTF-8, или что то в этом духе и некоторые флаги не работали.
Я допиливал RegExpr.pas Может не всё допилил.

https://disk.yandex.ru/d/DlE8wogzKlXduw

Редактировалось 6 раз(а), последний 2021-02-11 14:37:23
карма: 6

0
Ответов: 1535
Рейтинг: 176
#5: 2021-02-11 15:06:10 ЛС | профиль | цитата
Леонид писал(а):
просто разделение числа группами по три цифры "для удобства

В строке, кроме всяких прочих слов, имеются целые числа. Хотелось бы их разделить для удобства восприятия, типа: бла-бла 10 000 бла-бла, 100 000 бла-бла, 1 000 000, и т.д.
С "регуляркой" кубиков меньше (один), а так, конечно, можно и насыпать горсть без регулярки. В IC я профан.

flint2 писал(а):
Похоже у тебя"/\B(?=(\d{3})+(?!\d))/g" не правильно составлена

Да нет, всё правильно:
Screenshot.png
Вы, видимо, пробел не указали в поле замены.

Редактировалось 3 раз(а), последний 2021-02-11 15:18:51
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 207
Рейтинг: 14
#6: 2021-02-11 15:25:45 ЛС | профиль | цитата
ser_davkin, Вот костыль ввиде компонента StrReverse v1.0 https://forum.hiasm.com/topic/65719/0#p283778

Add(MainForm,4012307,294,245)
{
Width=481
link(onCreate,16188588:doReverse,[])
}
Add(RE_Replace,5185348,448,259)
{
Expression="(\d{3})"
ReplaceStr="$1 "
link(onReplace,6504834:doReverse,[])
}
Add(StrList,13162034,378,196)
{
Strings=#24:тысяча 1000, тысяча 1000|38:десять тысяч 10000, десять тысяч 10000|34:сто тысяч 100000, сто тысяч 100000|32:миллион 1000000, миллион 1000000|52:десять миллионов 10000000, десять миллионов 10000000|48:сто миллионов 100000000, сто миллионов 100000000|
}
Add(Memo,7431806,567,238)
{
Left=10
Top=10
Width=445
Height=245
}
Add(StrReverse,16188588,378,259)
{
link(onResult,5185348:doReplace,[])
link(Str,13162034:Text,[])
}
Add(StrReverse,6504834,511,259)
{
link(onResult,7431806:doText,[])
}
Assasin, Пытался кат-то прикрутить новый RegExpr.pas со всеми плюшками, но так и не смог. Это вообще реально?
карма: 2

0
Разработчик
Ответов: 4697
Рейтинг: 426
#7: 2021-02-11 16:49:09 ЛС | профиль | цитата
Joiner писал(а):
Assasin, Пытался кат-то прикрутить новый RegExpr.pas со всеми плюшками, но так и не смог. Это вообще реально?

Давно уже не занимался с HiAsm, мало что помню, не смогу подсказать. Реально все, но может быть очень тяжело
ser_davkin, для твоих задач попробуй такую регулярку. Она без lookahead: https://regex101.com/r/GywFR2/1



--- Добавлено в 2021-02-11 16:51:38

А, блин. Сам же не заметил, что не совсем правильно бьет. Ну может поможет мысль в этом направлении.

Вот лучше подходит: ^(\d{1,3})(\d{3})*$

Редактировалось 2 раз(а), последний 2021-02-11 16:53:49
карма: 10
1
Голосовали:ser_davkin
Ответов: 8886
Рейтинг: 823
#8: 2021-02-11 16:54:21 ЛС | профиль | цитата
ser_davkin писал(а):
В IC я профан
Вот как раз в IC https://forum.hiasm.com/getfile/39209
карма: 19

1
Голосовали:ser_davkin
Ответов: 1535
Рейтинг: 176
#9: 2021-02-11 17:53:39 ЛС | профиль | цитата
Леонид, во-во! Благодарю всех!!!
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 2059
Рейтинг: 131
#10: 2021-02-12 03:36:49 ЛС | профиль | цитата
Леонид , ты настоящий человек!!!
карма: 6

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