예제 #1
0
        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;
        }
예제 #2
0
        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$"));
        }