文本文档中替换字符串

First_Soul 2012-04-26 09:52:37
求一段代码
替换当前目录下指定名称的 TXT 文档中 特定字符串
如:将 当前目录下的名为 C1.TXT 中所有 “123ABCD123” 替换成 “456EFG456”
由于文本量比较大 最好要要比较效率高的
...全文
130 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
evencoming 2012-04-26
  • 打赏
  • 举报
回复
[code=C/C++]
#include<cstdlib>
#include<string>
#include<cstring>
#include<fstream>
using namespace std;
void myreplace(const string& filename,const string& tofind,const string& toreplace)
{
ifstream fin(filename.c_str(),ios_base::binary);
string str(1024*1024*2,0);
fin.read(&str[0],2*1024*1024);
fin.close();
ofstream fout(filename.c_str(),ios_base::binary);
string::size_type beg=0,pos,find_size=tofind.size(),replace_size=toreplace.size();

while((pos=str.find(tofind,beg))!=string::npos)
{
fout.write(&str[beg],pos-beg);
fout.write(&toreplace[0],replace_size);
beg=pos+find_size;
}
fout.write(&str[beg],strlen(str.c_str())-beg);
fout.close();
}
int main()
{
myreplace("abca.txt","123ABCD123","456EFG456");
}
[/CODE]
qq120848369 2012-04-26
  • 打赏
  • 举报
回复
opendir, readdir , open, fstat, mmap, strstr, 替换字符串(涉及到后半段内存向前移动1字节,就你的例子来说,使用memmove)。
luciferisnotsatan 2012-04-26
  • 打赏
  • 举报
回复
直接整个文件读进内存,CString有Replace方法,然后写回去。
这个数据量,没什么要考虑效率的吧。除非每分钟都要这么运行下。
dongchong510 2012-04-26
  • 打赏
  • 举报
回复
先读进来然后直接整个扫描进行字符串匹配然后替换掉就好啦
匹配的话可以用KMP算法呀
evencoming 2012-04-26
  • 打赏
  • 举报
回复
这么小,c++毫无压力.
First_Soul 2012-04-26
  • 打赏
  • 举报
回复
没多大,其实就是 1M左右一个的,有很多个,大概100个文本不到吧。
luciferisnotsatan 2012-04-26
  • 打赏
  • 举报
回复
文本量有多大?没到GB单位,写个脚本就够用了。
等赵老师来贴脚本。
First_Soul 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
ctrl + r 或者 H
替换 123ABCD123 456EFG456
[/Quote]
汗。。。
我是要做成工具啊。
要效率高点的代码实现
批量更换目录下文本中的 相应字符
CTRL+H 就不用说了。谢谢你啊。
evencoming 2012-04-26
  • 打赏
  • 举报
回复
ctrl + r 或者 H
替换 123ABCD123 456EFG456

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧