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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вырезка из файла цифр  (Прочитано 3519 раз)
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, такое ощущение что он проверяет только одну первую строку! Где я ошибся, помогите?
« Последнее редактирование: Июнь 21, 2009, 15:57 от pastor » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июнь 21, 2009, 11:59 »

Ты про регекспы слышал? А про int QString::indexOf? В общем читай в ассистенте про QString.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
spectre71
Гость
« Ответ #2 : Июнь 21, 2009, 12:55 »

при запуске он выводит результат: 25, а должно быть 200, такое ощущение что он проверяет только одну первую строку! Где я ошибся, помогите?
Конечно лучше разобрать с помощью регулярных выражений, но это не так принципиально.
Пройдись в дебаггере и посмотри. Если нет дебаггера  кидай инфу в stduot.
Записан
eternity
Гость
« Ответ #3 : Июнь 21, 2009, 14:07 »

Можно еще использовать split
Например,
есть строка str: milk|25|21.06.09
QStringList sl=str.split("|");

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

Вообщем можно это использовать, бывает оч удобно Улыбающийся
Записан
kadr
Гость
« Ответ #4 : Июнь 22, 2009, 08:46 »

Да с помощью split-a я гараздо сократил код, спасибо за помощь.  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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