Что нового

Разделить число на цифровые тройки пробелами

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
dwerf
Молодец, всем на зло!

OffTopic:
P.S
Рег. выражения рулят! :beer:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
dwerf
Высший пилотаж !!!
:beer:
OffTopic:
" И все же она вертится !"



Добавлено:
Сообщение автоматически объединено:

Самое интересное это решение оказалось самым быстрым ,
даже чуть быстрее красивого решения с помощью строковых ф-ий от kzru_hunter
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
gregaz [?]
Самое интересное это решение оказалось самым быстрым

Наверное, потому что регулярные выражения обрабатываются скомпилированным движком PCRE, котороый включен в AutoIt, а обычные строковые функции обрабатываются интерпретатором AutoIt. (Хотя при желании регулярные выражения можно очень медленные написать).





Добавлено:
Сообщение автоматически объединено:

Мастера Perl подсказывают еще два решения:


Код:
return StringRegExpReplace($tn, '(\d)\s?(\d?)\s?(\d?)(?=((\d\s?){3})*\z)', "\1\2\3 ")


Код:
return StringRegExpReplace($tn, '(^\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))', '\1 ')



Первое решение работает довольно медленно, но второе - очень быстрое.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Suppir [?]
Наверное, потому что регулярные выражения обрабатываются скомпилированным движком PCRE, котороый включен в AutoIt, а обычные строковые функции обрабатываются интерпретатором AutoIt.
Да нет.
Все остальные решения на рег. выражениях заметно проигрывали этому строковому , кроме решения от dwerf.

OffTopic:
А ведь вроде задача-то была тривиальная. А оказаалось ...
А сколько времени было потрачено на нахождение решения (Если сложить время всех участников ?)
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
gregaz
я вот что имею в виду:

Особенно полезны регулярные выражения в программах, написанных на скриптовых (интерпретируемых) языках, например, VBScript, JScript и Perl. Из-за того, что весь их код интерпретируется, разбор текстовых строк и выражений выполняется неприемлемо медленно. Применение регулярных выражений дает значительное увеличение производительности, поскольку библиотеки, интерпретирующие регулярные выражения, обычно пишутся на низкоуровневых высокопроизводительных языках (С, С++, Assembler).

http://www.rsdn.ru/article/alg/regular.xml
 

Dreadfulangel

Знающий
Сообщения
19
Репутация
11
Ещё одно элегантное решение найдено в книге Дж.Фридла "Регулярные выражения"

Код:
Func _TabNum0($tn)
    Return StringRegExpReplace($tn, '(?<=\d)(?=(\d{3})+\z)', ' ')
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
OffTopic:
Эту классную тему надо бы перенести в раздел
Регулярные выражения и прочее
;)
 
Верх