2013-03-01 4 views
0

텍스트 파일에서 데이터를 검색하기 위해 무언가를 쓰려고 시도했지만 데이터 형식이 파일의 작은 섹션에서만 발생합니다. 현재 저는 아래의 코드를 사용하여 헤더 태그를 읽고 저장 한 다음 파일 내에있는 섹션을 찾은 다음 목록에서 필요한 데이터를 분할하고 저장합니다. 파일에는 더 많은 헤더가 있지만, 지금은이 헤더가 주요 관심사입니다.구문 분석 문제 C#

데이터 만있는 간단한 테스트 파일을 사용하는 경우 두 번째 if 문 내의 코드가 올바르게 작동하고 데이터를 올바르게 저장합니다. 그러나 다음 데이터를 구문 분석하기 전에 파일 헤더를 통해 읽으려고하면 문자열이 잘못된 형식이라는 오류가 나타납니다.

if (line.StartsWith("[")) 
{ 
    section = line.Trim(); 
    MessageBox.Show(section); 

} 

if (section.Contains("HRData")) 
{ 
    string[] items = line.Split('\t'); 
    int myInteger = int.Parse(items[0]); 
    BPMData.Add(myInteger); 
    BPMavg += myInteger; 
    myInteger = int.Parse(items[1]); 
    myInteger = myInteger/10; 
    SpeedData.Add(myInteger); 
    Speedavg += myInteger; 
    myInteger = int.Parse(items[2]); 
    CadenceData.Add(myInteger); 
    myInteger = int.Parse(items[3]); 
    AltitudeData.Add(myInteger); 
    myInteger = int.Parse(items[4]); 
    PowerData.Add(myInteger); 
    Poweravg += myInteger; 
} 

저는 MessageBox를 사용하여 파일을 실행하는 프로그램을 보여줍니다. 아래에 다시 문제의 파일에서 작은 추출물입니다. 아마 내가 얼굴을 응시하고있을지라도 문제를 해결하는 방법을 모르겠습니다.

당신이 줄 수있는 조언이 있으면 좋을 것입니다.

[HRData] 
107 129 0 -19 0 50 
+0

당신은 잘못된 형식의 메시지가 (내가 Int.Parse''에서 가정 것을 얻을 때), 입력 라인은 어떻게 생겼는가? '[HRData]'섹션 다음에 형식이 잘못된 라인이있을 가능성이 있습니까? –

+1

[디버거를 사용하십시오] (http://www.dotnetperls.com/debugging),'items'의 내용이 무엇인지 확인하십시오 –

+0

무엇이 오류입니까? 어떤 코드 라인에서? 디버거가 관련 변수의 값을 알려줍니다. – millimoose

답변

2

section[HRData]을 포함, 그래서 당신은 읽고 다음 줄을 구문 분석합니다. 당신이 사용하는 경우

+0

방금 ​​다음 줄을 보려고 시도한 다음 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 오류를 표시하기 전에 데이터의 첫 번째 줄을 읽습니다. 오류 메시지를 클릭하면 표가 첫 번째 데이터 행으로 업데이트되었습니다. – Sokudan

+0

정확히 어디에서 오류가 발생합니까? 이제는 한 줄의 데이터 만 사용해보십시오. – Patrik

+0

알았어, 그냥 변수를 약간 이동해야하고 지금은 잘 작동합니다. – Sokudan

0

a 또는 foreach는 루프를 들어, 대신이를 사용하는 첫 번째 경우 문 :

if (line.StartsWith("[")) 
{ 
    section = line.Trim(); 
    MessageBox.Show(section); 
    continue; 
}