使用QT我想读取存储在textfile中的坐标值。 TextFile将包含以下内容。
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 */
}
答案 0 :(得分: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;
}
编辑:
Concat并且只有一个小编辑将始终只为最后一行产生有效结果,错误产生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;
}
答案 1 :(得分: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);