C 快速隨機按行讀取大型文字檔案

2022-07-15 09:12:13 字數 1494 閱讀 6008

下面是我實現的乙個資料檔案隨機讀取類,可以隨機讀取大型文字檔案的某一行。在我機器上對乙個130mb的文字檔案,讀取第200000的速度從傳統做法的400ms提高到了3ms。

一般對文字檔案進行讀取時,一般採用readline()進行逐行讀取。在這種情況下,c#內的filestream和bufferedstream類處理綽綽有餘了。它不會將整個檔案全部讀入,而是有緩衝的讀。但是,要想隨機讀取某一行,在行資料長度不統一的情況下,如果每次這樣遍歷到指定行,其效率顯然是很低下的。

當然,代價也是有的,引入了第一次開啟檔案的開啟時間,且占用了少部分記憶體(占用多少是可以設定的,當然佔得越小速度也越慢,但最大值也比全部讀入要小很多)。

(對網路**進行部分改寫)

using system;

using system.collections.generic;

using system.text;

using system.collections;

using system.threading;

using system.io;

namespace databuffer

public class datafile

set }

///

/// 檔案地圖

///       

private arraylist map = new arraylist();

public arraylist map set }

///

/// 檔案資料行行數

///       

private long lines = 0;

public long lines set }

}public class databuffer

///

/// 開啟檔案

///public bool open()

catch (exception ee)

}private void initdatafile()

}datafile.lines = lines;

datafile.done = true;

}///

/// 檔案關閉

///public bool close()

catch (exception ee)

}///

/// 順序讀取下一行。效率低不建議大規模使用,只在開啟檔案的時候使用一次

//////

public string nextline(ref streamreader sr)

//指定的目標行內容

public string readline(long line)

//返回指定行的值

return sr.readline();

}else

}catch (exception ee)}}

}

VC和C 按行讀取文字檔案

1.mfc cstring filename d 3.txt files d 32.txt filestring cstdiofile f,g if f.open filename,cfile moderead true filename為開啟檔名 cstring decimaltobinary c...

linux讀取按行讀寫文字檔案

1.include 2.include 3.include 4.include 5.include 6.include 7.8.9.typedef struct item t item 13.14.15.去除字串右端空格 16.17.char strtrimr char pstr 18.25.26....

Python讀取大型文字檔案

最近磕鹽過程中需要處理乙個大型文字檔案,大約70g。在按行讀取檔案過程中遇到了載入慢,記憶體占用過高的問題。經過查詢資料最終解決了問題。趁此機會也大致總結比較一下python開啟檔案的幾種方式。f open filename,r lines f.readlines for line in lines...