• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • visual c++對大型數據文件的讀取

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    筆者前不久曾遇到一個問題,解決之后的經驗愿與大家分享。問題是這樣的,有一批數據文件,數據格式如下: 日期,開盤,最高,最低,收盤,成交量,成交金額 1996年5月13日,636.96,636.96,636.96,636.96,0,0, 1996年5月14日,641.61,641.61,641.61,641.61,0,0, 1996
    筆者前不久曾遇到一個問題,解決之后的經驗愿與大家分享。問題是這樣的,有一批數據文件,數據格式如下:

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

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

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

    1996年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))//循環讀取文件,直到文件結束

    {

    if(SourceData=="日期,開盤,最高,最低,收盤,成交量,成交金額"||SourceData=="")

    continue;//跳過文件頭部的提示信息

      //分析并填充//

    }

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

    int nYear;

    CString Year= SourceData.Left(SourceData.Find("年"));//截取年前面的字符串

    nYear=atoi(Year);//類型轉換

    SourceData=SourceData.Righ(SourceData.GetLength()-SourceData.Find("年")-2);//將年以及前面的字符刪除。

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

      通過上述方法,筆者成功地將文件讀取并分析填充。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>