>09/06/2009 13:09:54 - PJK accessed MCN: 4403010057 - Mr Peter Kane >>
«09/06/2009 13:09:54» «PJK accessed MCN» «4403010057» «Mr Peter Kane» «10/06/2009 14:09:54» «ABC accessed QRS» «5403010057» «Mr Alfred Cucumber»Sample program
using System; using System.Collections.Generic; using System.Linq; using System.Text; //using GregoryAdam.Base.Debugging; //using GregoryAdam.Base.Text.RegEx; using System.Net; using System.IO; using System.Text.RegularExpressions; using System.Diagnostics; namespace BaseTest { //______________________________________________________________________ class Program { static string LogContents = @"09/06/2009 13:09:54 - PJK accessed MCN: 4403010057 - Mr Peter Kane 10/06/2009 14:09:54 - ABC accessed QRS: 5403010057 - Mr Alfred Cucumber"; public static void Main() { using (StreamReader rdr = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(LogContents))) ) { List<LogEntry> list = LogParser.Parse(rdr); foreach (LogEntry entry in list) { Console.WriteLine("«{0}» «{1}» «{2}» «{3}» ", entry.When, entry.Message, entry.Number, entry.Who ); } } Console.ReadLine(); } } //______________________________________________________________________ public static class LogParser { static string LinePattern = // 09/06/2009 13:09:54 - PJK accessed MCN: 4403010057 - Mr Peter Kane @"^(?<DateTime>\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2}:\d{2})\s+-\s+(?<Message>[^:]+):\s+(?<Number>\d+)\s+-\s+(?<Who>.+)$"; //______________________________________________________________________ public static List<LogEntry> Parse(StreamReader stream) { var list = new List<LogEntry>(); while (!stream.EndOfStream) { string line = stream.ReadLine(); Match match = Regex.Match(line, LinePattern); if (match.Success) { list.Add(new LogEntry( Convert.ToDateTime(match.Groups["DateTime"].Value), match.Groups["Message"].Value, match.Groups["Number"].Value, match.Groups["Who"].Value ) ); } else { Debug.Assert(false, "cannot parse", line); } } return list; } } //______________________________________________________________________ public class LogEntry { public readonly DateTime When; public readonly string Message; public readonly string Number; public readonly string Who; //______________________________________________________________________ public LogEntry ( DateTime when, string message, string number, string who ) { When = when; Message = message; Number = number; Who = who; } //______________________________________________________________________ } }