如何使用QTextStream::readLine函数?

4
我正在尝试使用以下Qt代码从文本文件中读取值。
int ReadFromFile(QString fileName)
{
   QFile file(fileName);
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
      return 1;

   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(1); //read one line at a time
      QStringList lstLine = line.split(",");
   }
   file.close();
   return 0;
}

文本文件的内容如下:

1,0.173648178  
2,0.342020143  
3,0.5  
4,0.64278761  
5,0.766044443  
6,0.866025404  

然而,readLine 总是一次返回一个字符,但我的意图是每次读取一行,并分割每行以获取单个逗号分隔的值。我是否忽略了一些基础知识呢?
3个回答

6
是的。你正在为maxlen参数传递1,这意味着将行长限制为仅1个字符。尝试不提供任何内容来使用maxlen

当我尝试那种方式时,readLine返回了多行内容! - Martin
嗯,我无法复制那个。使用您提供的数据,readLine() 对我来说很好用。 - kenrogers
2
问题在于行以“\r”不正确地终止,这些行没有正确的尾随换行符“\r\n”。 - Martin

1
我知道这可能是一个旧帖子,但看起来您在每次迭代期间都覆盖了lstLine变量。
这个:
QStringList lstLine = line.split(",");

改为

int ReadFromFile(QString fileName)
{
   QStringList lstLine;
   QFile file(fileName);
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
      return 1;
   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(); //specifying number = # of characters
      lstLine.append( line.split(",") );
   }
   file.close();
   return 0;
}

1

从你的代码中删除零并尝试。

   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(); //read one line at a time
      QStringList lstLine = line.split(",");
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接