Чтение файлов EDI и запись в новый файл - PullRequest
0 голосов
/ 10 августа 2011

У меня большой текстовый файл (около 20 тыс. Строк), с помощью которого мне нужно заменить некоторые строки текста в других текстовых файлах (около 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(), возврат к предыдущим строкам будет невозможен.Чтобы преодолеть это, я читаю шаблон в коллекцию строк.Но будет ли хорошей идеей прочитать файл Content в коллекцию, так как он очень большой.В этом файле будет много поиска. Будет ли здесь полезен буферизованный поток?

Или есть ли лучший подход для этого?

Спасибо

1 Ответ

2 голосов
/ 10 августа 2011

По-моему, вы почти в ситуации «лови 22». Либо вы загружаете большой файл в память (через свою коллекцию), что в зависимости от среднего размера и объема памяти, доступной на сервере, может быть лучшим подходом, либо другой альтернативой может быть перебор файлов шаблона и для каждой итерации, загрузить новый файловый поток, открывая каждый раз большой файл (медленнее из-за файлового ввода-вывода, но с низким потреблением памяти), чтобы вы могли выполнить «поиск», поскольку все мы знаем, что файловый поток только вперед.

...