我有一个大文本文件(大约有20k行),我需要用它来替换其他文本文件中的一些文本行(大约60-70个)。 其他文件可以作为模板调用。这些模板中的行需要根据某些条件进行替换 文件的示例内容:
ISA*00* *00* *01*000123456 *ZZ*PARTNERID~ *090827*0936*U*00401*000000055*0*T*>~
GS*PO*000123456*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 baseFileStream= new FileStream("C:\\Content.txt", FileMode.Open);
然后我需要逐个遍历文件夹中的模板文件。一旦我选择了一个模板文件,我将加载到另一个FileStream(最大模板将有300行)。
在阅读文件时,我将不得不多次返回前一行。但是,如果我使用ReadToEnd()
或ReadLine()
方法读取文件,则无法返回上一行。
为了解决这个问题,我正在将模板读入行集合中。但是将内容文件读入集合是一个好主意,因为它非常庞大。这个文件中会涉及很多搜索。缓冲流会在这里有用吗?
或者有更好的方法吗?
由于
答案 0 :(得分:2)
在我看来,你几乎陷入困境。您要么将大文件加载到内存中(通过您的集合),这取决于服务器上可用的平均大小和内存,可能是最好的方法,或者另一种方法是迭代模板文件,并且对于每次迭代,加载每次打开大文件的新文件流(由于文件I / O较慢,但内存消耗较低),因此您可以执行“搜索”,因为我们都知道文件流只是转发。