Russian Qt Forum

Qt => Общие вопросы => Тема начата: kadr от Июнь 21, 2009, 11:36



Название: вырезка из файла цифр
Отправлено: kadr от Июнь 21, 2009, 11:36
Помогите решить проблему с вырезкой из файла цифр, а точнее цены. Имеется фаил в котором содержиться текст:

milk|25|21.06.09
coffe|100|21.06.09
bread|15|21.06.09
buter|30|21.06.09
eggs|30|21.06.09

Надо что бы программа вырезала цену, точнее то что в |этих скобках|, и суммировали все цифры между собой, а в конце выводили результат, вот код:

Код
C++ (Qt)
QFile file2 ("tovars.txt");
   if (!file2.open(QIODevice::ReadOnly | QIODevice::Text))
         return;
   while (!file2.atEnd())
   {
       line2 = file2.readLine();
       line2 = line2.trimmed();
 
       while (line2[k]!='|')
           {
             k++;
           }
 
       sleva = k+1;
       k = line2.length();
 
       while (line2[k]!='|')
           {
               k--;
               sc++;
           }
 
       sprava = sc;
       chena_len = line2.length()-sleva-sprava;
       str.clear();
       str.append(line2);
       str = str.remove(0,sleva);
       str = str.remove(chena_len,sprava);
       summ +=str.toLong();
   }
    str.setNum(summ);
    ui->allsum->setText(str);
    file2.close();

при запуске он выводит результат: 25, а должно быть 200, такое ощущение что он проверяет только одну первую строку! Где я ошибся, помогите?


Название: Re: вырезка из файла цифр
Отправлено: Пантер от Июнь 21, 2009, 11:59
Ты про регекспы слышал? А про int QString::indexOf? В общем читай в ассистенте про QString.


Название: Re: вырезка из файла цифр
Отправлено: spectre71 от Июнь 21, 2009, 12:55
при запуске он выводит результат: 25, а должно быть 200, такое ощущение что он проверяет только одну первую строку! Где я ошибся, помогите?
Конечно лучше разобрать с помощью регулярных выражений, но это не так принципиально.
Пройдись в дебаггере и посмотри. Если нет дебаггера  кидай инфу в stduot.


Название: Re: вырезка из файла цифр
Отправлено: eternity от Июнь 21, 2009, 14:07
Можно еще использовать split
Например,
есть строка str: milk|25|21.06.09
QStringList sl=str.split("|");

после этого переменная sl будет содержать список слов, а именно:
sl.value(0) это слово milk
sl.value(1) это слово 25

Вообщем можно это использовать, бывает оч удобно :)


Название: Re: вырезка из файла цифр
Отправлено: kadr от Июнь 22, 2009, 08:46
Да с помощью split-a я гараздо сократил код, спасибо за помощь.  :)