如何在文本文件c ++中查找和替换一行数据

时间:2014-12-26 21:32:44

标签: c++ file text io

我试图在c ++中查找并替换文本文件中的一行数据。但老实说,我不知道从哪里开始。

我在考虑使用     replaceNumber.open(“test.txt”,ios :: in | ios :: out | ios_base :: beg | ios :: app);

要在开头打开文件并将其追加,但这不起作用。

有谁知道实现这项任务的方法?

谢谢

编辑:我的文本文件只有一行,它包含一个数字,例如504.用户然后指定要减去的数字,然后结果应该替换文本文件中的原始数字。

2 个答案:

答案 0 :(得分:1)

您可以使用std::stringstream将从文件中读取的字符串转换为整数,并使用std::ofstreamstd::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;
    }
}