我试图在c ++中查找并替换文本文件中的一行数据。但老实说,我不知道从哪里开始。
我在考虑使用 replaceNumber.open(“test.txt”,ios :: in | ios :: out | ios_base :: beg | ios :: app);
要在开头打开文件并将其追加,但这不起作用。
有谁知道实现这项任务的方法?
谢谢
编辑:我的文本文件只有一行,它包含一个数字,例如504.用户然后指定要减去的数字,然后结果应该替换文本文件中的原始数字。
答案 0 :(得分:1)
您可以使用std::stringstream
将从文件中读取的字符串转换为整数,并使用std::ofstream
和std::ofstream::trunc
覆盖该文件。
#include <iostream>
#include <string>
#include <fstream>
#include <list>
#include <iomanip>
#include <sstream>
int main()
{
std::ifstream ifs("test.txt");
std::string line;
int num, other_num;
if(std::getline(ifs,line))
{
std::stringstream ss;
ss << line;
ss >> num;
}
else
{
std::cerr << "Error reading line from file" << std::endl;
return 1;
}
std::cout << "Enter a number to subtract from " << num << std::endl;
std::cin >> other_num;
int diff = num-other_num;
ifs.close();
//std::ofstream::trunc tells the OS to overwrite the file
std::ofstream ofs("test.txt",std::ofstream::trunc);
ofs << diff << std::endl;
ofs.close();
return 0;
}
答案 1 :(得分:0)
是的,你可以使用std :: fstream这样做,这是一个快速实现我快速实现的。打开文件,遍历文件中的每一行,并替换任何出现的子字符串。替换子字符串后,将该行存储到字符串向量中,关闭文件,用std::ios::trunc
重新打开,然后将每一行写回空文件。
std::fstream file("test.txt", std::ios::in);
if(file.is_open()) {
std::string replace = "bar";
std::string replace_with = "foo";
std::string line;
std::vector<std::string> lines;
while(std::getline(file, line)) {
std::cout << line << std::endl;
std::string::size_type pos = 0;
while ((pos = line.find(replace, pos)) != std::string::npos){
line.replace(pos, line.size(), replace_with);
pos += replace_with.size();
}
lines.push_back(line);
}
file.close();
file.open("test.txt", std::ios::out | std::ios::trunc);
for(const auto& i : lines) {
file << i << std::endl;
}
}