Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Zeka13 от Март 11, 2012, 18:05



Название: игнорирование ненужных строк в потоке[РЕШЕНО]
Отправлено: 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();
Хочу в начале файла, добавить "комментарии" вида
#комент
#что-то там
данные в два столбика...

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

Заранее спасибо за внимание


Название: Re: игнорирование ненужных строк в потоке
Отправлено: mutineer от Март 11, 2012, 18:53
проверять первый символ, если это #, то переходить к следующей строке


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Syveren от Март 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();



Название: Re: игнорирование ненужных строк в потоке
Отправлено: Syveren от Март 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();


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Zeka13 от Март 11, 2012, 21:04
спасибо большое, но к сожалению не работает, накатать вам коротенькую программу для проверки?
программа компилируется, но массивы не заполняются


Название: Re: игнорирование ненужных строк в потоке
Отправлено: mutineer от Март 11, 2012, 21:13
накатать вам коротенькую программу для проверки?

А сам подебажить хоть немного не хочешь?


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Zeka13 от Март 11, 2012, 22:04
подебажил!
Работает, но только при условии, если в файле одна строка начинается с #, если две, то уже не пашет!


Название: Re: игнорирование ненужных строк в потоке
Отправлено: mutineer от Март 11, 2012, 22:06
Ну если не можешь понять почему, то давай код


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Zeka13 от Март 12, 2012, 08:07
выложил сам проект и файл с данными для проверки


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Syveren от Март 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();


Название: Re: игнорирование ненужных строк в потоке
Отправлено: Zeka13 от Март 12, 2012, 18:18
спасибо огромное, всё работает!
буду разбираться с этими манипуляциями