参考博文连接 最近做货位分配功能,用csv文件记录仓库货位的存储状态,0表示空,1表示占用,即不可用;系统每次先读取csv文件,记录货位信息状态,在得到最优货位分配方案之后,更新货位信息,即csv文件

具体改写操作流程可分为

1)读取源文件并将字符串保存到vector1中;

2)根据最佳货位分配方案,标记需要改写的某行某列;如3行4列

3)将3行的字符串提取出来,将每列的内容加上逗号再存入另一个vector2,将第4列的数据由0变为1;

4)重复以上操作,全部更新完毕后,将vector1的内容再重新写入文件中

简单来说,整个过程可以看作是,将内容提取出来,放在一个容器中,改写容器中的内容,再将改后的内容写入原文件中,值得注意的由2点:一是要将写入的内容以逗号隔开,二是在改写过程中是将某行内容转化为vector,以边完成对指定列的改写

改写前的csv文件:

csv写入MySQL csv写入改变数据_i++


代码

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

void Correct(string& a, int col)
{
	//cout << "替换前的a:" << a << endl;
	int num_content = 4;
	vector<string> tmp_store;
	string final;//定义最后得到的字符串
	string new_Content="1";//改写的内容
	char b[100];
	strcpy_s(b, a.c_str());
	string temp;
	char delima[] = ",";
	char* result = NULL;
	char* p=NULL;
	result = strtok_s(b, ",",& p);//以逗号分隔
	int cont = 0;
	while (result != NULL)
	{
		cont++;
		temp = result;
		if (cont < num_content)
		{
			temp += ',';
		}
		tmp_store.push_back(temp);//将每列的内容加上逗号重新存入入vector 
		result = strtok_s(NULL, ",",&p);
	}
	tmp_store[col - 1] = new_Content + ',';//改写指定列的内容
	for (int i = 0; i < tmp_store.size(); i++)
	{
		final += tmp_store[i];//将tmp_store的内容放入字符串中
	}
	a = final;
	//cout << "替换后的a:" << a << endl;
	return;
}

int main()
{
	string str_1;
	string str_2;
	ifstream rFile_1("文件名.csv", ios::in);
	vector<string>Content_1;//存放文件中的内容
	if (rFile_1.fail())
	{
		cout << "读取文件失败" << endl;
	}
	while (getline(rFile_1, str_1))
	{
		Content_1.push_back(str_1);
	}
	rFile_1.close();
	int ind =3;//根据算法求解得到的最终粒子解中的最佳个体索引,算法太长,这边就不展示了,只陈列结果
	for (int i = 0; i < 4; i++)//此处的4指需要改写的个数,源码中是一个变量,此处我直接给出结果
	{
		int row = Parent.individualSet[ind].Gene[1][i];//最优解中货位对应csv文件中应修改的行数,根据解的内容分别需要改写3行1列的,4行1列的,1行3列,3行2列
		int col= Parent.individualSet[ind].Gene[2][i];//最优解中货位对应csv文件中应修改的列数
		//cout << "替换前的大小:"<<Content_1[row - 1].size() << endl;
		//cout << "替换前的内容:" << Content_1[row - 1] << endl;
		//改写的函数
		Correct(Content_1[row - 1], col);
		//cout << "替换后的大小:" << Content_1[row - 1].size() << endl;
		//cout << "替换后的内容:" << Content_1[row - 1] << endl;
		//cout << Content_1[row - 1];	
	}
	//重新写入
	ofstream File_1("文件名.csv");
	for (int i = 0; i < Content_1.size(); i++)
	{
		File_1 << Content_1[i] << endl;
	}
	File_1.close();

}

改写后结果:

可以看到原文件中3行1列的,4行1列的,1行3列,3行2列的值已从0变为1

csv写入MySQL csv写入改变数据_csv写入MySQL_02