我有一個很大的文本文件(它有大約20k行),我需要用其替換其他文本文件中的一些文本行(大約60-70行)。 其他文件可以被稱爲模板。在這些模板的行需要換下根據一些條件來 示例內容的文件:閱讀EDI文件並寫入新文件
ISA*00* *00* *01*00*ZZ*PARTNERID~ *090827*0936*U*00401*000000055*0*T*>~
GS*PO*00*PARTNERID*20090827*1041*2*X*004010~
ST*850*0003~
BEG*00*SA*1000012**20090827~
REF*SR*N~
CSH*Y~
TD5*****UPSG~
N1*ST*John Doe~
N3*126 Any St*~
N4*Hauppauge*NY*11788-1234*US~
PO1*1*1*EA*19.95**VN*0054321~
CTT*1*1~
SE*11*0003~
GE*1*2~
IEA*1*000000001~
我從內容文件加載FILESTREAM如下,並使用流閱讀器閱讀。
FileStream baseFileStream= new FileStream("C:\\Content.txt", FileMode.Open);
然後我需要循環瀏覽一個文件夾中的模板文件。一旦我選擇一個模板文件,我將加載到另一個FileStream(max模板中將有300行)。
在閱讀文件時,我將不得不回到前幾行。但是,如果我使用ReadToEnd()
或ReadLine()
讀取文件,將不可能返回到前面的行。 爲了克服這個問題,我正在將模板讀入線條集合中。但將內容文件讀入集合是一個好主意,因爲它非常龐大。這個文件中會涉及很多搜索。這裏有什麼用途的緩衝流嗎?
或者有沒有更好的方法呢?
感謝
20k行?那個多少錢? 20 Meg?對我來說這似乎易於管理。如果你很幸運,你的內容文件是純ASCII或Unicode,我會考慮使用MemoryMappedFile(http://msdn.microsoft.com/en-us/library/dd267535.aspx)將其映射到內存中。爲什麼重要的是它是純粹的ASCII或Unicode?因爲在UTF-8中某些字符在物理上由多個字符表示,並且使用MemoryMappedFile,您將不得不手動對其進行解碼,這是非常重要的,原因有兩個。 – FuleSnabel