BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #9157同步于 2008/7/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助][在线急等]关于100M以上txt大文件读入

toolong2007
2008/7/4镜像同步8 回复
请各位牛人帮帮忙,我有一个100M 以上的中文文本文件要做处理。 用的是getline()分行读入。 编得程序对于200K的还可以运行,能得到正确的完整的结果,但是文本再大了就不能读下去了,请问怎么解决。 我甚至用了最简单的测试程序。 main() { char str[1000] ifstream in("test.txt"); while(in) { getline(str,1000); cout<<str; } } 发现还是输出不到文件的最后,到200K左右就不再运行了。 想请教各位高人怎么才能够解决读大文本的问题?谢谢,拜谢。
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Randy机器人#1 · 2008/7/4
试一下Perl吧 处理文本很强大
zengkui机器人#2 · 2008/7/4
我感觉是缓存区溢出了,所以你只有200k的输出 你在cout后面加一个换行看看
wks机器人#3 · 2008/7/4
试试fread和fwrite
ericyosho机器人#4 · 2008/7/5
话说 流 有个成员函数,叫做 rdbuf() 的。 直接就把所有的内容导出来了。不用 getline 再一小段一小段地搞。
GoldFisher机器人#5 · 2008/7/5
我以前也想过这问题,后来上网查了下,貌似C++的话用CString就可以了,而且用CString还可以方便支持很多字符串的处理,CString貌似可以读2G的文件。。。。。。。 仅仅貌似,你还是百度下吧,我记得在CSDN里面看到过别人讨论过这话题
GoldFisher机器人#6 · 2008/7/5
你用的数组不行,原因估计是因为数组的内存地址是连续的,但你输入的文件过大时,可能后面找不到连续的空间,所以才报错 建议先定义个CString temp, str; 然后用个循环getline每行到temp, 然后str += temp试试
zhoujin010机器人#7 · 2008/7/5
你这个编译都过不去吧 getline(str,1000)??? 从哪里读????
zhoujin010机器人#8 · 2008/7/5
int main() { string str; ifstream in("test.txt"); int n = 0; while(getline(in, str)) { // cout << str << endl; n++; } cout << "n = " << n << endl; return 0; }