Russian Qt Forum
Ноябрь 27, 2024, 05:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 8 9 [10] 11 12 ... 18   Вниз
  Печать  
Автор Тема: Регулярное выражение с QString  (Прочитано 161603 раз)
Spark
Гость
« Ответ #135 : Июль 29, 2013, 18:11 »

"... а ещё я крестиком вышивать умею.."

И вновь возвёл очи к небу..
Я механик и действительно много чего умею. Ну например реставрировать машину и покрасить.
Сами напросились.
Та неужели?  Улыбающийся
Не медленнее чем у участников соревнования, в рамках QT.
В любом случае самое тонкое место:
Код
C++ (Qt)
itemList = originalText.split(QRegExp("[^a-z]"),QString::SkipEmptyParts);
И это присутствует у всех. Поэтому соревнования как таковые в общем то бессмысленны, опять же в рамках QT.
Если приспичит то надо пробовать иные способы разделения текста. Но в общем то это уже больше ради спортивного интереса. Если кому и придет  в голову обрабатывать такие объемы, то подождет 15 секунд.
Другое дело - у меня тормозит вывод на экран. Но это придется разбираться с чужой функцией, что не так и можно ли улучшить.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #136 : Июль 29, 2013, 18:23 »

Я механик и действительно много чего умею. Ну например реставрировать машину и покрасить.
Ну вот и делайте то что умеете. Я напр очень люблю слушать музыку, но не обладаю слухом и чувством ритма. Ну я же не пытаюсь доказать другим что я "тоже музыкант"  Улыбающийся
Записан
Majestio
Гость
« Ответ #137 : Июль 29, 2013, 18:27 »

Погоняйте, погоняйте)

Получите и распишитесь! 



Смеющийся

Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #138 : Июль 29, 2013, 18:32 »

Мне показалось, или вы сравниваете результаты с debug версией?
Надо в релизе тесты гонять  Подмигивающий
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Majestio
Гость
« Ответ #139 : Июль 29, 2013, 19:03 »

Мне показалось, или вы сравниваете результаты с debug версией?
Надо в релизе тесты гонять  Подмигивающий

Да не, все равно какая-то мистика ... см. под маком:



Хотя компиляторы разные, под Mac OS X - Clang, но все равно...
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #140 : Июль 29, 2013, 19:06 »

Нет там никакой мистики..
А под виндой в релизе какие результаты?

Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Majestio
Гость
« Ответ #141 : Июль 29, 2013, 19:11 »

Нет там никакой мистики..
А под виндой в релизе какие результаты?
Щя повторю тест под вынью...Под релизом.
Записан
Majestio
Гость
« Ответ #142 : Июль 29, 2013, 19:17 »

Вот под вынью под релизом:



Первые два запуска с опцией С++11, в третьем на всяк случай выключил.
Да быстрее - но под маком все равно в 2.5 раза быстрее.
Перл везде показывает стабильные цифры, на скринах видно.
Записан
Majestio
Гость
« Ответ #143 : Июль 29, 2013, 19:36 »

Линух ваще удивил:



Хотя Perl - как всегда быстро и стабильно  Смеющийся

Лан, забиваю с экспериментами ... что хотел сказать про регулярки и их "естественное" использование - я сказал.  Крутой

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #144 : Июль 29, 2013, 19:41 »

Хотя Perl - как всегда быстро и стабильно  Смеющийся
Перл быстр, потому что работает с UTF8, в отличие от нас.
Хотя посмотрел тестовый файл - там все на кириллице, коды их в unicode помещаются в short, то на то и выходит.
« Последнее редактирование: Июль 29, 2013, 20:01 от Old » Записан
Majestio
Гость
« Ответ #145 : Июль 29, 2013, 20:00 »

Перл быстр, потому что работает с UTF8, в отличие от нас.

Ну я попробовал прописывать "кодеки", типа:

Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
 

Легче не стало ... (под вынь)

Old:    9578 15211
Majestio:    12047 15211



Вдогоночку ....

Изменил кодировку под win-1251 ...

Old:    8985 247
Majestio:    11593 247
Perl: 3312 15211

Ну вот кагбэ так  Строит глазки
« Последнее редактирование: Июль 29, 2013, 20:06 от Majestio » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #146 : Июль 29, 2013, 20:06 »

Ну я попробовал прописывать "кодеки"
Дело не в этом, QString всегда хранит строку в unicode, а это минимум 16 бит на символ, а так и все 32 бита. А в utf8 латинские символы занимают 8 бит, а кириллица 16 бит.
Т.е. если бы в тексте было много латиницы, то перлу пришлось бы меньше молотить.
Записан
Majestio
Гость
« Ответ #147 : Июль 29, 2013, 20:07 »

Ну я попробовал прописывать "кодеки"
Дело не в этом, QString всегда хранит строку в unicode, а это минимум 16 бит на символ, а так и все 32 бита. А в utf8 латинские символы занимают 8 бит, а кириллица 16 бит.
Т.е. если бы в тексте было много латиницы, то перлу пришлось бы меньше молотить.

См. мой тест с 8-битной кодировкой выше.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #148 : Июль 29, 2013, 20:10 »

См. мой тест с 8-битной кодировкой выше.
Это никак не меняет кодировку внутри QString, там по прежнему unicode.
Записан
Majestio
Гость
« Ответ #149 : Июль 29, 2013, 20:30 »

См. мой тест с 8-битной кодировкой выше.
Это никак не меняет кодировку внутри QString, там по прежнему unicode.

Меняет способ. И, по идее, ускоряет (что и видно по последнему тесту).
Из доки:

Цитировать
QString хранит строку 16-битных QChar, где каждый QChar хранит символ Unicode 4.0.

UTF-8 "неудобно" обрабатывается, т.к. - это кодировка с переменной длиной символа. Предоставляя текст в win-1251, даем возможность компилятору и фреймворку тупо проецировать любой индекс строки - как двойное смещение отностиельно однобайтного способа кодирования.

А вот почему перл выигрывает - это как раз по другой причине ))) Внимательно сравните два кода Ц++ и Perl, и примите во внимание что регэкспы для Перла - это стандарт языка, а не внешняя либа. И наверняка станет понятно  Показает язык Готов подсказать  Показает язык



Записан
Страниц: 1 ... 8 9 [10] 11 12 ... 18   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 23.