0

私がやろうとしているのは、ファイルを読み取って、それを 2 次元の QVector にマップすることです。これまでの私のコードは次のとおりです

void dataModel::parseFileByLines()
{
QVector<QVector<QString> > dataSet;
lastError = "";
QRegExp reg(fileDelimiter);
QFile inFile(inputFile);
if (inFile.open(QIODevice::ReadOnly)){
    QTextStream fread(&inFile);
    long totalSize = inFile.size();
    QString line;
    while(!fread.atEnd()){
        line = fread.readLine();  
        dataSet.append(line.split(reg,QString::KeepEmptyParts).toVector());
   }
}else{
   lastError = "Could not open "+inputFile+" for reading";
}
}

私の問題は、1000,000 行以上を処理すると、「このアプリケーションはランタイムに異常な方法で終了するように要求しました」というメッセージが表示されてプログラムがクラッシュすることです。目標を達成するためのより効率的な方法はありますか? もしそうなら、どのように?

入力ファイルは次のような形式である可能性があります

ID、名前、年齢、性別など

1、サム、12

...

...

1000000

助けやアドバイスをいただければ幸いです

4

1 に答える 1

0

この (QList) バージョンを自分のコンピューターでテストしたところ、QVector バージョンよりもはるかに高速に実行され、クラッシュすることもないと思います。

void parseFileByLines(QString inputFile)
{
    QList<QList<QString> > dataSet;
    QString lastError = "";
    QFile inFile(inputFile);
    if (inFile.open(QIODevice::ReadOnly)){
        QTextStream fread(&inFile);
        long totalSize = inFile.size();
        QString line;
        while(!fread.atEnd()){
            line = fread.readLine();
            QList<QString> record = line.split('\t',QString::KeepEmptyParts);
            dataSet.append(record);
        }
    }else{
        lastError = "Could not open "+inputFile+" for reading";
    }
}
于 2015-07-17T08:05:36.963 に答える