免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3313 | 回复: 10
打印 上一主题 下一主题

一个文件被多个字符串多次过滤,如何提升性能? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-03 22:02 |只看该作者 |倒序浏览
例如过滤字符串为"123",文件为a.txt,每行的第2到第四个字符为"123"的行去掉,然后过滤字符串变为“234”,同样每行的第2到第四个字符为"234"的行去掉,这样被多个字符串过滤
一个想法是:对a.txt用ifstream打开,建立一个临时文件b.txt,用ofstream打开。对a.txt采用getline()读取每一行到一个字符串变量,根据过滤条件过滤到b.txt里,然后删除a.txt,重命名b.txt为a.txt。这样不断进行肯定效率不高,毕竟建立文件,删除文件的效率不高吧
请问如何提升性能呢?

论坛徽章:
0
2 [报告]
发表于 2009-11-03 22:05 |只看该作者
一次性全部读入内存

论坛徽章:
0
3 [报告]
发表于 2009-11-03 22:18 |只看该作者
文件很大?脚本很容易搞定的啊,干嘛要用C++?

论坛徽章:
0
4 [报告]
发表于 2009-11-04 13:18 |只看该作者
回复楼上的:文件很大,而且用shell实现起来速度也不一定更快吧,shell最终不也是调用系统函数吗?

论坛徽章:
0
5 [报告]
发表于 2009-11-04 13:21 |只看该作者
C也是调用系统函数,都一样

论坛徽章:
0
6 [报告]
发表于 2009-11-04 13:32 |只看该作者
那么麻烦干嘛?全部读入内存。

论坛徽章:
0
7 [报告]
发表于 2009-11-04 13:34 |只看该作者
内存映射文件?

论坛徽章:
0
8 [报告]
发表于 2009-11-04 14:26 |只看该作者
没直接操作过内存。
能不能我用一个链表存这个文件:链表中的每一项代表文件中的一行,每次过滤时遍历这个链表,如果某一项要过滤掉,则相当于去掉一项,过滤n次后,直接遍历这个链表存放进另一个文件中
这样操作快吗?

论坛徽章:
0
9 [报告]
发表于 2009-11-04 14:30 |只看该作者
算了,直接grep吧

论坛徽章:
0
10 [报告]
发表于 2009-11-04 14:44 |只看该作者
脚本语言正适合干这个,说不定效率反而更高
谁说c/c++的效率一定要比脚本语言高了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP