crossplatform.ru

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


  Ответ в QRegExp
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
eldar85 Дата 2.5.2010, 13:32
  все, разобрался. это косяк в коде был))) я в rx помещал предыдущую фразу которая дублировалась в тексте, поэтому два раза выводил одно и тоже число))
eldar85 Дата 2.5.2010, 9:07
  да вот такой вариант работает как нужно
QRegExp rx("(\\d+)");
 QString str = "Offsets: 12 14 99 231 7";
 QStringList list;
 int pos = 0;

 while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(1);
     pos += rx.matchedLength();
 }
qDebug << list;

но есть одно но, почему то он все выпарсивает в двух экзэмплярах, тоесть я делаю qDebug << list; и он выврдит так
"10","10", "11","11", "12","12", "13","13", "14","14" не подскажете из за чего??

даже не два а три экзэмпляра выдает))
"10","10", "10" ..............................

даже так - то два то три экзэмпляра выдает... капец, так вообще не катит... не въеду как убрать то это все...
eldar85 Дата 1.5.2010, 22:23
  я тоже так думаю, так будет проще и думаю более правильно... блин еще не успел попробывать код этот, работы много)) ща буду пробывать, спасибо вам за советы)))
Litkevich Yuriy Дата 1.5.2010, 12:02
 
Цитата(eldar85 @ 1.5.2010, 3:20) *
а мне нужно выпарсить их в разные переменные и уже потом с ними дальше работать...
может тогда тебе будет удобнее помещать фрагменты в список строк (QStringList), потом вытащишь построчно.
eldar85 Дата 30.4.2010, 23:20
  но так он не поместит найденное в разные QString ... тут будет все помещенно в один outtext же если я правельно понял... а мне нужно выпарсить их в разные переменные и уже потом с ними дальше работать...

может что то типа этого
QRegExp rx("(\\d+)");
 QString str = "Offsets: 12 14 99 231 7";
 QStringList list;
 int pos = 0;

 while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(1);
     pos += rx.matchedLength();
 }


это тоже из документации... ща попробую и отпешусь...
Litkevich Yuriy Дата 30.4.2010, 22:47
 
Цитата(BRE @ 1.5.2010, 0:45) *
переменную pos.
разве?
А по моему он сравнивает результат работы оператора присваивания с минус единицей.

вот мой код:
int pos = 0;
int mch = 0;
int capcnt = 0;
while (pos >= 0)
{
    pos = rx.indexIn(text, pos);

    mch = rx.matchedLength();
    
    if(mch > 0)
    {
        capcnt++;
        outtext->setPlainText(outtext->toPlainText()+rx.cap(0)+"\r\n");
    }

    pos += mch;
    if (!pos) break;
}
Выдрано с мясом, косточки не глотать!

Цитата(Litkevich Yuriy @ 1.5.2010, 2:43) *
А по моему он сравнивает результат работы оператора присваивания с минус единицей.
хм, хотя результат и будет равен переменной pos
eldar85 Дата 30.4.2010, 22:40
  даже я ошибся, он мне находит последний из нужного, не 10 а 14)) а нужно еще найти 13, 12, 11 и 10)))) вот так ))

как то в bost делал что то подобное, но не помню как...
eldar85 Дата 30.4.2010, 21:45
  ага, так а как тогда сделать то??? получается тут идет условие - пока pos не равно -1, но это же просто копирование строки в переменную f, по идее все правильно))
мне нужно вот так:
QString f;
QString c;
QString d;
......

    QRegExp rx(str);


             int pos = 0;

             while ((pos = rx.indexIn(xStr, pos)) != -1)
             {
                 f =rx.cap(1); // тут присваивается f 10
                                    //и я хотел остальным Qstring ам присвоить 11, 12, 13, 14 соответственно..
                 с = rx.cap(2); //может так?? но так я пробывал, ничего там не находиться, а находит тольско это f =rx.cap(1) остальное все пустое
                 pos += rx.matchedLength();
             }
    
    qDebug() << f;

пулучается он первое нашел 10 и поместил в QString f это 10. так вот мне нужно например чтобы я мог так
Qstrind f было равно 10
Qstring с было равно 11
Qstring в было рано 12 и так далее))
BRE Дата 30.4.2010, 20:45
 
Цитата(eldar85 @ 30.4.2010, 21:20) *
если честно не могу и в правду понять что я там сравниваю...

переменную pos. :)
eldar85 Дата 30.4.2010, 20:20
  блин, не знаю, я этот пример взял из документации))
если честно не могу и в правду понять что я там сравниваю...
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 5:48