读取EDI文件并写入新文件

时间:2011-08-10 09:39:14

标签: c# linq comparison filestream

我有一个大文本文件(大约有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()方法读取文件,则无法返回上一行。 为了解决这个问题,我正在将模板读入行集合中。但是将内容文件读入集合是一个好主意,因为它非常庞大。这个文件中会涉及很多搜索。缓冲流会在这里有用吗?

或者有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:2)

在我看来,你几乎陷入困境。您要么将大文件加载到内存中(通过您的集合),这取决于服务器上可用的平均大小和内存,可能是最好的方法,或者另一种方法是迭代模板文件,并且对于每次迭代,加载每次打开大文件的新文件流(由于文件I / O较慢,但内存消耗较低),因此您可以执行“搜索”,因为我们都知道文件流只是转发。