3

QTを使用して、テキストファイルに保存されている座標値を読み取りたい. 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 */
}
4

2 に答える 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;
}
于 2013-10-09T06:23:26.013 に答える
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);
于 2013-10-09T07:06:01.110 に答える