Qt读写txt文件每一行的不同列的数据

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());
	}
}

@叶落花枯主页

  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值