2013-10-21 54 views
0

如果我想讀取數據的兩個數字如下:閱讀空行很容易

1stLine "23" 
2ndLine  *(emptyline)* 
3rdLine "45" 

在Fortran中,它很容易因爲你在只需要READ, 說READ(filename,*) Vari1,Vari2會讀「23」和「45」中。 (因爲Fortran採用多個連續的「\ n」之一)

但在Qt中,與readLine()一定要仔細閱讀並使用另一個代碼行來判斷它是否是空的,那種煩人。

是否有更好的方式輕鬆獲得"23""45"?我的意思是,用最少的代碼,謝謝。

+0

一般來說,如果某行在多行中完成,但希望在一行中完成,則可以編寫一個函數。 –

+0

謝謝。剛完成簡單的功能。我是一個懶惰的人,LOL ... – Fay100

回答

0
QFile file("your/file"); 
if(!file.open(QIODevice::ReadOnly)) { 
    QMessageBox::information(0, "error", file.errorString()); 
} 

QTextStream in(&file); 

while(!in.contains("\n", Qt::CaseInsensitive)) { 
    QString line = in.readLine(); 
    if(line != "\n"){ 
    ============================ 
    the jobs you want to be done 
    ============================ 
    } 
} 

file.close(); 
+0

這段代碼不會編譯,因爲QString沒有定義一元'!'運營商。也許寫'if(line!=「\ n」)'會更好? – vahancho

+0

@vahancho對,讓我糾正它 –

0

下面是我編寫的用於在FORTRAN中進行讀取的代碼,它工作正常。

class FTextStream: public QTextStream 
{ 
public: 
    FTextStream(QFile *file); 
    QString readLine2(); 
}; 

FTextStream::FTextStream(QFile *file) 
    :QTextStream(file) 
{} 

QString FTextStream::readLine2() 
{ 
    QString line; 
    while(line.size() == 0){ 
     line = readLine(); 
    } 
    return line; 
} 

但是,僅消除空行是不夠的。 進一步的篩選細節可以添加到readLine2()或新的細節。