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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: RegExp  (Прочитано 5274 раз)
ixtorio
Гость
« : Апрель 15, 2011, 18:23 »

подскажите литературу где описывается как выдрать из с троки определённые данные на Qt тобишь работа с выражениями  либо дайте исходничек плиз=)гуглил и нашел только как проверить правильность данных , мнеже надо выдрать из определённой строки определённую строку ..буду премного благодарен
Записан
blood_shadow
Гость
« Ответ #1 : Апрель 15, 2011, 19:00 »

подскажите литературу где описывается как выдрать из с троки определённые данные на Qt тобишь работа с выражениями  либо дайте исходничек плиз=)гуглил и нашел только как проверить правильность данных , мнеже надо выдрать из определённой строки определённую строку ..буду премного благодарен
а ассистант что отменяется?
там написано как выдрать -> QRegExp -> Capturing Text
Записан
ixtorio
Гость
« Ответ #2 : Апрель 15, 2011, 23:48 »

обрабатываю строку выражением и поидее получаю результат ,но как его перевести в char* незнаю, вот сорец
Код
C++ (Qt)
    QRegExp rx("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
    int pos = rx.indexIn("Length: 36 inches 22.33.44.55:99 dfsf sdfdgs sdgsdg s4343 34534. 343434  // 43454.. ..344");
    QStringList list = rx.capturedTexts();
    char *prox;
    for (int i = 0; i < list.size(); i++)
      prox=list.at(i);
    ui->textEdit->append(prox);
 
Записан
mutineer
Гость
« Ответ #3 : Апрель 15, 2011, 23:55 »

Используй QString вместо char*
Записан
ixtorio
Гость
« Ответ #4 : Апрель 15, 2011, 23:59 »

ui->textEdit->append() непринемает QString
сделал так всё работает
Код
C++ (Qt)
    QRegExp rx("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
    int pos = rx.indexIn("Length: 36 inches 22.33.44.55:99 dfsf sdfdgs sdgsdg s4343 34534. 343434  // 43454.. ..344");
    QStringList list = rx.capturedTexts();
    const char *prox;
    for (int i = 0; i < list.size(); i++)
      prox=list.at(i).toLocal8Bit().constData();
    //ui->textEdit->append(prox);
    MessageBoxA(0, prox, prox, 0);
 
« Последнее редактирование: Апрель 16, 2011, 00:02 от ixtorio » Записан
mutineer
Гость
« Ответ #5 : Апрель 16, 2011, 00:02 »

textEdit у тебя какого типа?
И зачем ты перебираешь все из list, если сохраняешь в итоге только последний элемент?
Записан
ixtorio
Гость
« Ответ #6 : Апрель 16, 2011, 00:03 »

это я тестирую =) всё работает зы
Записан
mutineer
Гость
« Ответ #7 : Апрель 16, 2011, 00:04 »

Если textEdit это QTextEdit, то у него есть
Код:
void QTextEdit::append ( const QString & text )
Записан
ixtorio
Гость
« Ответ #8 : Апрель 16, 2011, 00:08 »

уменя на это выдало ошибку ...
теперь другая задача,почемуто невыводятся все похожие результаты,вот код
Код
C++ (Qt)
    QRegExp rx("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
    int pos = rx.indexIn("Length: 36 inches 22.33.44.55:99 dfsf sdfdgs sdgsdg s4343 34534. 343434 11.23.45.67:8888 // 43454.. ..344");
    QStringList list = rx.capturedTexts();
    const char *prox;
    for(int i = 0; i < list.size(); i++)
    {
       ui->textEdit->append(list.at(i).toLocal8Bit().constData());
       MessageBoxA(0, list.at(i).toLocal8Bit().constData(), "Caption", 0);
    }
 

должно вывести 22.33.44.55:99 и 11.23.45.67:8888
Записан
mutineer
Гость
« Ответ #9 : Апрель 16, 2011, 00:09 »

А что выводится вместо этого?
Записан
ixtorio
Гость
« Ответ #10 : Апрель 16, 2011, 00:10 »

только первое
Записан
mutineer
Гость
« Ответ #11 : Апрель 16, 2011, 00:21 »

Код:
QString str = "твоя строка";
int pos = 0;
 while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(0);
     pos += rx.matchedLength();
 }

Попробуй что-то типа такого для заполнения list
Записан
ixtorio
Гость
« Ответ #12 : Апрель 16, 2011, 00:56 »

не неработает,попробуй сам скомпиль ...

Код
C++ (Qt)
    QRegExp rx("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
    QString str = "Length: 36 inches 22.33.44.55:99 dfsf sdfdgs sdgsdg s4343 32.43.54.65:99 34534. 343434 11.23.45.67:8888 // 43454.. ..344";
    QStringList list;
    int pos = 0;
    while ((pos = rx.indexIn(str, pos)) != -1) {
         list << rx.cap(0);
         pos += rx.matchedLength();
    }
 
    for(int i = 0; i < list.size(); i++)
    {
       ui->textEdit->append(list.at(i).toLocal8Bit().constData());
       MessageBoxA(0, list.at(i).toLocal8Bit().constData(), 0, 0);
    }
 
« Последнее редактирование: Апрель 16, 2011, 01:00 от ixtorio » Записан
mutineer
Гость
« Ответ #13 : Апрель 16, 2011, 01:08 »

нет у меня щас компила под рукой. Можешь сказать что получается?
Записан
ixtorio
Гость
« Ответ #14 : Апрель 16, 2011, 01:09 »

сори я прогнал уменя было два одинаковых значения в строке , видать я чето намудрил когда редактировал,щас всё нормально вот сорец
Код
C++ (Qt)
    QRegExp rx("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\:\\d{1,5}");
    QString str = "Length: 36 inches 22.33.44.55:99 dfsf sdfdgs sdgsdg s4343 99.00.99.77:99 34534. 343434 11.23.45.67:8888 // 43454.. ..344";
    QStringList list;
    int pos = 0;
    while ((pos = rx.indexIn(str, pos)) != -1) {
         list << rx.cap(0);
         pos += rx.matchedLength();
    }
    for(int i = 0; i < list.size(); i++)
    {
       ui->textEdit->append(list.at(i).toLocal8Bit().constData());
       MessageBoxA(0, list.at(i).toLocal8Bit().constData(), 0, 0);
    }
 
« Последнее редактирование: Апрель 16, 2011, 01:11 от ixtorio » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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