2011-02-23 124 views
4

我有一個文本文件。我需要將它讀到一個QStringList。沒有線路分離器。我的意思是文本文件中的每一行都在一個新行中。那麼無論如何,我可以做到這一點?讀取一個文本文件到QStringList

回答

15

我假設每一行都應該是列表中的一個單獨的字符串。在一個循環中使用QTextStream::readLine(),並在每一步中將返回的值附加到QStringList。就像這樣:

QStringList stringList; 
QFile textFile; 
//... (open the file for reading, etc.) 
QTextStream textStream(&textFile); 
while (true) 
{ 
    QString line = textStream.readLine(); 
    if (line.isNull()) 
     break; 
    else 
     stringList.append(line); 
} 
2

如果文件不是太大,閱讀全部內容爲QString,然後split()它變成一個QStringList

我喜歡使用QRegExp版本,以處理來自不同平臺的換行:

QStringList sList = s.split(QRegExp("(\\r\\n)|(\\n\\r)|\\r|\\n"), QString::SkipEmptyParts); 
2
QFile TextFile; 
    //Open file for reading 
    QStringList SL; 

    while(!TextFile.atEnd()) 
    SL.append(TextFile.readLine()); 
0

下面的代碼讀取該文件

  QFile File("/file_path"); 
     if(!File.open(QIODevice::ReadOnly)); 
      { 
       qDebug("Error"); 
     } 
     QTextStream in(&File); 

    while(!in.atEnd()) 
    { 
     qDebug()<<ReadAll; 
     ReadAll=in.readAll(); 

    } 
    File.close(); 

現在文件被關閉,現在被新行即\ n在這裏\ r是回車

List= ReadAll.split(QRegExp("[\r\n]"),QString::SkipEmptyParts); 
1

我喜歡我的代碼完全縮進/ paranthesized與明顯的變量名稱(它們可能需要更長的時間來鍵入,但更容易調試),所以會做以下事情(但更改「myTextFile」和「myStringList」更明智的名稱,如「employeeListTextFile」)

QFile myTextFile; 
QStringList myStringList; 

if (!myTextFile.open(QIODevice::ReadOnly)) 
{ 
    QMessageBox::information(0, "Error opening file", myTextFile.errorString()); 
} 
else 
{ 
    while(!myTextFile.atEnd()) 
    { 
     myStringList.append(myTextFile.readLine()); 
    } 

    myTextFile.close(); 
}