Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ixtorio от Апрель 15, 2011, 18:23



Название: RegExp
Отправлено: ixtorio от Апрель 15, 2011, 18:23
подскажите литературу где описывается как выдрать из с троки определённые данные на Qt тобишь работа с выражениями  либо дайте исходничек плиз=)гуглил и нашел только как проверить правильность данных , мнеже надо выдрать из определённой строки определённую строку ..буду премного благодарен


Название: Re: RegExp
Отправлено: blood_shadow от Апрель 15, 2011, 19:00
подскажите литературу где описывается как выдрать из с троки определённые данные на Qt тобишь работа с выражениями  либо дайте исходничек плиз=)гуглил и нашел только как проверить правильность данных , мнеже надо выдрать из определённой строки определённую строку ..буду премного благодарен
а ассистант что отменяется?
там написано как выдрать -> QRegExp -> Capturing Text


Название: Re: RegExp
Отправлено: ixtorio от Апрель 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);
 


Название: Re: RegExp
Отправлено: mutineer от Апрель 15, 2011, 23:55
Используй QString вместо char*


Название: Re: RegExp
Отправлено: ixtorio от Апрель 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);
 


Название: Re: RegExp
Отправлено: mutineer от Апрель 16, 2011, 00:02
textEdit у тебя какого типа?
И зачем ты перебираешь все из list, если сохраняешь в итоге только последний элемент?


Название: Re: RegExp
Отправлено: ixtorio от Апрель 16, 2011, 00:03
это я тестирую =) всё работает зы


Название: Re: RegExp
Отправлено: mutineer от Апрель 16, 2011, 00:04
Если textEdit это QTextEdit, то у него есть
Код:
void QTextEdit::append ( const QString & text )


Название: Re: RegExp
Отправлено: ixtorio от Апрель 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


Название: Re: RegExp
Отправлено: mutineer от Апрель 16, 2011, 00:09
А что выводится вместо этого?


Название: Re: RegExp
Отправлено: ixtorio от Апрель 16, 2011, 00:10
только первое


Название: Re: RegExp
Отправлено: mutineer от Апрель 16, 2011, 00:21
Код:
QString str = "твоя строка";
int pos = 0;
 while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(0);
     pos += rx.matchedLength();
 }

Попробуй что-то типа такого для заполнения list


Название: Re: RegExp
Отправлено: ixtorio от Апрель 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);
    }
 


Название: Re: RegExp
Отправлено: mutineer от Апрель 16, 2011, 01:08
нет у меня щас компила под рукой. Можешь сказать что получается?


Название: Re: RegExp
Отправлено: ixtorio от Апрель 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);
    }