C# 读取EDI文件并写入新文件
我有一个大的文本文件(大约有20k行),使用它我需要替换其他文本文件中的一些文本行(大约60-70行)。 其他文件可以称为模板。根据某些条件,需要替换这些模板中的行 文件的示例内容:C# 读取EDI文件并写入新文件,c#,linq,comparison,filestream,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*
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);
然后我需要逐个循环遍历文件夹中的模板文件。一旦我选择了一个模板文件,我将加载到另一个文件流中(模板最多有300行)
在阅读文件时,我将不得不多次回到前面的几行。但是如果我使用ReadToEnd()
或ReadLine()
方法读取文件,则无法返回到前几行。
为了克服这个问题,我将模板读入行集合中。但是将内容文件读入一个集合是一个好主意,因为它非常庞大。该文件将涉及大量搜索。缓冲流在这里有用吗
还是有更好的方法
谢谢在我看来,你几乎陷入了第二十二条军规的境地。要么将大文件加载到内存中(通过集合),这取决于服务器上的平均大小和可用内存,可能是最好的方法,要么另一种方法是迭代模板文件,每次迭代都加载一个新文件流打开大文件(因为文件I/O慢,但内存消耗低),这样你就可以执行“搜索”了,因为我们都知道文件流只是向前的。20K行。多少钱?20兆欧?对我来说似乎是可管理的。如果你幸运的话,你的内容文件是纯ASCII或Unicode,我会考虑使用内存MyFrdFrfile()。将其映射到内存中。为什么它是纯ASCII或Unicode很重要?因为在UTF-8中,某些字符在物理上由多个字符表示,并且使用MemoryMappedFile,您必须手动对其进行解码,这非常重要,原因有二。