public static TimeSeriesDatabaseDataSet.RatingTableDataTable ParseRatingTableData(TextFile tf, string cbtt, string pcode) { /* <table border="1" summary="Expanded Rating Table"> <tr align="center"> <th width="80px"><b>ft</b></th> <th width="80px"><b>cfs</b></th> </tr> * * Table Edit Date: 18-SEP-2014 02:22 <tr align="right"><td>2440.01</td><td>-704.00</td></tr> <tr align="right"><td>2440.02</td><td>-704.00</td></tr> <tr align="right"><td>2440.03</td><td>-704.00</td></tr> <tr align="right"><td>2440.04</td><td>-704.00</td></tr> */ TimeSeriesDatabaseDataSet.RatingTableDataTable t = new TimeSeriesDatabaseDataSet.RatingTableDataTable(); int idx = tf.IndexOfBothRegex("<th.*</th>", "<th.*</th>"); if (idx >= 0) { t.XUnits = Regex.Match(tf[idx], @"<th.*<b>(?<x>\w*)</b>").Groups[1].Value; t.YUnits = Regex.Match(tf[idx + 1], @"<th.*<b>(?<x>\w*)</b>").Groups[1].Value; } //<br>Table Edit Date: 18-SEP-2014 02:22<br>Today's Date: 23-SEP-2014 06:54 var idxDate = tf.IndexOfRegex("Table Edit Date:.*<br>"); if (idxDate >= 0) { t.EditDate = Regex.Match(tf[idxDate], "Table Edit Date:(?<date>.*)<br>").Groups[1].Value; } Regex re = new Regex(@"<tr.*?>(?<x>[\d\.\-\+]{1,12})</td><td>(?<y>[\d\.\-\+]{1,12})</td>"); for (int i = idx + 2; i < tf.Length; i++) { var m = re.Match(tf[i]); if (m.Success) { double x, y; if (double.TryParse(m.Groups["x"].Value, out x) ) { if (double.TryParse(m.Groups["y"].Value, out y) && System.Math.Abs(998877 - y) > 0.01 ) { t.AddRatingTableRow(x, y); } } } } t.Name = "Hydromet " + cbtt + " " + pcode; idx = tf.IndexOfRegex("<b>Station .+<br />"); if (idx >= 0) t.Name = Regex.Match(tf[idx], "<b>Station (.+)<br />").Groups[1].Value; return t; }
public void IndexOfRegex() { TextFile tf = new TextFile(data); Assert.AreEqual(9, tf.IndexOfRegex("Jackson$")); Assert.AreEqual(4, tf.IndexOfRegex("object_name: Jackson")); Assert.AreEqual(13, tf.IndexOfRegex("^object_name: Jackson$")); Assert.AreEqual(16, tf.IndexOfBothRegex("^object_name: Jackson$", "^slot_name: Inflow$")); }