Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как распарсить строку?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
RazrFalcon
Есть QString. Туда копируется вывод консольной утилиты через QProcess. Мне нужно в этой длинной строке найти, в моем случае, частоту ЦП.
Как это реализовать?

В голову приходит только разбиение по словам, ака split(" "), а затем каждое слово в QStringList сравнивать на наличие GHz/MHz и тд. Но это будет долговато.

Можно через remove(); удалить все до частоты, и после, но это не очень точно, так как теоретически, значения до/после могут изменится.

Какой вариант самый оптимальный? Скорость работы критична.


PS: нужен аналог grep
Litkevich Yuriy
Цитата(RazrFalcon @ 28.5.2011, 22:35) *
нужен аналог grep
а он как частоту процессора находит?
RazrFalcon
да нет :lol:
я имел ввиду вот что:
cpufreq-info | grep -oe '[0-9].*GHz'
Как тот так.
Litkevich Yuriy
Цитата(RazrFalcon @ 28.5.2011, 23:07) *
Как тот так.
и что все эти символы значат?
Алексей1153
сдаётся мне, что это и есть нужная регулярка )

[0-9].*GHz
RazrFalcon
Это я к примеру написал.

Суть в том, что в тексте есть <тут текст> 1.90GHz <тут текст>.
Мне нужно вычленить это значение. При том, что то, что до и то что после - мне известно, и оно постоянно.

Пример:
Раскрывающийся текст
$ cpufreq-info
cpufrequtils 008: cpufreq-info © Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: powernow-k8
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0 1
maximum transition latency: 109 us.
hardware limits: 800 MHz - 1.90 GHz
available frequency steps: 1.90 GHz, 1.80 GHz, 1.60 GHz, 800 MHz
available cpufreq governors: conservative, performance
current policy: frequency should be within 800 MHz and 1.90 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.90 GHz.
analyzing CPU 1:
driver: powernow-k8
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0 1
maximum transition latency: 109 us.
hardware limits: 800 MHz - 1.90 GHz
available frequency steps: 1.90 GHz, 1.80 GHz, 1.60 GHz, 800 MHz
available cpufreq governors: conservative, performance
current policy: frequency should be within 800 MHz and 1.90 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.90 GHz.

Отсюда нужно выдрать частоту:
current CPU frequency is 1.90 GHz.

Пока что только так работает:
qDebug()<<infoStr.remove(QRegExp(".*frequency is ")).remove(QRegExp(" \\..*")).remove(QRegExp("\\.\\s+.*"));

На счет скорости не знаю. Интересует более красивое/рациональное решение.
vankleef
извиняюсь за "на скорую руку", поздно, голова еле варит)

QString str("cpufrequtils 008: cpufreq-info © Dominik Brodowski 2004-2009\nReport errors and bugs to cpufreq@vger.kernel.org, please.\nanalyzing CPU 0:\n driver: powernow-k8\n CPUs which run at the same hardware frequency: 0 1\n CPUs which need to have their frequency coordinated by software: 0 1\n maximum transition latency: 109 us.\n hardware limits: 800 MHz - 1.90 GHz\n available frequency steps: 1.90 GHz, 1.80 GHz, 1.60 GHz, 800 MHz\n available cpufreq governors: conservative, performance\n current policy: frequency should be within 800 MHz and 1.90 GHz.\n The governor performance may decide which speed to use\n within this range.\n current CPU frequency is 1.90 GHz.\nanalyzing CPU 1:\n driver: powernow-k8\n CPUs which run at the same hardware frequency: 0 1\n CPUs which need to have their frequency coordinated by software: 0 1\n maximum transition latency: 109 us.\n hardware limits: 800 MHz - 1.90 GHz\n available frequency steps: 1.90 GHz, 1.80 GHz, 1.60 GHz, 800 MHz\n available cpufreq governors: conservative, performance\n current policy: frequency should be within 800 MHz and 1.90 GHz.\n The governor performance may decide which speed to use\n within this range.\n current CPU frequency is 1.90 GHz.");

QRegExp rx("[current CPU frequency is ]\\d+\\.\\d+[ GHz]{1}");
rx.indexIn(str);
qDebug()<<rx.cap(0);

RazrFalcon
Ухты! О таком варианте даже не догадывался. Спасибо.
vankleef
Цитата(RazrFalcon @ 29.5.2011, 2:42) *
Ухты! О таком варианте даже не догадывался. Спасибо.


в ассистанте неплохие примеры =)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.