循环文件夹中的所有文件以继续脚本

时间:2015-02-19 19:47:26

标签: c++

我附加了一个简化的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;
}

//来源http://www.cplusplus.com/forum/general/124221/

1 个答案:

答案 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)执行此操作,但概念是相同的。创建一个连接文件前缀,文件号和文件后缀的字符串,然后打开它而不是硬编码文件名。