我正在尝试开发一个读取HRM文件的程序。文本文件如下所示:
[IntTimes]
00:09:59.0 117 91 127 153
0 0 0 124 41 309
0 0 0 0 0
0 2181 68 0 0 0
0 0 0 0 0 0
00:10:00.0 115 91 127 153
0 0 0 119 0 309
0 0 0 0 0
33554432 2184 0 0 0 0
500 0 0 0 0 0
00:20:10.0 173 109 161 177
0 0 0 112 62 307
0 0 0 0 0
0 3461 22 0 0 0
0 0 0 0 0 0
00:25:02.0 119 111 126 172
0 0 0 190 54 308
0 0 0 0 0
0 764 133 0 0 0
0 0 0 0 0 0
00:35:16.0 174 119 167 179
0 0 0 121 52 309
0 0 0 0 0
0 3500 70 0 0 0
0 0 0 0 0 0
00:50:00.0 134 109 153 179
0 0 0 178 0 310
0 0 0 0 0
33554432 10840 0 0 0 0
500 0 0 0 0 0
01:00:00.0 150 112 139 175
0 0 0 66 0 312
0 0 0 0 0
33554432 1741 0 0 0 0
500 0 0 0 0 0
01:06:18.9 108 105 139 177
0 0 0 64 123 313
0 0 0 0 0
0 5668 0 80 0 0
0 0 0 0 0 0
我想收集所有的时间并将它们存储在一个列表或数组中,然后我将用它来绘制到ZedGraph上。我还需要每次在同一行收集第四位数字。
例如[IntTimes]
下面的第一行我想收集' 00:09:59.0
',存储它,然后收集127
并存储它。与00:10:00.0
的行相同,依此类推,直到没有剩余时间。
我已经开发了部分代码来查找方括号之间的值,如下所示,使用@"\[(.*?)\]"
的正则表达式:
if (squareBrackets.Match(line).Success)
{
titles.Add(line);
if (textAfterTitles.Match(line).Success)
{
textaftertitles.Add(line);
}
}
听起来有点啰嗦,但我真的不知道要搜索什么来实现这一目标,所以认为这是最好的地方。
由于
答案 0 :(得分:1)
您必须读取每一行,将其拆分为字符串数组,然后从数组中提取第0个索引和第3个索引。
NameValueCollection kv = new NameValueCollection();// Choose your data structure. name value collection allows duplicates.
using (StreamReader oReader = new StreamReader("your_file_path"))
{
while ((sLine = oReader.ReadLine()) != null)
{
if(!sLine.Contains("[IntTimes]") && !sLine.Contains("[IntNotes]"))
{
string[] sLineItems = sLine.Split('\t');// Assuming the file is tab delimited.
kv.Add(sLineItems[0],sLineItems[3]);
Console.WriteLine(sLineItems[0],sLineItems[3]);
}
}
}
foreach(string key in kv.AllKeys)
Console.WriteLine(key,kv[key]);
答案 1 :(得分:0)
使用CSV工具解析文件怎么样?我自己在各种文本文件上使用CSV Helper,它可以处理许多不同的格式。您可以设置许多配置来根据需要调整解析。
它也可以作为NuGet package。