编程语言
首页 > 编程语言> > c++读取文件操作

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()将字符串转为字符,然后判断数值,负数跳过,正数赋值给结构体。注意自己文本中的标点符号是英文还是中文,很多小问题都会造成错误。

标签:文件,读取,手柄,制动,c++,换向,102,103,100
来源: https://blog.csdn.net/qq_44257811/article/details/119444071