读取目录中的多个文件以进行编辑和写入另一组文件

时间:2018-07-18 20:05:01

标签: c++

我是C ++的新手,非常感谢有人能帮助我解决这个问题。我编写了以下代码,它可以正常工作,但是我需要对同一目录中的许多文件重复此代码。它逐行读取0.txt,如果找到则删除字符串字符串,并将其余的仅是数字的行写入另一个名为0.dat的文件中。我需要对同一目录中的多个文件(0.txt,1.txt .... 100.txt)重复此操作。

    #include <iostream>
    #include <fstream>
    #include <string>
    int main()
    {
    std::ifstream in;
    std::ofstream out;
    in.open("0.txt");
    out.open("0.dat");
    if(in.is_open() && out.is_open()){
         while(std::getline(in, line)){
                if(line.find(" No.")==line.npos){
                         out << line << "\n";
                         std::cout << "line is:\t" << line<<"\n";
                }
          }
    }

    in.close();
    out.close();
    return 0;
    }

如何创建一个循环以读取100个“ .txt”文件并将其写入具有正确名称引用的100个“ .dat”文件中?

1 个答案:

答案 0 :(得分:2)

真的很简单。我们要做的第一件事是使您已经编写的东西成为函数。但是在进行一些编辑之前不可以。它应该执行与代码完全相同的操作,但是具有更好的做法!

void readAndWrite(std::string in_name, std::string out_name)
{
    std::ifstream in{in_name};
    std::ofstream out{out_name};
    std::string line;

    if (!in.is_open() || !out.is_open())
        return;

    while (std::getline(in, line)) {
        if (line.find(" No.") == line.npos) {
            out << line << "\n";
            std::cout << "line is:\t" << line<<"\n";
        }
    }
}

然后我们只需要使用文件名将其调用100次即可。我假设您的文件被命名为“ 0.txt”,“ 1.txt”等。我们可以使用std::to_string()来完成此操作,该函数顾名思义就是将内容更改为std::string s。在我们的情况下,我们将int更改为std::string。这是做到这一点的一种方法。 (将在main中)

#include <string>
...
for (int i = 0; i < 100; ++i) {
    std::string fname = std::to_string(i);
    readAndWrite(fname + ".txt", fname + ".dat");
}

那应该做到!