如何使用QT从文本文件中读取Point(x,y)数据?

3

我将使用QT来读取储存在文本文件中的坐标值。文本文件的内容如下:

 80.0910,13.1289
 80.0911,13.1289
 80.0912,13.1290

由于这些是GPS值,它们会随时间持续变化。因此,每次我只想从这个文件中读取最后一个值并将其存储为

x = 80.0912 y = 13.1290

这意味着我想要拆分最后一行并将数据存储到x和y中。

我在这个论坛上看到了类似的问题,但没有什么能满足我拆分和存储数据的需求。

QFile inputFile(":/input.txt");
if (inputFile.open(QIODevice::ReadOnly))
{
   /* WHAT 
       SHOULD 
          I DO 
             HERE */
}
2个回答

3
如果您的行总是具有相同的长度,那么您可以这样做:
inputFile.seek(inputFile.size - LENGTH_OF_LINE);
QString line = QString::fromLocal8Bit(inputFile.readLine());

或者使用QTextStream循环所有行(这适用于动态大小的行):

QTextStream ts(inputFile);
QString line;
while(!ts.atEnd())
  line = ts.readLine();

编辑:

对于拆分,您可以使用:

QStringList list = line.split(",");
double x,y;
if(list.size() == 2)
{
  x = list.at(0).toDouble();
  y = list.at(1).toDouble();
}else{
  qDebug()<<"Line not having coordinates: "<<line;
}

编辑:

将两个内容连接起来并进行小修改,这将始终为最后一行生成有效的结果,在错误情况下会产生0/0坐标:

QTextStream ts(inputFile);
QString line;
while(!ts.atEnd())
{
  QString temp = ts.readline();
  if(temp.size()>2)
  {
    //having more then 2 chars (e.g. 8,6 as coordinates)
    line = ts.readLine();
  }
}

QStringList list = line.split(",");
double x = 0.0;
double y = 0.0;
if(list.size() == 2)
{
  x = list.at(0).toDouble();
  y = list.at(1).toDouble();
}else{
  qDebug()<<"Line not having coordinates: "<<line;
}

我理解这个问题,但我的问题是我想将最后一行拆分并存储到变量x和y中。 - Bavani
谢谢你的努力。它运行良好。如何仅对最后一行执行此操作。 - Bavani
@Bavani编辑了帖子以反映连接,但这应该很容易。 - Sebastian Lange

0

尝试使用以下代码扫描最后一行:

QTextStream stream(inputFile);
QString line;
while(!stream.atEnd())
    line = stream.readLine();

float x, y;
sscanf((char*)line.toAscii().data(), "%2.4f,%2.4f", &x, &y);

我尝试了你的代码。当我打印x和y时,结果为0。 - Bavani

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