SET自设计格式读取

8 篇文章 0 订阅
#include<vector>
#include<fstream>
#include <string>
#include <sstream>
#include<iostream>
using namespace std;

template<typename T>
vector<vector<T>> DataOut(ifstream& fin, int n, int size)
{
	string line;
	stringstream lineStream;
	vector<vector<T>> Data;
	vector<T> vecTmp;
	vecTmp.resize(size);
	for (int i = 0; i < n; i++)
	{
		getline(fin, line);
		lineStream << line;
		for (int j = 0; j < size; j++)
			lineStream >> vecTmp[j];
		Data.push_back(vecTmp);
		lineStream.clear();
	}
	return Data;
}

template<typename T>
vector<vector<T>> DataOutWithId(ifstream& fin, int n, int size)
{
	string line;
	int id;
	stringstream lineStream;
	vector<vector<T>> Data;
	vector<T> vecTmp;
	vecTmp.resize(size);
	for (int i = 0; i < n; i++)
	{
		getline(fin, line);
		lineStream << line;
		lineStream >> id;
		for (int j = 0; j < size; j++)
			lineStream >> vecTmp[j];
		Data.push_back(vecTmp);
		lineStream.clear();
	}
	return Data;
}

vector<vector<double>> Read_Set
(
	int frame,
	string setName,
	string inVariableName,
	int setType,//0表示set为节点,1表示单元集合
	int setId//看输入是否有,不是一定有
)
{
	/*
	//输入
	int frame = 1;
	string setName = "FIX";
	string inVariableName = "U";

	int setType = 0;//给默认值0。0表示set为节点,1表示单元集合,暂时默认set集合名字唯一,不用通过set的集合类型区分
	int setId = 1;  //给默认值1。看输入是否有,不是一定有。
	*/

	//变量名全部转化为小写
	for (int i = 0; i < inVariableName.size(); i++)
	{
		inVariableName[i] = tolower(inVariableName[i]);
	}

	//判断寻找变量在VTK中的名字
	string judgeInVariableName;
	if (inVariableName == "u")
		judgeInVariableName = "displacement";
	else if (inVariableName == "coord")
		judgeInVariableName = "coord";
	else if (inVariableName == "density")
		judgeInVariableName = "density";
	else if (inVariableName == "resistivity")
		judgeInVariableName = "resistivity";
	else if (inVariableName == "temperature")
		judgeInVariableName = "temperature";
	else if (inVariableName == "Permittivity")
		judgeInVariableName = "permittivity";

	vector<vector<int>> phyDataInt;//读入数据
	vector<vector<float>> phyDataFloat;//读入数据
	vector<vector<double>> phyDataDouble;//读入数据

	stringstream lineStream;
	string line;

	//line = "	POINTS	8	double";
	string temp;
	string temp1;
	string temp2;

	//  * 1	PUSH point
	//	dDisp	567	3	double
	int frameTmp;
	string setNameTmp;
	string setTypeTmp;

	string judgeInVariableNameTmp;
	int dataSizeTmp;
	int numCompTmp;
	string dataTypeTmp;

	//1_displacement_FIX.txt
	string inFile;
	inFile = inFile + to_string(frame) + "_" + judgeInVariableName + "_" + setName + ".txt";   //切忌一定要把 后缀v带上,不然就是错误

	ifstream fin;
	fin.open(inFile.c_str(), ios::in);

	if (!fin.is_open())
	{
		cout << "File open fail" << endl;
		return phyDataDouble;
	}

	if (fin)
	{
		while (getline(fin, line))
		{

			//清除每行段前空格
			while (line[0] == '\t')
				line.erase(0, 1);

			if ((line[0] == '*'))
			{
				//读取  * 1	PUSH point
				lineStream << line;
				lineStream >> temp;
				lineStream >> frameTmp;
				lineStream >> setNameTmp;
				lineStream >> setTypeTmp;
				lineStream.clear();

				//读取	dDisp	567	3	double
				getline(fin, line);
				lineStream << line;
				lineStream >> judgeInVariableNameTmp;
				lineStream >> dataSizeTmp;
				lineStream >> numCompTmp;
				lineStream >> dataTypeTmp;
				lineStream.clear();

				if (frameTmp == frame && setNameTmp == setName && judgeInVariableNameTmp == judgeInVariableName)
				{
					if (dataTypeTmp == "double" || dataTypeTmp == "float")
					{
						phyDataDouble = DataOutWithId<double>(fin, dataSizeTmp, numCompTmp);
						return phyDataDouble;
					}
					else if (dataTypeTmp == "int")
					{
						phyDataInt = DataOutWithId<int>(fin, dataSizeTmp, numCompTmp);
					}
					else if (dataTypeTmp == "double")
					{
						phyDataDouble = DataOutWithId<double>(fin, dataSizeTmp, numCompTmp);
					}
					else if (dataTypeTmp == "float")
					{
						phyDataFloat = DataOutWithId<float>(fin, dataSizeTmp, numCompTmp);
					}
					else
					{
						cout << "物理变量数据类型为不常见类型,请补充" << endl;
					}
				}
				else
				{
					for (int i = 0; i < dataSizeTmp; i++)
					{
						getline(fin, line);//跳过这些行
					}
				}
			}
		}
	}
	cout << "目前默认输出数据类型为double类型,读取变量数据类型是非double类型,无法输出";
	return phyDataDouble;
}




主函数:


#include<vector>
#include<fstream>
#include <string>
#include <sstream>
#include<iostream>
using namespace std;

vector<vector<double>> Read_Set
(
	int frame,
	string partName,
	string inVariableName,
	int setType,//0表示set为节点,1表示单元集合
	int partId//看输入是否有,不是一定有
);

int main()
{

	//  1_FIX_disp.txt
	//输入
	int frame = 1;
	string setName = "FIX";
	string inVariableName = "U";

	int setType = 0;//给默认值0。0表示set为节点,1表示单元集合,暂时默认set集合名字唯一,不用通过set的集合类型区分
	int setId = 1;  //给默认值1。看输入是否有,不是一定有。
	

	vector<vector<double>>res = 
		Read_Set
		(
			frame,
			setName,
			inVariableName,
			setType,//0表示set为节点,1表示单元集合
			setId//看输入是否有,不是一定有
		);

	return 0;
}


/*
文件名:1_displacement_FIX.txt
文件内容:
* 1	FIX point
displacement	10	3	double
1154	10.000000e+00	0.1000000e+00	0.0000001e+00
1258	20.000000e+00	0.2000000e+00	0.0000002e+00
1253	30.000000e+00	0.3000000e+00	0.0000003e+00
1514	40.000000e+00	0.4000000e+00	0.0000004e+00
1667	50.000000e+00	0.5000000e+00	0.0000005e+00
1466	60.000000e+00	0.6000000e+00	0.0000006e+00
1666	70.000000e+00	0.7000000e+00	0.0000007e+00
1252	80.000000e+00	0.8000000e+00	0.0000008e+00
1653	90.000000e+00	0.9000000e+00	0.0000009e+00
1462	100.000000e+00	1.000000e+00	0.0000010e+00
*/






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值