下面是我實現的乙個資料檔案隨機讀取類,可以隨機讀取大型文字檔案的某一行。在我機器上對乙個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...