C C 獲取檔案中有效行的數量

2021-07-03 14:09:48 字數 2120 閱讀 1449

幾種獲取檔案有多少行的方法

使用c++中的ifstream 與 getline函式搭配使用 如:

std::string file_name = "f:\\phone_num_10000000.txt";

std::ifstream ifs(file_name.c_str());

int line_count = 0;     ///記錄檔案中行的數量

std::string tmp_content; ///臨時儲存行資料

while (!ifs.eof())

std::cout << "line_count = "

<< line_count << std::endl;

以上想法是最先想到的,執行上面的程式,使用clock()函式計數,處理10000000行條資料大概用了3500左右的cpu時鐘週期

經過每條語句的跟著,發現時間基本上全用在呼叫std::getline函式用了上了。出現這種原因,是頻繁的io操作,而io操作都很昂貴。

針對上面的原因,時間主要用在io操作上,我們可以減少io操作,以達到提供效能,改進的方法**如下:

std::string file_name = "f:\\phone_num_10000000.txt";

struct stat s;

stat(file_name.c_str(), &s);

///獲取指定文字的行數

std::string file_buf(s.st_size + 1, '\0');

///將檔案中的資料一次性讀出來

std::ifstream ifs(file_name.c_str());

ifs.read(&file_buf[0], 

file_buf.size());

int line_count = 0; ///記錄檔案中行的數量

const

char* file_buf_tmp = file_buf.c_str(); ///獲取檔案內容指標

while (*file_buf_tmp != '\0')

///過濾空行

line_count += p - file_buf_tmp > 0;

///查詢下乙個'\n'

file_buf_tmp += p - file_buf_tmp + 1; }

std::cout << "line_count = "

<< line_count << std::endl;

經過下面改進的**,測試中時間縮短到800左右的cpu時鐘週期,單獨測試上面那個while迴圈,只是用了200左右的時鐘週期,也就是說讀檔案到快取用了將近

600左右時鐘週期,邏輯處理效能已經很好了, 那還能不能優化io操作效能呢,我們嘗試著將c++讀取檔案修改c語言讀取檔案試試,具體**如下:

std::string file_name = "f:\\phone_num_10000000.txt";

struct stat s;

stat(file_name.c_str(), &s);

///獲取指定文字的行數

std::string file_buf(s.st_size + 1, '\0');

///將檔案中的資料一次性讀出來

file* fp = fopen(file_name.c_str(), "rb");

fread(&file_buf[0], sizeof(char), file_buf.size(), fp);

int line_count = 0; ///記錄檔案中行的數量

const

char* file_buf_tmp = file_buf.c_str(); ///獲取檔案內容指標

while (*file_buf_tmp != '\0')

///過濾空行

line_count += p - file_buf_tmp > 0;

///查詢下乙個'\n'

file_buf_tmp += p - file_buf_tmp + 1; }

std::cout << "line_count = "

<< line_count << std::endl;

經過測試,目前處理只需要500左右的時間週期,改用c語言讀取檔案比起c++讀取資料效能提高了將近一半。

Python如何獲取檔案指定行的內容

linecache,可以用它方便地獲取某一檔案某一行的內容。而且它也被 trxjkzenlaceback 模組用來獲取相關原始碼資訊來展示。用法很簡單 import linecache linecache.getline etc passwd 4 sys x 3 3 sys dev bin sh n...

C C 獲取檔案大小(長度)的方法

c 如何得到檔案的大小 先用fopen開啟檔案,然後把檔案指標指向檔案尾.再用ftell獲得檔案指標當前位置 即檔案長度 源 include stdafx.h include include using namespace std int main fseek fp,0,seek end 定位到檔案...

C C 獲取目錄下的檔案列表資訊

在c c 程式設計時,需要獲取目錄下面的檔案列表資訊。1.資料結構 struct dirent struct dirstream typedef struct dirstream dir 2.程式示例 其中程式中win不支援檔案型別 d type 可以根據檔名稱字尾來判斷檔案型別 linux可以直接...