首页 > 解决方案 > 读取目录中的多个文件进行编辑和写入另一组文件

问题描述

我是 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”文件?

标签: c++

解决方案


这很简单,真的。我们要做的第一件事就是把你已经写好的东西变成一个函数。但不是在进行一些编辑之前。它应该和你的代码做的完全一样,但是有更好的实践!

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::strings。在我们的例子中,我们会将 s 更改intstd::strings。这是一种方法。(这将在main):

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

那应该这样做!


推荐阅读