在文本文件中的第4列中提取时间和值

时间:2016-02-29 20:48:35

标签: c# forms streamreader readfile

我正在尝试开发一个读取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);

            }
        }

听起来有点啰嗦,但我真的不知道要搜索什么来实现这一目标,所以认为这是最好的地方。

由于

2 个答案:

答案 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