2014-06-24 105 views
-1

我在用Qt讀取文本文件時遇到了麻煩。 我的文本文件看起來像這樣:用QTextStream讀取文本文件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 ?!

有人可以幫助我嗎?

謝謝!

回答

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++; 

} 

我的猜測是,在你的代碼讀取第一個四個數字的控制後仍然在第一行,在「else」裏面,當你讀取行時,它只讀取NaN的剩餘行。

當您編寫文件閱讀代碼時,您應該始終打印您在測試代碼時閱讀的內容。請讓我知道這對你有沒有用 。

Santosh

+0

你是對的。我不會讀'linecount == 0'循環中的整行。謝謝! – smaica