線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3595
推到 Plurk!
推到 Facebook!

C語言DEV-C讀取文字檔陣列儲存大小問題

答題得分者是:s92405054
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-07-11 22:47:37 IP:210.85.xxx.xxx 訂閱
我讀取文字檔約40MB
資料約40萬筆
因要做資料核對,所以我的做法先將這40萬筆資料(代碼、廠牌、料號、說明)存到陣列裡
再開始做比對
#define pcs 400000//筆數
char IPRL_Code[pcs][6];//代碼
char IPRL_Brands[pcs][6];//廠牌
char IPRL_Part[pcs][22];//料號
char IPRL_Part2[pcs][22];//說明
編譯時沒問題,但執行就一打開馬上就錯誤
是因陣列大小有限制的關係嗎?
我要如何修改方法
讀取這麼大的檔案第一次用
麻煩協助幫忙,謝謝
s92405054
高階會員


發表:7
回覆:49
積分:101
註冊:2009-04-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-07-13 09:04:33 IP:60.248.xxx.xxx 訂閱
讀大的檔案,我都是用fseek讀一段比一段把要的再放到結構裡,一次先讀出來的話太佔空間囉(個人意見)
如果是一定要40萬筆同時使用那我就不知道了(僅供參考......我還是新手XD多多指教)
===================引 用 luckhy 文 章===================
我讀取文字檔約40MB
資料約40萬筆
因要做資料核對,所以我的做法先將這40萬筆資料(代碼、廠牌、料號、說明)存到陣列裡
再開始做比對
#define pcs 400000//筆數
char IPRL_Code[pcs][6];//代碼
char IPRL_Brands[pcs][6];//廠牌
char IPRL_Part[pcs][22];//料號
char IPRL_Part2[pcs][22];//說明
編譯時沒問題,但執行就一打開馬上就錯誤
是因陣列大小有限制的關係嗎?
我要如何修改方法
讀取這麼大的檔案第一次用
麻煩協助幫忙,謝謝
編輯記錄
s92405054 重新編輯於 2010-07-13 09:05:23, 註解 無‧
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-07-13 20:15:00 IP:210.85.xxx.xxx 訂閱
剛謝你的回覆~
但我也想不到什麼方法,我也是新手阿
我只想到將40萬筆存到陣列後
在讀另一筆料號,用這筆料號比對這40萬筆
將代碼和說明參照過來
我目前使用dev-c 程式寫
bcb也是初學而以
請各位高手協助,謝謝~
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-07-15 11:33:49 IP:59.124.xxx.xxx 訂閱
1) 40萬筆的文字檔,也許能用ODBC/ADO 方式當成資料庫處理…
2) 既然用C寫了,用memory-mapped 吧,直接把檔案映射到memory直接存取,參考
https://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=98976
===================引 用 luckhy 文 章===================
我讀取文字檔約40MB
資料約40萬筆
因要做資料核對,所以我的做法先將這40萬筆資料(代碼、廠牌、料號、說明)存到陣列裡
再開始做比對
#define pcs 400000//筆數
char IPRL_Code[pcs][6];//代碼
char IPRL_Brands[pcs][6];//廠牌
char IPRL_Part[pcs][22];//料號
char IPRL_Part2[pcs][22];//說明
編譯時沒問題,但執行就一打開馬上就錯誤
是因陣列大小有限制的關係嗎?
我要如何修改方法
讀取這麼大的檔案第一次用
麻煩協助幫忙,謝謝
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-07-15 20:07:23 IP:210.85.xxx.xxx 訂閱
感謝副站長迅速的回覆,我試看看用memory-mapped file 讀檔
因也是第一次使用mapped
有很多不懂的地方,
請問我是用DEV-C編寫是否能使用這個函數
我先試看看,有問題在發問,謝謝.
編輯記錄
luckhy 重新編輯於 2010-07-15 20:30:04, 註解 無‧
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-08-07 11:02:43 IP:203.79.xxx.xxx 訂閱
解決的方法已找到兩種:

一、最容易的方法是把陣列改宣告為動態陣列。C 用 malloc / free,C 用 new / delete。

以現在電腦的硬體配備來說,50 MB 應該不算什麼大問題才對。上述兩種方法可以解決問題,所以可以不用到跨行程共享記憶體
系統時間:2024-05-08 19:38:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!