C#从特定时间到特定时间读取所有行

时间:2016-07-18 14:45:08

标签: c# linq

我正在尝试从特定开始时间到特定结束时间的文本文件中获取行,例如如果我的Range TimeSpan是从上午10:00开始的FromHours(10),则程序应该读取包含开始时间“上午10:00”的所有行,直到特定的结束TimeSpan“17:00 pm”。您的帮助将受到高度赞赏。

输入文件是这样的:

2016/05/11 10:14:00 blah blah blah dah dah dah

2016/05/11 12:14:00 dah dah dah blah blah blah blah

2016/05/11 16:14:00 dah dah dah blah blah blah blah

2016/05/11 17:24:00 dah dah dah blah blah blah blah

文件中每行的开头包含日期和时间。

这是我到目前为止的代码:

   var FilePath = new DirectoryInfo("C:\\music\\playlist.txt");

     List<string> list = new List<string>();

    var StartTime = DateTime.Today.Add(TimeSpan.FromHours(10)).ToShortTimeString();

    var EndTime = DateTime.Today.Add(TimeSpan.FromHours(17)).ToShortTimeString();

       foreach (var line in FilePath )
                {
                    StreamReader read = line.OpenText();

                    while ((inside = read.ReadLine()) != null)
                    {
                        list.Add(inside);
                    };

                    string[] array = list.ToArray();        

       for (int i = 0; i < array.Length; i++)
                {
 if (array[i].Contains(StartTime) and is greater than StartTime, Display lines and stop Displaying if you find EndTime )
                    {
                         Console.WriteLine(array[i]);
                    };

            };

1 个答案:

答案 0 :(得分:1)

您可以尝试使用 Linq :提取日期并过滤

var result = File
  .ReadLines(@"C:\music\playlist.txt")
  .Select(line => line.Split(new char[] {' '}, 3))
  .Select(items -> new {
     date = DateTime.ParseExact(items[0] + " " + items[1], 
                                "yyyy/M/d H:m:s", 
                                CultureInfo.InvariantCulture), 
     text = items[2]
   })
  .Where(item => item.date >= specificStartTime && 
                 item.date <= specificEndTime)
  .Select(item => string.Format("{0} {1}", 
                                item.date.ToString("yyyy/MM/dd HH:mm:ss"), 
                                item.text));