簡體   English   中英

Qt讀取制表符分隔的文本文件的特定列

[英]Qt read specific columns of tab delimited text file

我正在開發一個程序,該程序讀取制表符分隔的double的文本文件並匯總每一列,從而有效地計算每一列的積分。

我想要做的是選擇一個特定的列進行匯總,而不是匯總所有列。

我已經為所有列的積分工作的代碼:

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.

有人有想法么?

謝謝 :)

在void MainWindow :: on_pushButton_2_clicked方法的開頭添加此行

data::SingleLineData.resize(512); 

這會將您的容器大小調整為512個默認值計數元素。 因為您使用data :: SingleLineData [i] + = buffer,所以需要訪問容器中的第i個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM