文章目录
Qt读写txt文件每一行的不同列的数据
适用场景:数据样本是坐标数据
数据示例
每行的第一列为横坐标,第二列为纵坐标,需要保存到不同的QVector
中,读取行数据较为简单
QVector<double>LocationX;
QVector<double>LocationY;
QString Line;
QFile LocationFile("D:\\Test\\location.txt")
if(!LocationFile.open(QIODevice::ReadOnly)
qDebug() << "不能打开文件 location.txt";
QTextStream in(&LocationFile);
while(!in.atEnd())
{
Line = in.readLine(); //使用atEnd()函数,这句必须有,否则会进入死循环,导致程序崩溃
//此时我们发现只能拿到一整行的数据,并不能拿到每一列的
}
一、根据数据分隔的特性,使用字符串分割函数section()
对行进行拆分,从而将列数据分别保存
QVector<double>LocationX;
QVector<double>LocationY;
QString Line,xLocation,yLocation;
QFile LocationFile("D:\\Test\\location.txt")
if(!LocationFile.open(QIODevice::ReadOnly)
qDebug() << "不能打开文件 location.txt";
QTextStream in(&LocationFile);
while(!in.atEnd())
{
Line = in.readLine(); //使用atEnd()函数,这句必须有,否则会进入死循环,导致程序崩溃
//此时我们发现只能拿到一整行的数据,并不能拿到每一列的
/* 此函数具体用法可见说明手册 */
xlocation = Line.section(' ',0,0); //将此次循环的行数据按照' '即空格进行拆分,并取第0个保存为xlocation
ylocation = Line.section(' ',1,1); //将此次循环的行数据按照' '即空格进行拆分,并取第1个保存为ylocation
LocationX.pushback(xlocation.toDouble() ); //将QString类型转换为double类型,这样就拿到了我们需要的数据
LocationY.pushback(ylocation.toDouble());
}
二、使用字符串的分隔函数split()
并将分隔的字符串存入 QStringList
变量中
(此方法由 @叶落花枯 指导学得,再次感谢)
QVector<double>LocationX;
QVector<double>LocationY;
QString Line,xLocation,yLocation;
QStringList list;
QFile LocationFile("D:\\Test\\location.txt")
if(!LocationFile.open(QIODevice::ReadOnly)
qDebug() << "不能打开文件 location.txt";
QTextStream in(&LocationFile);
while(!in.atEnd())
{
Line = in.readLine(); //使用atEnd()函数,这句必须有,否则会进入死循环,导致程序崩溃,此时我们发现只能拿到一整行的数据,并不能拿到每一列的
list = Line.split(' ');
if(list.size() >= 2)
{
xLocation = list.at(0);
yLocation = list.at(1);
LocationX.pushback(xLocation.toDouble());
LocationY.pushback(yLocation.toDouble());
}
}