【问题标题】:Read a text file line by line in Qt在 Qt 中逐行读取文本文件
【发布时间】:2011-07-23 15:08:19
【问题描述】:

如何在 Qt 中逐行读取文本文件?

我正在寻找与以下内容等效的 Qt:

std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
   ...
}

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    使用此代码:

    QFile inputFile(fileName);
    if (inputFile.open(QIODevice::ReadOnly))
    {
       QTextStream in(&inputFile);
       while (!in.atEnd())
       {
          QString line = in.readLine();
          ...
       }
       inputFile.close();
    }
    

    【讨论】:

    • 模式不应该是(QIODevice::ReadOnly | QIODevice::Text) 吗?
    • @AlexanderMalakhov QIODevice::Text 是默认值。
    • @Sergio:出于好奇,如果输入文件包含逗号分隔的字符串,那么如何解析
    • @Chinmoy 使用 QString split() 方法。
    【解决方案2】:

    这段代码可能会简单一点:

    QFile inputFile(QString("/path/to/file"));
    inputFile.open(QIODevice::ReadOnly);
    if (!inputFile.isOpen())
        return;
    
    QTextStream stream(&inputFile);
    for (QString line = stream.readLine();
         !line.isNull();
         line = stream.readLine()) {
        /* process information */
    };
    

    【讨论】:

    • 仅使用代码 sn-ps 的答案不是很有帮助。
    • 您的代码 sn-p 很有帮助。 (!line.isNull()) 是我需要的。
    【解决方案3】:

    从 Qt 5.5 开始,您可以使用QTextStream::readLineInto。它的行为类似于std::getline,可能比QTextStream::readLine 更快,因为它重用了字符串:

    QIODevice* device;
    QTextStream in(&device);
    
    QString line;
    while (in.readLineInto(&line)) {
      // ...
    }
    

    【讨论】:

      【解决方案4】:

      这是我的代码中的示例。所以我将使用 readLine() 从第一行到第三行读取文本,然后存储到数组变量并使用 for-loop 打印到文本字段中:

      QFile file("file.txt");
      
          if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
              return;
      
          QTextStream in(&file);
          QString line[3] = in.readLine();
          for(int i=0; i<3; i++)
          {
              ui->textEdit->append(line[i]);
          }
      

      【讨论】:

        【解决方案5】:

        或者类似的东西,对于 read from file:

        包含的库:

        #include "QFile"
        #include "QDir"
        

        守则:

        QFile file;
        file.setFileName("text.txt");
        QDir::setCurrent("C:/Users/USER_NAME/Documents/QTCreatorWorkspace/untitled1");
        QTextStream data(&file);
        
        if(file.open(QIODevice::ReadOnly)){
            ui->plainTextEdit->insertPlainText(file.readAll());
            file.close();
        }
        else{
            //Error statement
        }
        

        对于 write 到文件: 守则:

        QFile file;
        file.setFileName("text.txt");
        QDir::setCurrent("C:/Users/USER_NAME/Documents/QTCreatorWorkspace/untitled1");
        QTextStream data(&file);
        
        if(file.open(QIODevice::ReadWrite)){
            data << ui->plainTextEdit->toPlainText();
            file.close();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-01
          • 2015-10-25
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多