c++读取文件操作

目的:定义一个结构体,把文件中的所有状态信息读取出来,然后将其放入一个vector的容器中。
----------------------------------分割线-------------------------------------------
文件格式如下大致;
1 换向手柄 106,-107,-105 换向手柄—前
1 换向手柄 106,107,-105 换向手柄—后
1 换向手柄 -106,-107,105 换向手柄—切

2 制动手柄 -95,96,-97,-98,-99,-100,-101,-102,-103,-104 制动手柄—运行位-X60
2 制动手柄 -95,-96,97,-98,-99,-100,-101,-102,-103,-104 制动手柄—制动1级位-X61
2 制动手柄 -95,-96,-97,98,-99,-100,-101,-102,-103,-104 制动手柄—制动2级位-X62
2 制动手柄 -95,-96,-97,-98,99,-100,-101,-102,-103,-104 制动手柄—制动3级位-X63
2 制动手柄 -95,-96,-97,-98,-99,100,-101,-102,-103,-104 制动手柄—制动4级位-X64
2 制动手柄 -95,-96,-97,-98,-99,-100,101,-102,-103,-104 制动手柄—制动5级位-X65
2 制动手柄 -95,-96,-97,-98,-99,-100,-101,102,-103,-104 制动手柄—制动6级位-X66
----------------------------------分割线-------------------------------------------
为了存取每一个设备的状态信息,必然要一行一行的操作,所以我用到了while(gtline(,));
文件路径用到的是相对路径,一开始用"文件名.txt"文件一致读取不了,但是我自己创建了一个测试程序又能读到,不知什么原因

string Id,Name,Value,Status,s,t;
sdt::ifstream infile;
std::istringstream iss;
infile.open("../date/test.txt",std::ios);
while(getline(infile,s))
{
	iss.str(s);//将s中的数据复制到iss,方便读取字符
	while(iss>>Id>>Name>>Value>>Status)//读取第一行:Id=1 Name=换向手柄 Value=106,-107,-105 Status=换向。。。。
	{
		std::istringstream temp(Value)
		while(getline(temp,t,','))//此时t读到的是Value中每一个数值的值
		{
			if(atoi(t.c_str()<0)
			{continue;}
			else
			{将数据放入结构体}
		}
		将结构体对象放入vector容器
	}
	iss.clear();
}
infilr.clear();

结构体中Value存放的是BYTE的数据类型,负数是没有用的,atoi()将字符转化为数字,c_str()将字符串转为字符,然后判断数值,负数跳过,正数赋值给结构体。注意自己文本中的标点符号是英文还是中文,很多小问题都会造成错误。

写了两天拿去看又让我从exel中读文件,生活不易小白叹气。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值