C++读取txt文件的行数据和列数据

    问题描述:想要读取一个txt文件中的数据。数据是按行进行排列的,想要读取特定行数中的特定列数据。数据如下图:每一行的第一列是时间,后面的几列是附带的信息。如何读取特定行中的某些列数据。 

  基本思路:假设我们感兴趣的信息是第一列数据为“2019-01-20 23:43:29”后面的三列数据,将txt 文件按行读取后,通过find函数查找“2019-01-20 23:43:29”。一旦查找到,将这一行数据毫不留情的存储下来。因为列与列数据之间的分隔符是table, 当然你也可以利用人工自己查一下后面三列数据的位置。

#include <iostream>
#include <fstream>
#include <cassert>
#include <string>
#include <vector>

using namespace std;

int main()
{
	ifstream infile;
	infile.open("file.txt");   //将文件流对象与文件连接起来 
	assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

	string s;
	vector<string> vec;        //定义一个容器vec。
	string ss = "2019-01-20 23:43:29";     

	while (getline(infile, s))
	{
		if (s.find(ss) == 0)    //利用find函数查找我们需要的特定行数据。
		{
			vec.push_back(s);    //将行数据进行存储,相当于将我们每一行的所有数据作为一个字符存储起来。
		}
	}
	infile.close();   //关闭文件输入流 
	vector<double>X;
	vector<double>Y;
	vector<double>Z;
	string x, y, z;

	for (int i = 0; i <vec.size(); i++)
	{
	 x = vec[i].substr(20, 13); //substr就是截取字符,20指的是在第几个字符上,13从第20个数据向后截取的长度。
	
	 X.push_back(atof(x.c_str())); //string类型转化为double型分为两步,先将string转为字符数组,然后数组转为double。
	                              //c_str将string转为数组,atof将数组转为double。
     y = vec[i].substr(34, 12);
	 Y.push_back(atof(y.c_str()));
     z = vec[i].substr(47, 12);
	 Z.push_back(atof(z.c_str()));
	}
   

}

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值