열로 서식이 지정된 텍스트 보고서를 구문 분석하려고합니다. 각 열은 고정 길이로 오른쪽 정렬됩니다. 각 행마다 모든 열이 사용되는 것은 아닙니다. 이 경우 공백은 행의 각 열을 양쪽 정렬하는 데 사용됩니다. 예 입력 :고정 된 열 너비의 가변 길이 문자열 구문 분석 C#
031 91 1221,154
043 66 312,222 1 3,047 3,047 1.5% .9%
040 118 529,626 1 1,842 1,842 .8% .3%
037 45 427,710
019 80 512,153 1 14,685 14,685 1.2% 2.8%
009 68 520,301 1 16,085 16,085 1.4% 3.0%
030 13 106,689 1 1,581 1,581 7.6% 1.4%
008 54 377,593 1 7,098 7,098 1.8% 1.8%
018 24 171,264
022 25 8,884 1 433 433 4.0% 4.8%
035 9 42,043
041 13 112,355
폭은 다음과 같이 표시 될 열 (공백 문자에 포함 계산) 3,5,12,6,10,7,10,11,8,7.
이것을 파싱하는 좋은 방법은 무엇입니까? 정규 표현식을 사용하여 시도했지만, 전체 행에 데이터가있을 것으로 기대하는 식을 사용하기 때문에 첫 번째 행을 읽을 때 분명히 실패합니다.
문자열 패턴 = @ "^ (?. (? {10}) (?. {10}) (?. {10}) (? {12}) (?
해당 열에 데이터가 있는지 여부에 따라 적절한 변수를 읽는 좋은 방법을 찾고 있습니다. 내가 필요로하는 것처럼 느껴집니다. (예 : {8}) (? 에서 if
검사의 무리를 던져,하지만이 바라고하는 것은 내가 생각하고 있지 않다 더 나은 방법입니다.
덕분에 어떤 도움을.
을BTW - StreamReader 및 ReadLine을 사용하여 선을 읽습니다.
아래쪽 투표와 함께 의견이 있으십니까? –
내 대답과 마찬가지로 인덱스가 범위를 벗어나므로 맨 오른쪽 열이 채워지지 않은 행에서는이 작업이 실패합니다. 그러나 당신의 대답은 이것을 극복하기 위해 적응하기가 훨씬 쉬울 것입니다, 나는 기대합니다 :) – Rawling
Substring 방법을 고려했기 때문에 누가 투표를했는지 모르겠습니다. Rawling은 나에게 새로운 것을 고려해 보았습니다.하지만 입력 라인에 패딩을 추가하는 것만으로는 Substring이 가장 쉬운 해결책이 될 것입니다 (Rawlings 방법을 배울 때까지). – Shawn