다른 텍스트 파일 (약 60-70 개)의 텍스트 행을 대체해야하는 큰 텍스트 파일 (약 20k 행)이 있습니다. 다른 파일을 템플릿으로 호출 할 수 있습니다. 이러한 템플릿의 선은 샘플 컨텐츠 파일의 일부 조건에 따라 한 바뀌 필요가있다 : 나는 아래와 같은 내용의 파일에서 파일 스트림을로드하고 스트림 리더를 사용하여 읽고있다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 baseFileStream= new FileStream("C:\\Content.txt", FileMode.Open);
그런 다음 하나씩 폴더의 템플릿 파일을 반복해야합니다. 템플릿 파일을 선택하면 다른 FileStream에로드됩니다 (최대 300 개의 템플릿에 템플릿이 생깁니다).
파일을 읽는 동안 나는 여러 번 이전 줄로 돌아 가야 할 것입니다. 그러나 ReadToEnd()
또는 ReadLine()
메서드를 사용하여 이전 줄로 돌아가는 파일을 읽는 것은 불가능합니다. 이것을 극복하기 위해 템플릿을 라인 모음으로 읽습니다. 그러나 콘텐츠 파일을 매우 큰 것처럼 컬렉션으로 읽는 것이 좋습니다. 이 파일에 관련된 검색이 많이있을 것입니다. 버퍼링 된 스트림은 여기에서 사용할 수 있습니까?
아니면 더 좋은 방법이 있습니까?
감사합니다.
20k 회선? 그건 얼마인가요? 20 메그? 나에게 그것은 관리할만한 것 같다. 운이 좋다면 콘텐츠 파일이 순수한 ASCII 또는 유니 코드 인 경우 MemoryMappedFile (http://msdn.microsoft.com/en-us/library/dd267535.aspx)을 사용하여 메모리에 매핑하는 것이 좋습니다. 순수 ASCII 또는 유니 코드 인 것이 중요한 이유는 무엇입니까? UTF-8에서 일부 문자는 물리적으로 여러 문자로 표시되기 때문에 MemoryMappedFile을 사용하면 수동으로 디코드해야합니다. 몇 가지 이유로 그다지 중요하지 않습니다. – FuleSnabel