2013-03-01 56 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]'部分之后是否有格式不正确的行? – 2013-03-01 15:33:30

+1

[使用调试器](http://www.dotnetperls.com/debugging),查看“items”的内容是什么样子的 – 2013-03-01 15:33:44

+0

你得到的错误是什么?在哪行代码?调试器告诉你相关变量的值是什么? – millimoose 2013-03-01 15:33:52

回答

2

section包含[HRData],所以你想读和解析下一行。

+0

我只是想让它看看下一行,然后在给出错误“对象引用未设置为对象的实例”之前,它会读取第一行数据。当单击错误消息时,该表已更新第一行数据。 – Sokudan 2013-03-01 15:58:15

+0

错误发生在哪里?你现在只使用一行数据吗? – Patrik 2013-03-01 16:05:50

+0

明白了,只需稍稍移动变量,现在就可以正常工作。 – Sokudan 2013-03-01 16:14:00

0

如果你使用一个for循环或一个foreach,代替使用这是你的第一个if语句:

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