crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
larry
  опции профиля:
сообщение 18.9.2013, 8:57
Сообщение #1


Студент
*

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

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




Репутация:   0  


Добрый день, форумчане. У меня возникла проблема с составлением регулярного выражения для поиска подстроки в конфиге...Конфиг имеет следующий вид:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<#----------GPRS---------#\r\n
Необходимо найти и отсечь:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<
Я написал следующее выражение: ^AT#RSCRIPT=[A-Za-z0-9]+\\.[A-Za-z]+\\r\\n+<* и проверил в notepad++, а вот в программе это не работает...перепробовал разные варианты...проблема в знаке #...Как правильно его экранировать? Сколько не пробовал разных вариантов, но работы не смог добиться.
P.S. \r\n - специальные символы перевода строки. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 18.9.2013, 10:07
Сообщение #2


Студент
*

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

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




Репутация:   0  


извините за беспокойство...уже решил эту проблему...произошло по невнемательности. Я данный конфиг принимаю от прибора по uart и не учел, что прибор отдает информацию частями, а не целиком, поэтому когда я искал шапку, то она в лучшем случае состояла из двух частей :lol: . Теперь проверку произожу после приема всех данных...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 18.9.2013, 10:17
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(larry @ 18.9.2013, 9:57) *
проблема в знаке #...Как правильно его экранировать?

Я не вижу проблемы с #. Проблема в квантификаторе для "\r\n".
Вместо
"\\r\\n+<*" должно быть
"(\\r\\n)+<*"
Вот так работает:
int main(int argc, char *argv[])
{
    QRegExp re("^AT#RSCRIPT=[A-Za-z0-9]+\\.[A-Za-z]+(\\r\\n)+<*");
    QString str = "AT#RSCRIPT=Config.ini\r\n"
            "\r\n"
            "<<<#----------GPRS---------#\r\n";

    qDebug() << str;
    qDebug() << "** Result ******************************";
    qDebug() << str.remove(re);
}

"AT#RSCRIPT=Config.ini

<<<#----------GPRS---------#
" 
** Result ****************************** 
"#----------GPRS---------#
"




Цитата(larry @ 18.9.2013, 11:07) *
извините за беспокойство...уже решил эту проблему...произошло по невнемательности. Я данный конфиг принимаю от прибора по uart и не учел, что прибор отдает информацию частями, а не целиком, поэтому когда я искал шапку, то она в лучшем случае состояла из двух частей :lol: . Теперь проверку произожу после приема всех данных...

Возможно проще не регекспами выкусывать, а скипать 2 (или 3) первых строки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 18.9.2013, 11:06
Сообщение #4


Студент
*

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

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




Репутация:   0  


сейчас я уже сделал, просто проверяю данные при приеме на конец данных - ОК и если еще нет конца, то перезаписываю в буфер, а по окончании уже все работает нормально. Спасибо.

Сообщение отредактировал larry - 18.9.2013, 11:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 18.9.2013, 14:56
Сообщение #5


Студент
*

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

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




Репутация:   0  


Дабы не гадить на форуме :lol: , напишу здесь...Суть вопроса в следующем: есть устройство, которое подключено к ПК. Обмен информацией осуществляется посредством АТ-команд. На устройстве есть питоновские скрипты. Можно получить список файлов, с этим я уже боролся и сейчас получилось выводить все файлы как мне нужно. Теперь мне необходимо сохранять скрипты на ПК, но встретил трудность...если это файл конфига, т.е. он текстовый, то записать данные в файл нет проблем, но если выбран скрипт с расширение .pyo (байткод), то возникают проблемы с его считыванием и сохранением на ПК. Изначально я использую QString, и здесь с конфигами проблем нет, хотел переделать под QByteArray, но не знаю как реализовать разбор файла, т.к. там необходимо вырезать служебную информацию...вырезаю регулярными выражениями в QString, а вот в QByteArray как я понял нельзя работать с регулярными выражениями. Или я ошибаюсь? Подскажите пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.9.2013, 21:14
Сообщение #6


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

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

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




Репутация:   94  


larry, создай отдельную тему.
Последний вопрос не соответствует заголовку этой темы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 20.9.2013, 7:55
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 19.9.2013, 21:14) *
larry, создай отдельную тему.
Последний вопрос не соответствует заголовку этой темы.

Спасибо, создам.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.6.2025, 0:40