我附加了一个简化的C ++代码,它从文件中读取数据并获得向量的平均值,并将输出保存到csv中。文件。我的问题是我有100个名为test1.csv,test2.csv,... test100.csv的文件,并以100个文件递归执行相同的工作,并希望将每个输出保存为result1.cvs,result2.csv,.. 。result100.csv分别。
坦率地说,我经常使用Matlab / R,并且这个循环很容易实现,但作为C ++的初学者,我从一开始就很困惑。
每个文件都有一个不同历史股票价格数据的向量,具有相同的股票价格长度(如苹果,微软,IBM,GM ......)。
以下是供您参考的简化代码,但实际代码非常复杂,每个代码将生成25000 * 30000矩阵输出。
数据文件中的样本数据是这样的; 45.78 67.90 87.12 34.89 34.60 29.98 ......
提前感谢您的帮助。
#include <fstream>
#include <iostream>
int main() {
//std::ifstream infile ("E:\\DATA\\test1.txt");
std::ifstream infile ("E:\\DATA\\test1.csv");
float num;
float total = 0.0f;
unsigned int count = 0;
// While infile successfully extracted numbers from the stream
while(infile >> num) {
total += num;
++count;
}
// don't need the file anymore, close it
infile.close();
// test to see if anything was read (prevent divide by 0)
if (!count) {
std::cerr << "Couldn't read any numbers!" << std::endl;
return 1;
}
// give the average
std::cout << "The average was: " << total/count << std::endl;
std::cout << "The sum was: " << total << std::endl;
std::cout << "The length was: " << count << std::endl;
// pause the console
// std::cin.sync();
//std::cin.get();
std::ofstream myfile;
myfile.open ("E:\\DATA\\result1.csv"); //check!!!!
myfile<<total/count<<","; //Add "," for csc format
myfile.close();
std::cout << "average was sucessfully saved !!!! /n";
return 0;
}
答案 0 :(得分:1)
听起来在for循环中运行此代码最简单,每次迭代都会更新文件名字符串。例如:
#include <string>
#include <iostream>
#include <fstream>
int main() {
for (int i = 1; i <= 100; i++) {
std::string inFile;
std::string outFile;
// Add the prefix to the filename
inFile.append("test");
outFile.append("result");
// Add the number to the filename
inFile.append(std::to_string(i));
outFile.append(std::to_string(i));
// Add the suffix to the filename
inFile.append(".csv");
outFile.append(".csv");
// std::cout << inFile << std::endl;
// std::cout << outFile << std::endl;
std::ifstream fin;
std::ofstream fout;
fin.open(inFile);
fout.open(outFile);
// TODO:Use fin and fout
}
return 0;
}
如果您对字符数组(C-Strings)更加满意,或者如果您只有旧版本的C ++,那么您也可以使用字符数组(C-Strings)执行此操作,但概念是相同的。创建一个连接文件前缀,文件号和文件后缀的字符串,然后打开它而不是硬编码文件名。