我是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”文件中?
答案 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");
}
那应该做到!