[问题] C大量开档关档可否更快?

楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 17:47:16
开发平台(Platform): (Ex: Win10, Linux, ...) Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) CodeBlock
额外使用到的函数库(Library Used): (Ex: OpenGL, ...) OpenCV
问题(Question):
大家好,如果我想把大量txt档
1.txt 2.txt 3.txt
______ ______ ______
1 2 3 1 2 3 1 2 3
打开后将资料读进再重新输出成不同的txt档,但第一个存的是原本每个档案的第一个值
第二个存的是第二个值...
result1.txt result2.txt result3.txt
_______ _______ _______
1 1 1 2 2 2 3 3 3
有何方法能较快速的做完呢?
目前的做法是利用while fopen→fscanf→fprintf→fclose
但是不停开开关关档案似乎会非常耗时间,要跑很久
但这样就可以一次只做少量20个档
慢慢做20 20 20 ... 做完全部大量档案
有想过直接全部都先读进array暂存再一次输出
但会因为资料量庞大,在宣告array时就会错误了
可能我的想法比较笨一点QQ 不知道有没有什么方法可以解决?
谢谢
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
作者: james732 (好人超)   2017-08-07 17:50:00
array用malloc或new来配置空间你用int x[很大的数]一定会出问题
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 17:52:00
好 我试试看会跳出 std::bad_alloc 的错误
作者: james732 (好人超)   2017-08-07 18:01:00
呃那代表你需要的真的太大了orz
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 18:05:00
谢谢QQ
作者: Schottky (顺风相送)   2017-08-07 18:11:00
到底是多大,有个数字可以参考吗?20 个档大可以全部开启,一起处理,到程式结束时再关闭
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 18:13:00
大概450000000有试过最后再关闭 可是txt打开却没存到 (fprintf "a")
作者: TeaEEE (爱不趴 不爱趴)   2017-08-07 18:17:00
你先把结果写到另三个档写完后再move回来就不用开开关关的
作者: Schottky (顺风相送)   2017-08-07 18:19:00
没存到? 你有做 error handling 吗?磁盘存取的意外状况很多,error handling 不可免
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 18:20:00
我不确定没存到是不是这个问题 因为我让他们共用一个FILE*Ptr 做法是while sprintf(filename,"%d.txt",i)然后Ptr=fopen(filename) 才做fprintf(Ptr,)
作者: Schottky (顺风相送)   2017-08-07 18:22:00
..... 共用是哪招,多用一些啊,pointer 很便宜的
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 18:24:00
好QQ 我试试看 因为想说已经空间不够了还开很多Ptr QQ
作者: Schottky (顺风相送)   2017-08-07 18:31:00
即使是 64-bit 一个 pointer 也才 8 bytes20 个 pointer 跟你要开的 4.5 亿个 int 是小巫见大巫了至于输出档,如果是一次性的倒是可以写完就关
楼主: Umagon (咩噜咩噜咩噜咩~~~~)   2017-08-07 18:48:00
可以成功 速度有快多了 谢谢S大 还有T大跟j大
作者: james732 (好人超)   2017-08-07 18:49:00
不用谢啦我什么都没帮上忙哈哈哈
作者: rbufghj9713 (我只是来潜水)   2017-08-07 23:16:00
版上的大大果然厉害(抄笔记我可以问一下后来实现的方法吗?是同时开20个档案,然后直接从里面找吗?
作者: ducksky (鸭舞九天)   2017-08-09 20:52:00
没存到应该是没下closefile
作者: mikukonn (mikukon)   2017-08-12 22:36:00
为何不打开第一个档案一次写完再开第二个?还是我理解错误了?

Links booklink

Contact Us: admin [ a t ] ucptt.com