【问题标题】:Replace a line in text file替换文本文件中的一行
【发布时间】:2012-03-19 06:59:01
【问题描述】:

我想替换文件中的一行文本,但我不知道它的功能。

我有这个:

ofstream outfile("text.txt");
ifstream infile("text.txt");

infile >> replace whit other text;

对此有什么答案吗?

我想说的是,在文件的某行中添加文本...

示例

infile.add(text, line); 

C++ 有这方面的功能吗?

【问题讨论】:

  • 这是作业吗?如果是,请标记它,否则我建议使用 perl 或 python 之类的脚本语言,或者只使用 sed.
  • 不,不做家庭作业,它的一些工作......
  • @Warkanlock 使用 C++ 有什么特别的原因吗?
  • @AntonioPérez 是的,SDL,引擎,游戏,它是业界开发的游戏的要求

标签: c++ stream ifstream


【解决方案1】:

恐怕您可能不得不重写整个文件。你可以这样做:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string strReplace = "HELLO";
    string strNew = "GOODBYE";
    ifstream filein("filein.txt"); //File to read from
    ofstream fileout("fileout.txt"); //Temporary file
    if(!filein || !fileout)
    {
        cout << "Error opening files!" << endl;
        return 1;
    }

    string strTemp;
    //bool found = false;
    while(filein >> strTemp)
    {
        if(strTemp == strReplace){
            strTemp = strNew;
            //found = true;
        }
        strTemp += "\n";
        fileout << strTemp;
        //if(found) break;
    }
    return 0;
}

输入文件:

ONE
TWO
THREE
HELLO
SEVEN

输出文件:

ONE
TWO
THREE
GOODBYE
SEVEN

如果您只想替换第一次出现的注释行,只需取消注释即可。另外,我忘了,最后添加删除filein.txt并将fileout.txt重命名为filein.txt的代码。

【讨论】:

  • 您可以通过将strTemp += "\n"; fileout &lt;&lt; strTemp; 替换为fileout &lt;&lt; strTemp &lt;&lt; '\n'; 来避免潜在的分配(并节省一行)。
【解决方案2】:

您需要seek 到文件中正确的行/字符/位置,然后在write 上。没有这样的搜索和替换功能(据我所知)。

【讨论】:

  • 嗯,是的,seekg 和 seekp infile.seekg(20*i, ios::beg); infile.read(cad, 20);没有?
  • 如果替换文本与其替换的字节大小不完全相同,这将不起作用。
【解决方案3】:

替换文件中的文本或在文件中间添加行的唯一方法是从第一个修改点重写整个文件。您不能在文件中间为新行“腾出空间”。

执行此操作的可靠方法是将文件的内容复制到一个新文件中,随时进行修改,然后使用rename 用新文件覆盖旧文件。

【讨论】:

  • 按照策略创建修改后的副本,然后将其重命名为原始名称,值得注意的是复制权限和文件属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2013-09-04
  • 2023-03-25
  • 2013-09-02
  • 2017-06-06
相关资源
最近更新 更多