VC對大型資料檔案的讀取 讀取二進位制檔案

2021-04-08 12:17:47 字數 1958 閱讀 1288

日期,開盤,最高,最低,**,成交量,成交金額 

2023年5月13日,636.96,636.96,636.96,636.96,0,0,

2023年5月14日,641.61,641.61,641.61,641.61,0,0,

2023年5月15日,637.83,637.83,637.83,637.83,0,0,

.............

要求將資料填寫到四張表中,以便作相應的分析。筆者開始用cfile和cstdiofile類的方法讀取件。cfile類提供了基於二進位製流的檔案操 作,功能類似於c語言中的fread()和fwrite()函式。cstdiofile提供了基於字串流的檔案操作,功能類似於c語言中fgets() 和fputs()函式。但是筆者發現,使用這兩個類進行檔案操作時,對於一次檔案讀寫的資料量的大小必須限制在65535位元組以內。究其原因是在vc中訪 問大於65535位元組的緩衝區需要huge型指標,而在cfile和cstdiofile類中,使用的是far型的指標。由於far型指標不具有跨段定址 的能力,因此限制了一次檔案讀寫的長度小於65535位元組。如果傳遞給cfile和cstdiofile兩個類的成員函式的資料緩衝區的大小大於 65535位元組的時候,vc就會產生assert錯誤。

針對檔案格式特點,筆者改用carchive類進行讀取如下: 

cfile sourcefile;//資料檔案

cstring sourcedata;//定義一臨時變數儲存一條記錄

sourcefile.open(.......);

carchive ar(&sourcefile,carchive::load);

while(null!=ar.readstring(sourcedata))//迴圈讀取檔案,直到檔案結束

在進行分析時,筆者採取了逐步分析並修改的辦法,過程如下:

int nyear;

cstring year= sourcedata.left(sourcedata.find("年"));//擷取年前面的字串

nyear=atoi(year);//型別轉換

sourcedata=sourcedata.righ(sourcedata.getlength()-sourcedata.find("年")-2);//將年以及前面的字元刪除。

重複上面分析過程,直到記錄末尾。

通過上述方法,筆者成功地將檔案讀取並分析填充。  

在vc6.0中讀取二進位制檔案 

周志杰··計算機世界**

各位需要用vc++讀寫二進位制檔案的朋友(尤其是需要與dos共享二進位制檔案的朋友),vc6.0的推出無疑給大家帶來的乙個驚喜.你還沒發現嗎?那讓我來給您提個醒把: 

二進位制檔案的讀寫通常而且很實用的方法是使用結構(體)先構造檔案中一條記錄的結構,再逐條讀/寫.在vc5.0中,一直存在乙個小小的弊病---如 果你使用mfc則它要求結構(體)成員位元位對齊為8位,而且你無法方便的通過選中"project-$#@62;setting-$#@62;c/c+ +"選項卡中的"code generation"再修改"struct member alignment"來使其變為1位(即使改變了,在你編譯時該 改變也會被忽略). 

當然如果你的二進位制檔案是在windows下建立的,並且只在windows下讀寫,這種影響並不明顯.但如果很不巧,你需要與dos共同讀寫乙個在 dos下建立的二進位制檔案時,它帶來的麻煩會讓你哭笑不得,尤其是你的結構中各個成員的資料型別不同時(就更別提為節省空間使用"位域"後的檔案了),結 構的長度不再是你所期望的值,原本的資料在讀出時變的亂七八糟,而你寫進去的記錄,在dos下讀取時同樣只能讓你盯著螢幕發呆. 

為了能將結構成員的對齊位降至1位,你可能已經做了很多努力,比如將二進位制檔案的讀寫全部轉移到乙個基於api的dll中,而只要求dll返回執行結 果,或者乾脆使用vc5.0編寫乙個基於api的windows的程式,也許你已經成功了,但是付出的代價也是令同行欽佩的. 

現在好了,vc6.0的推出讓苦日子成為過去了.在vc6.0中,結構成員的對齊位可以方便的降至1位!!讀寫二進位制檔案的灰暗時代終於過去了!!! 

MATLAB資料檔案讀取

matlab可以匯入.txt,csv等格式的資料檔案,下面對其進行簡單的說明。1 匯入.txt文字資料 函式格式如下 a importdata filename example a importdata pastespecial example a importdata delimiterin a ...

大資料檔案讀取方法

filepath 1.txt step 1024 1024 1m str r n start 0 i 1 count 0 do while i 1 echo count file get contents 讀取大檔案方法 param unknown patha 檔案路徑 param unknown ...

matlab 批量讀取資料檔案 mat dat

檔名如d00.dat,d01.dat,d21.dat filepath g traindata 資料夾的路徑 for i 1 3 n是要讀入的檔案的個數 load filepath d0 num2str i dat end迴圈讀取和繪製圖形 filepath g traindata 資料夾的路徑 f...