crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как распарсить строку?
RazrFalcon
  опции профиля:
сообщение 28.5.2011, 19:35
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Есть QString. Туда копируется вывод консольной утилиты через QProcess. Мне нужно в этой длинной строке найти, в моем случае, частоту ЦП.
Как это реализовать?

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

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

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


PS: нужен аналог grep

Сообщение отредактировал RazrFalcon - 28.5.2011, 19:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 8)
Litkevich Yuriy
  опции профиля:
сообщение 28.5.2011, 19:58
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(RazrFalcon @ 28.5.2011, 22:35) *
нужен аналог grep
а он как частоту процессора находит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 28.5.2011, 20:07
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


да нет :lol:
я имел ввиду вот что:
cpufreq-info | grep -oe '[0-9].*GHz'
Как тот так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.5.2011, 20:11
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(RazrFalcon @ 28.5.2011, 23:07) *
Как тот так.
и что все эти символы значат?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.5.2011, 20:53
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


сдаётся мне, что это и есть нужная регулярка )

[0-9].*GHz
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 28.5.2011, 22:01
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Это я к примеру написал.

Суть в том, что в тексте есть <тут текст> 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+.*"));

На счет скорости не знаю. Интересует более красивое/рациональное решение.

Сообщение отредактировал RazrFalcon - 28.5.2011, 23:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vankleef
  опции профиля:
сообщение 29.5.2011, 1:35
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


извиняюсь за "на скорую руку", поздно, голова еле варит)

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
  опции профиля:
сообщение 29.5.2011, 1:42
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Ухты! О таком варианте даже не догадывался. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vankleef
  опции профиля:
сообщение 29.5.2011, 14:52
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


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


в ассистанте неплохие примеры =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 3:10