一、概述
在實際的軟體開發項目中,經常需要處理大量的檔案。某些檔案中包含了相當多的資料記錄數,如作者本人參與過的項目中,一個檔案中有好幾十萬條記錄。如果一次性将多條記錄讀入,則會花費大量的處理時間,且占用大量的記憶體。
為此,要求對于包含大量資料記錄的檔案進行分批讀取操作,即每一輪讀取一定數目的資料記錄,待将這些記錄處理完成之後,再讀取下一批資料。本文介紹分批讀取檔案中資料的程式流程,并給出了C程式實作。
二、總體程式流程
實作分批讀取檔案中資料的程式流程如圖1所示。
圖1 實作分批讀取檔案中資料的程式流程
三、C程式實作
本程式命名為BatchReadFile.c,具體代碼如下:
四、程式說明
1.被讀取的檔案命名為“TestFile.txt”,存放在“/home/zhou/zhouzx/test/file/”目錄下。
2.為了友善看到效果,程式中設定每一次最大讀取條數為5,每條記錄的最大長度為50(最大長度值的設定的依據是讀取的檔案記錄的長度)。将讀取到的記錄存放到一個二維數組變量中,其中第一維是每次讀取到的記錄條數,第二維是每條記錄的長度。
3.如果一輪未讀完資料,則檔案指針會自動跳到下一次讀取的記錄的開頭。結束一輪讀取的條件有三個:已達讀取上限、記錄已全部讀完、讀取錯誤。
4.如果檔案中出現了空行,那麼程式并不會将之作為有效行而使得讀取條數增加,而是從下一個非空行開始繼續計數。
5.程式會列印出讀取的次數及每次讀取到的具體記錄資訊,友善檢視程式分批處理的執行情況。
五、程式編譯及運作結果
在Linux下,使用“gcc -g -o BatchReadFile BatchReadFile.c”指令對程式進行編譯,生成“BatchReadFile”。下面執行“BatchReadFile”指令來對程式進行測試。
1.“TestFile.txt”檔案中的内容如下:
則程式運作結果為:
2.“TestFile.txt”檔案中的内容如下:
3.“TestFile.txt”檔案中的内容如下:
4.“TestFile.txt”檔案中的内容如下:
可見,即使檔案中存在空行,程式也能夠正常處理。
六、總結
本文對分批讀取檔案中資料的程式流程進行了介紹,并給出了C程式實作。在實際的軟體開發項目中,每個檔案包含的記錄條數要多很多,但基本的程式編寫流程是一樣的。大家可以根據實際需要對本文中的程式進行修改來滿足具體的要求。
本人微信公衆号:zhouzxi,請掃描以下二維碼: