2015-03-03 124 views
0

我正在编写一个程序,该程序读取制表符分隔双精度的文本文件,并总结每列,从而有效地计算每列的积分。Qt读取制表符分隔文本文件的特定列

我希望能够做的是选择一个特定的列来总结而不是总和所有的列。

我已经有工作了所有列的积分代码:

void MainWindow::on_pushButton_clicked() 
{ 


    data::SingleLineData.resize(512); 
    QString test; 
    QString inputfile = QFileDialog::getOpenFileName(
       this, 
       tr("Open File"), 
       "/Users", 
       "All files (*.*)" 
       ); 

    if(inputfile != ""){ 
    QFile file(inputfile); 


    if(!file.open(QFile::ReadOnly)){ 
     } 
    QTextStream in(&file); 


     double buffer; 

     while(!file.atEnd()){ 
      in.readLine(); 
      for(int i=0; i<512; i++){ 
       in >> buffer; 
       data::SingleLineData[i]+=buffer; 
      } 
     } 

    } 
     qDebug() << data::SingleLineData; 
// ************* file output ************************************************** 

     QString filename = QFileDialog::getSaveFileName(
        this, 
        tr("Save File"), 
        "/Users", 
        "Text files (*.txt)" 
        ); 
     QFile fileout(filename); 
     if (fileout.open(QFile::ReadWrite | QFile::Truncate)){ 
     QTextStream out(&fileout); 
     for (QVector<double>::iterator iter = data::SingleLineData.begin(); iter != data::SingleLineData.end(); iter++){ 
      out << *iter <<", "; 
     } 
     fileout.close(); 
     } 
} 

这里是我利用整数输入到旋转框中选择了某个列尝试:

void MainWindow::on_pushButton_2_clicked() 
{ 
    QString inputfile = QFileDialog::getOpenFileName(
       this, 
       tr("Open File"), 
       "/Users", 
       "All files (*.*)" 
       ); 
    QVector<double> SingleChannel; 

    if (inputfile != ""){ 
     QFile file(inputfile); 

     if (!file.open(QIODevice::ReadOnly)){ 
     } 
     QTextStream in(&file); 
     SingleChannel.resize(1); 
     double buffer; 
     int channelnumber = ui->spinBox->value(); 
     while(!file.atEnd()){ 
      in.readLine(); 
      for (int i = 0; i < 512; i++){ 
       in >> buffer; 
       if (i == channelnumber){ 
        SingleChannel.push_back(buffer); 
       } 
       data::SingleLineData[i]+=buffer; 
      } 
     } 
    } 
    qDebug() << SingleChannel; 
} 

我碰到下面的错误,但:

ASSERT failure in QVector<T>::operator[]: "index out of range", file /Users/mduncan/Qt/5.3/clang_64/lib/QtCore.framework/Headers/qvector.h, line 385 
The program has unexpectedly finished. 

人有什么想法?

谢谢:)

回答

0

在虚空主窗口的开始加入这一行:: on_pushButton_2_clicked方法

data::SingleLineData.resize(512); 

这将调整您的容器512组默认的值数的元素。因为你使用data :: SingleLineData [i] + = buffer,它需要访问容器中的第i个元素。

+0

非常感谢 – 2015-03-03 02:34:08

相关问题