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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: игнорирование ненужных строк в потоке[РЕШЕНО]  (Прочитано 4795 раз)
Zeka13
Гость
« : Март 11, 2012, 18:05 »

Заполняю два массива из файла, всё работает, пример файла, из которого заполняю
http://paste.ubuntu.com/878986/

1ый столбил массив plot, второй KMOS

    
Код:
QFile file(str);
    file.open(QIODevice::ReadWrite | QIODevice::Text);
    QTextStream out(&file);
    int i; //счётчик
    for (i=0; i < amountOfData; i++)
    out >> plot[i] >> KMOS[i];
    file.close();
Хочу в начале файла, добавить "комментарии" вида
#комент
#что-то там
данные в два столбика...

Вопрос: как мне при заполнение массивов проигнорировать эти строки, начинающиеся с #?

Заранее спасибо за внимание
« Последнее редактирование: Март 12, 2012, 18:18 от Zeka13 » Записан
mutineer
Гость
« Ответ #1 : Март 11, 2012, 18:53 »

проверять первый символ, если это #, то переходить к следующей строке
Записан
Syveren
Гость
« Ответ #2 : Март 11, 2012, 19:09 »

Как - нить так можно:

Код
C++ (Qt)
QFile file(str);
file.open(QIODevice::ReadWrite | QIODevice::Text);
QTextStream out(&file);
int i;  
for (i=0;!out.atEnd() && i < amountOfData; )
{
 QString line = out.readLine();
 if(line.startWith('#'))
    continue;
 
 plot[i] = line.left(line.indexOf(' ')); // тут лучше проверить: сделано на глаз
 KMOS[i] = line.right(line.length() - line.lastIndexOf(' ')); // и тут, но смысл должен быть ясен
 i++;
}
file.close();

« Последнее редактирование: Март 11, 2012, 19:18 от Syveren » Записан
Syveren
Гость
« Ответ #3 : Март 11, 2012, 19:13 »

либо можно так.
Вроде должно работатЬ)
Код
C++ (Qt)
QFile file(str);
file.open(QIODevice::ReadWrite | QIODevice::Text);
QTextStream out(&file);
int i;  
for (i=0; !out.atEnd() && i < amountOfData; )
{
 if(file.peek(1)=="#"){
    out.readLine();
    continue;
}
 out >> plot[i] >> KMOS[i];
 ++i;
 
}
file.close();
Записан
Zeka13
Гость
« Ответ #4 : Март 11, 2012, 21:04 »

спасибо большое, но к сожалению не работает, накатать вам коротенькую программу для проверки?
программа компилируется, но массивы не заполняются
Записан
mutineer
Гость
« Ответ #5 : Март 11, 2012, 21:13 »

накатать вам коротенькую программу для проверки?

А сам подебажить хоть немного не хочешь?
Записан
Zeka13
Гость
« Ответ #6 : Март 11, 2012, 22:04 »

подебажил!
Работает, но только при условии, если в файле одна строка начинается с #, если две, то уже не пашет!
Записан
mutineer
Гость
« Ответ #7 : Март 11, 2012, 22:06 »

Ну если не можешь понять почему, то давай код
Записан
Zeka13
Гость
« Ответ #8 : Март 12, 2012, 08:07 »

выложил сам проект и файл с данными для проверки
Записан
Syveren
Гость
« Ответ #9 : Март 12, 2012, 11:06 »

Видимо нельзя совместно использвоать file и textStream, а этот пример чем не подошёл. Cейчас проверил - всё работает
Код
C++ (Qt)
 
for (i=0;!out.atEnd() && i < amountOfData; )
  {
    QString line = out.readLine();
    if(line.startsWith('#'))
       continue;
    plot[i] = line.left(line.indexOf(' ')).toDouble();
    KMOS[i] = line.right(line.length() - line.lastIndexOf(' ')).toDouble();
    i++;
  }
Либо нужно использовать только QTextStream. Считывать символ - out.read(1) , если равен #, то out.readLine() и continue;
иначе вернуться на одну позиция назад out.seek(out.pos()-1);
out  >> plot >> KMOS;
out.readLine();
« Последнее редактирование: Март 12, 2012, 12:17 от Syveren » Записан
Zeka13
Гость
« Ответ #10 : Март 12, 2012, 18:18 »

спасибо огромное, всё работает!
буду разбираться с этими манипуляциями
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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