2012-04-03 3 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 
- 

항상 각 블록 사이에 2 줄의 끊김이 있습니다. 내가 만든 객체에 그 블록을 넣고 싶습니다.

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

아, 전이 형식을 좋아합니다. 줄이 구분되지 않고 임의의 인코딩으로 고정 너비 필드가 포함되어있는 경우에도 ... – AKX

답변

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

블록으로 나누어야합니다.

+0

우, 아주 좋습니다! 그런 다음 블록을 선택하십시오 (b-> b.Split ("\ n")'). 그러면 블록을 문자열 배열로 가져옵니다. – zmbq

+0

튜더가 말했듯이이 방법이 마음에 듭니다. 파일이 작은 경우이 방법을 사용하고 나중에 행으로 다시 분할하십시오. 큰 경우 Tudor를 사용하십시오 –

+0

50 계정, 하루에 몇 트랜잭션 – MadBoy

0

StreamReader를 사용하여 찾고 논리를 사용하여 찾고있는 것을 찾으십시오.

StreamReader _sr = new StreamReader("YourFile"); 
_sr.ReadLine();