/// <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); }
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); }
/// <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); }