Название: вопрос по QRegExp Отправлено: izoomer от Ноябрь 21, 2006, 00:40 получаю строку из stdout вида
10%:in progress нужно в отделить в разные QString число процентов (число перед знаком процентов)и текст после двоеточия. ДУмаю легче всего с помощью регулярных выражений и QRegExp , но не знаю как. Подскажите как сделать в QT-4.2 такое. добавлено спустя 2 часа 8 минут: вот выражение которое работает в приложении $QTDIR/examples/tools/regexep/regexp и код его использующий: Код:
[code] qDebug << value << text [/сщву] выводит пустые места что не так ? Название: вопрос по QRegExp Отправлено: Вудруф от Ноябрь 21, 2006, 08:27 В данном случае можно обойтись без QRegExp. Пусть полученная строка хранится в std::string str.
1. Просто вводим число. std::string::size_type idx1 = str.find_first_of ("1234567890"); std::string::size_type idx2 = str.find_first_not_of ("1234567890", idx1); std::istrstream input (str.substr (idx1, idx2 - idx1)); unsigned int x; input >> x; 2. Получаем текст после запятой. std::string text = str.substr (str.find (':', idx2) + 1); Можно гораздо локаничнее, но так (как мне кажется) получается эффективнее. Название: вопрос по QRegExp Отправлено: GqRun от Ноябрь 21, 2006, 10:39 Проще всего, ИМХО, воспользоваться методом section( const QString & sep, int start, int end = -1, SectionFlags flags = SectionDefault ) класса QString.
Название: вопрос по QRegExp Отправлено: izoomer от Ноябрь 21, 2006, 11:19 ну а если по моему примеру (по моему более компактно), почему регексы не работают?
добавлено спустя 13 минут: не работают потому как надо в выражении регулярном откидывать знак перевода строки. Подскажите как откинуть конец строки в объекте QString . Название: вопрос по QRegExp Отправлено: Вудруф от Ноябрь 21, 2006, 12:19 Использование section потребует 2-х проходов строки. Предложеный мною способ - один.
Кроме того, в моём случае игнорируются пробелы перед и после числа. При отсутствии пробелов код можно сократить до: Код:
Название: вопрос по QRegExp Отправлено: Sergeich от Ноябрь 21, 2006, 14:47 Код: QString source,value,text; Должно работать. Не используй stdout в качестве имени переменной, stdout - в стандартной библиотеке дескриптор файла! Название: вопрос по QRegExp Отправлено: izoomer от Ноябрь 21, 2006, 18:57 все таки лучше с регулярными выражениями.
Работает.Спасибо всем. |