记录研0第一个程序任务:批量读取txt文件,并按规定格式输出到一个txt文件种。
- 一、代码`
#include
#include
#include
#include
#include
#include
#include
using namespace std;
//测试,参考自贤哥写的java的if else
//测试if自动化,输出需要用到
int read1(int num1) //定义一个read1函数,用来读取单个txt文件
{
ofstream fout("E:\data01\multi-period vaccination problem__data\result53.txt", ios::app); //输出路径,输出接着之前行末
//这三行是之前用for循环做的,其实更快捷
//for (int num1 = 1; num1 < 136; num1++) {
//for (int num2 = 0; num2 < 9; num2++) {
//for (int num3 = 0; num3 < 9; num3++) {
char fname[200]; //定义文件名称 //打开文件 snprintf(fname, sizeof(fname), "E:\data01\multi-period vaccination problem__data\Example_%d.txt", num1);
//这里要按格式输出if 或者elseif
if(num1 == 1){
fout << "if a == " << num1 << endl;;
}
else {
fout << "elseif a == " << num1<
//这里是之前尝试时候的错误,一个%d面要有一个整数,我复制别人复制太多了,结果折磨了一上午才改掉
//ifstream fin(“E:Projectsmulti-period vaccination problem__dataExample_%d_%d_%dt”, ios::in);
ifstream fin(fname);
//定义待会要用到的一些字符串
string filename;
string line;
string str; string substr;
//这里定义的是特殊字符,当遇到他们的时候,这一行会有特定的输出方式
string a = “Omega”;
string b = “J”;
string c = “K”;
string d = “T”;
string e = “XY_j”;
string f = “XY_k”;
string g = “c_k”;
string h = “g_k”;
string i = “Q”;
string j = “p_nj”;
string k = “e_j”;
string l = “r_j”;
string m = “l_j”;
string n = “w_j”;
string o = “u_j”;
string p = “q_1j”;
string q = “q_2j”;
//用来判断上面定义的特殊字符是否存在的语句,这里我也不太懂,复制过来就能直接用,不需要做什么改变
string::size_type idx;
if (fin) // 开始读取文件,如果有该文件开始执行括号内容,没有的话跳到最后那个else,这里用的是笨办法,挨个判断的,是否可以用个循环呢?值得思索
{
while (getline(fin, line)) // line中不包括每行的换行符,读去这一行的数据
{
idx = line.find(a);//复制过来的,咱也不知道具体功能是怎么发挥的
if (idx != string::npos) { //if后面那个括号就是进行判断的,如果这一行返回的不是空值,就执行括号内语句,否则跳到下一个else if
// 当字符串中包含 "Omega=" 时输出或写入文件,下面类似
// string.substring(26) 是截取字符串的第 26 位至结束,C 应该有类似的方法,这个是原先java的东西
string A = line.substr(26, 5); //把这行要输出的东西放到A里面
fout << "Omega=" + A + ";" << endl;//输出
}
else if (line.find(b) != string::npos) {
string B = line.substr(25, 256);
fout << "J=" + B + ";" << endl;
//fout << "J=" << (str.length() - 25, str.length()) << endl;
//System.out.println("J=" + string.substring(25));
}
else if (line.find(c) != string::npos) {
string C = line.substr(24, 256);
fout << "K=" + C + ";" << endl;
//fout << "K=" << (str.length() - 24, str.length()) << endl;
//System.out.println("K=" + string.substring(24));
}
else if (line.find(d) != string::npos) {
string D = line.substr(17, 256);
fout << "T=" + D + ";" << endl;
//fout << "T=" << (str.length() - 17, str.length()) << endl;
//System.out.println("T=" + string.substring(17));
}
else if (line.find(e) != string::npos) {
string E = line.substr(16, 256);
fout << "XY_j=[" + E << endl;
//for (int i = 0; i < 10; i++) {
// fout << E;
//};
//fout << "]" << endl;
// 这里没写完整,之后需要再改一下
//fout << "XY_j=[" << (str.length() - 16, str.length()) <<" ]"<
}
//主函数,用来遍历文件夹
int main() {
ofstream fout("E:\data01\multi-period vaccination problem__data\result53.txt", ios::app);
char fname[200];
int num1 = 1;
int i = 0;
//cout << "请输入从哪个文件开始汇总:" << endl;
//cin >> i;
while (i < 135) {
snprintf(fname, sizeof(fname), "E:\data01\multi-period vaccination problem__data\Example_%d.txt", num1);
if (num1 == i) {
read1(i);
}
else {
read1(num1++);
}
i++;
}
system("pause");
return 0;
}
-
二、感想
第一个任务算是勉勉强强结束了,代码里的东西依旧还有许多不懂得地方,或者是有些冗余啊什么的。
希望自己可以在c++的学习上更上一层楼,最起码也要完成以后科研的需要。
还有一点,在完成代码的这段时间里,深深感觉到 畏难 带来的无力感,从开始的推脱,到后来ddl的日渐逼近,以及昨天晚上和老师沟通,当把自己整个心神都沉浸在其中的时候,灵感真是刷刷刷地来呀!
就是希望在以后地学习生活中,遇到问题不要退缩,干就完了,老天总不能把你逼近绝境是吧(自我催眠地第一次,嘿嘿)



