-1

Qt でテキスト ファイルを読み込めません。私のテキストファイルは次のようになります。

17,9001500000000    31,1151700000000    450 0   NaN NaN NaN NaN NaN NaN
1   1   1390309311,00000    0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391
1   2   1390309311,00000    0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548

等々..

データは空白で区切られています

最初の行: 最初の行の最初の列には、次の行に一般的に必要な情報が書かれています。最初の行のすべての列が使用されるわけではありません。いくつかの情報の後、列は「NaN」で埋められます。

次の行: ここに私のデータが配置されています。一行ずつ全部読みたい。最初の 3 列は、行の一般的な情報です。次の (300 列とします) には、3 つの異なる種類のデータ (100 の測定値のすべての種類) が入力されます。

だから私は自分のファイルを読みます: まず、最初の行を読むと、ファイル全体の一般的な情報を受け取りたいと思います。(info1, info2, info3, info4) 次に、次の行を空白で区切って読みました。

if (!File.open(QIODevice::ReadOnly | QIODevice::Text))
            return false;

        QTextStream in(&metFile);
        QString line;
        int linecount = 0;

        double info1,info2,info3,info4;
double lineinfo1,lineinfo2,lineinfo3;

        while (!in.atEnd()) {

            if (linecount==0) {

                    in >> info1 >>  info2 >>  info3 >> info4;
                    linecount++;

            }
            else {

            line = in.readLine();

            QStringList lineparts = line.split(QRegExp("\\s+"));

lineinfo1=lineparts[0].toFloat;
lineinfo2=lineparts[1].toFloat;
lineinfo3=lineparts[2].toFloat;

            for (int count=1; count<=100;count++) {

                    float data1=lineparts[count+2].toFloat();
                    float data2=lineparts[100+count+2].toFloat();
                    float data3=lineparts[2*100+count+2].toFloat();

            }

            linecount++;

            }

}

これで、info1-4 が正しく読み取られます。しかし、その後、lineinfo1-3 と data1-3 (lineparts[0] など) が nan または 0 で埋められる?!

誰かが私を助けることができますか?

ありがとうございました!

4

1 に答える 1

0

試す私の解決策は次のとおりです。

コードを次のように変更するだけで、うまくいくはずです。

 if (linecount==0) {

    in >> info1 >>  info2 >>  info3 >> info4;
    QString  remaining_line = in.readLine();  //This should pass from NaN's to next line inside your else
    linecount++;

 }

私の推測では、最初の 4 つの数値を読み取った後のコードでは、コントロールはまだ最初の行にあり、「else」内にある行を読み取ると、NaN しかない残りの行が読み取られます。

ファイル読み取りコードを書くときの最善の方法は、コードをテストするときに、読んでいるものを常に出力することです。それがうまくいくかどうか教えてください。

サントッシュ

于 2014-06-24T13:38:55.233 に答える