[問題] 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