2012-04-03 2 views
4

У меня есть файл из банка, который является структурой очень особым образом. Если есть номер счета (25), начало сальдо счета (60F), остановка остатка на счете (62F) и транзакции (61 для транзакции и 86 для этой транзакции).Прочитайте весь файл в блоках в C#

:20:STARTSUM 
:25:/PL2321109943011 
:28C:0330/001 
:60F:C100PLN38,74 
:62F:C103PLN38,74 
- 


:20:STARTSUM 
:25:/PL24160011982002123456001 
:28C:0403/001 
:60F:C030403PLN36000,00 
:61:0304030403CN100,00S723NONREF//CENT30403H000200 
:86:723>00PRZELEW OTRZYMANY ELIXIR>20Fakt VAT 1 nr 00911/03 
:86:723>3010501445>3125-00001201467436 
:86:723>32Firma XXXXXXXXXXă>33Krakow 
:61: 0304030403DN1000,00S223NONREF//CENT30403H002342 
:86:223>00PRZEL KRAJ MULTICASH>20000004020 20021224 Fa. 0095 
:86:223>21007203-FIRMA SP. Z O>308510101010>31123456789
:86:223>32FRIMA XXXXXXXXXX UL. GNI>33EZNIENSKA 1 
:86:223>38851010101
:86:223>60851010101
:61:0304030403CN100,00S723NONREF//CENT30403H000230 
:86:723>00PRZELEW OTRZYMANY ELIXIR>20Fakt VAT 1 nr 00911/03 
:86:723>308510101010>31123456789
:86:723>32Firma XXXXXXXXXXă>33Krakow 
:86:223>38851010101
:86:223>60851010101
:62F:C030403PLN35200,00 
- 


:20:STARTSUM 
:25:/PL2321109944011 
:28C:0330/001 
:60F:C120330PLN43,45 
:62F:C120330PLN43,45 
- 


:20:STARTSUM 
:25:/PL1109945011 
:28C:0330/001 
:60F:C1230PLN3,50 
:62F:C1230PLN3,50 
- 

У него всегда есть две линии разрывов между каждым блоком. Я хотел бы поместить эти блоки в объект, который я создаю.

string[] test = File.ReadAllLines(file); 
foreach (var s in test) { 

} 

Как я могу подойти к нему надлежащим образом? Обычно я бы пошел по линии foreach и попытался разделить блоки пустыми 2 строками, а затем продолжить, выполняя несколько операторов if/else. Но, может быть, есть простой/лучший подход к этому?

+0

Некоторые из ответов на [этот вопрос] (http://stackoverflow.com/questions/1562021/filereader-class-in-c-sharp) поможет вам близко. –

+0

Вы можете посмотреть этот пост http://stackoverflow.com/questions/5880401/swift-message-parsing-for-net –

+0

Ahhh, мне просто нравятся эти устаревшие форматы. Еще лучше, когда строки не ограничены, но содержат поля фиксированной ширины в некотором произвольном кодировании ... – AKX

ответ

6
string[] blocks = (file.ReadAllText(file)).split(new string[] {"\n\n\n"}, StringSplitOptions.None) 

Необходимо разбить его на блоки.

+0

Ooooh, очень хорошо! Затем вы просто «blocks.Select» (b-> b.Split («\ n») »и получаете блоки как строковые массивы. – zmbq

+0

Мне нравится этот подход, если предположить, что файл не массивный, поскольку Tudor говорит, что это может быть. Если файл невелик, используйте этот подход (и снова разделите его на строки позже) .Если он большой, используйте Tudor's. –

+0

Это не должно быть массивным. 50 учетных записей, пару транзакций в день. – MadBoy

0

Посмотрите на использование StreamReader и используйте свою логику, чтобы найти то, что ищете.

StreamReader _sr = new StreamReader("YourFile"); 
_sr.ReadLine(); 
Смежные вопросы