Esempio n. 1
0
        /// <summary>
        /// converts DMS3 formated data for 'dayflag.exe' prorgram into SeriesList
        /// each series is named  instant_cbtt_pcode,
        /// for example  instant_jck_fb
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static SeriesList HydrometDMS3DataToSeriesList(TextFile tf)
        {
            var rval = new SeriesList();

            for (int i = 1; i < tf.Length; i++) // skip first row (header)
            {
                var      strDate = tf[i].Substring(0, 14);
                DateTime t;
                if (!DateTime.TryParseExact(strDate, "yyyyMMMdd HHmm", new CultureInfo("en-US"), System.Globalization.DateTimeStyles.None, out t))
                {
                    Console.WriteLine("Bad Date, Skipping line: " + tf[i]);
                    continue;
                }
                string cbtt        = tf[i].Substring(15, 8).Trim();
                string pcode       = tf[i].Substring(24, 9).Trim();
                string strValue    = tf[i].Substring(34, 10);
                string strFlagCode = tf[i].Substring(56, 3);
                double val         = 0;

                if (!double.TryParse(strValue, out val))
                {
                    Console.WriteLine("Error parsing double " + strValue);
                    continue;
                }

                string name = "instant_" + cbtt + "_" + pcode;
                name = name.ToLower();
                var    idx = rval.IndexOfTableName(name);
                Series s;
                if (idx >= 0)
                {
                    s = rval[idx];
                }
                else
                {
                    s                 = new Series();
                    s.SiteID          = cbtt;
                    s.Parameter       = pcode;
                    s.Name            = cbtt + "_" + pcode;
                    s.Name            = s.Name.ToLower();
                    s.Table.TableName = name;
                    rval.Add(s);
                }

                string flag = DayFiles.FlagFromCode(strFlagCode);
                if (s.IndexOf(t) < 0)
                {
                    s.Add(t, val, flag);
                }
                else
                {
                    Logger.WriteLine(s.SiteID + ":" + s.Parameter + "skipped duplicate datetime " + t.ToString());
                }
            }

            return(rval);
        }
Esempio n. 2
0
        internal SeriesList ToSeries()
        {
            var rval       = new SeriesList();
            var tableNames = new string[] { };

            for (int i = 0; i < m_tf.Length; i++)
            {
                var line   = m_tf[i];
                var tokens = line.Split(',');

                if (line.ToLower().StartsWith(tag))
                {
                    tableNames = GetTableNames(tokens);
                    continue;
                }

                DateTime t;
                if (!DateTime.TryParse(tokens[0], out t))
                {
                    Console.WriteLine("invalid date/time Skipping line: " + line);
                    continue;
                }
                Series s = null;
                for (int j = 1; j < tokens.Length; j++)
                {
                    var tn  = tableNames[j - 1];
                    int idx = rval.IndexOfTableName(tn);
                    if (idx < 0)
                    {     // create new series
                        s = new Series(tn);
                        s.Table.TableName = tn;
                        rval.Add(s);
                    }
                    else
                    {     // get pointer to existing series.
                        s = rval[idx];
                    }
                    double d;
                    if (!double.TryParse(tokens[j], out d))
                    {
                        Console.WriteLine("could not parse number " + tokens[j]);
                        continue;
                    }

                    s.Add(t, d);
                }
            }

            return(rval);
        }
        /// <summary>
        /// Reads TextFile into a Series List
        /// </summary>
        /// <param name="tf"></param>
        /// <returns></returns>
        internal static SeriesList FileToSeriesList(TextFile tf)
        {
            SeriesList rval = new SeriesList();

            /*
             * cbtt,pc,Year,month,value,flag,oldValue,oldFlag
             * ARK, PM,2018,JAN,1.00,M,5.36,M
             */

            for (int i = 1; i < tf.Length; i++) // skip first row (header)
            {
                var tokens = tf[i].Split(',');
                if (tokens.Length != 8)
                {
                    Console.WriteLine("Skipping invalid line: " + tf[i]);
                    continue;
                }
                var      siteid    = tokens[0].ToLower();
                var      parameter = tokens[1].ToLower();
                DateTime t;
                if (!ParseDate(tokens[2], tokens[3], out t))
                {
                    Console.WriteLine("Error Parsing date " + tf[i]);
                    continue;
                }

                double val = 0;
                if (!double.TryParse(tokens[4], out val))
                {
                    Console.WriteLine("Error Parsing value: " + tokens[4]);
                    continue;
                }

                var flag = tokens[5];

                string name = "monthly_" + siteid + "_" + parameter;
                var    idx  = rval.IndexOfTableName(name);
                Series s;
                if (idx >= 0)
                {
                    s = rval[idx];
                }
                else
                {
                    s = new Series();
                    s.TimeInterval    = TimeInterval.Monthly;
                    s.SiteID          = siteid;
                    s.Parameter       = parameter;
                    s.Name            = siteid + "_" + parameter;
                    s.Name            = s.Name.ToLower();
                    s.Table.TableName = name;
                    rval.Add(s);
                }
                if (s.IndexOf(t) < 0)
                {
                    s.Add(t, val, flag);
                }
                else
                {
                    Logger.WriteLine(s.SiteID + ":" + s.Parameter + "skipped duplicate datetime " + t.ToString());
                }
            }
            return(rval);
        }
Esempio n. 4
0
        /// <summary>
        /// converts Daily formated data for 'arcimport.exe' prorgram into SeriesList
        /// each series is named  daily_cbtt_pcode,
        /// for example  daily_jck_fb
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static SeriesList HydrometDailyDataToSeriesList(TextFile tf)
        {
            var rval = new SeriesList();

            for (int i = 1; i < tf.Length; i++) // skip first row (header)
            {
                var      fmt     = "MM/dd/yyyy";
                var      strDate = tf[i].Substring(0, fmt.Length);
                DateTime t;
                if (!DateTime.TryParseExact(strDate, fmt, new CultureInfo("en-US"), System.Globalization.DateTimeStyles.None, out t))
                {
                    Console.WriteLine("Bad Date, Skipping line: " + tf[i]);
                    continue;
                }

                /*
                 * 07/28/2016 CKVY         MN        998877.00     40.91
                 */
                string cbtt     = tf[i].Substring(11, 12).Trim().ToLower();
                string pcode    = tf[i].Substring(24, 9).Trim().ToLower();
                string strValue = tf[i].Substring(34, 10);
                double val      = 0;

                if (!double.TryParse(strValue, out val))
                {
                    Console.WriteLine("Error parsing double " + strValue);
                    continue;
                }

                string name = "daily_" + cbtt + "_" + pcode;
                name = name.ToLower();
                var    idx = rval.IndexOfTableName(name);
                Series s;
                if (idx >= 0)
                {
                    s = rval[idx];
                }
                else
                {
                    s = new Series();
                    s.TimeInterval    = TimeInterval.Daily;
                    s.SiteID          = cbtt;
                    s.Parameter       = pcode;
                    s.Name            = cbtt + "_" + pcode;
                    s.Name            = s.Name.ToLower();
                    s.Table.TableName = name;
                    rval.Add(s);
                }

                string flag = "";
                if (s.IndexOf(t) < 0)
                {
                    s.Add(t, val, flag);
                }
                else
                {
                    Logger.WriteLine(s.SiteID + ":" + s.Parameter + "skipped duplicate datetime " + t.ToString());
                }
            }

            return(rval);
        }