コード例 #1
0
        public Tag GetTagFromCSV(string fileName, TagCSV tagCSV)
        {
            Tag tag = new Tag()
            {
                TagName = tagCSV.TagName, TagDescription = tagCSV.TagNameRus
            };

            StreamReader fileStream = OpenFile(fileName);

            string timeStampStr;
            string valueStr;

            string fistLine;

            if (fileStream != null)
            {
                fistLine = fileStream.ReadLine();
                fistLine = Regex.Replace(fistLine, "[@,%\\.\"'\\\\]", string.Empty);
                fistLine = fistLine.Replace("-", "_");
                fistLine = fistLine.Replace("/", "_");

                string[] headerLine = fistLine.Split(';');
                //string[] headerLine = fileStream.ReadLine().Split(';');

                //TODO: Доработать проверку что в этом  есть этот тег
                if (headerLine[tagCSV.TimeStampColumn].Contains(tagCSV.TagNameRus) && headerLine[tagCSV.ValueColumn].Contains(tagCSV.TagNameRus))
                {
                    NumberFormatInfo nfi = new NumberFormatInfo()
                    {
                        NumberDecimalSeparator = "."
                    };

                    while (fileStream.Peek() > 0)
                    {
                        string[] dataLine = fileStream.ReadLine().Split(';');

                        if (tagCSV.TimeStampColumn < dataLine.Length - 1 && tagCSV.ValueColumn < dataLine.Length - 1)
                        {
                            timeStampStr = dataLine[tagCSV.TimeStampColumn];
                            valueStr     = dataLine[tagCSV.ValueColumn];

                            if (!string.IsNullOrEmpty(timeStampStr) && !string.IsNullOrEmpty(valueStr))
                            {
                                TagValue tagValue = new TagValue();
                                //tagValue.ValueString = valueStr.Trim();
                                tagValue.ValueFloat = decimal.Parse(valueStr, NumberStyles.Float, nfi);
                                tagValue.TimeStamp  = Convert.ToDateTime(timeStampStr.Trim());
                                tag.TagValues.Add(tagValue);
                            }
                        }
                    }
                }
                fileStream.Close();
            }
            return(tag);
        }
コード例 #2
0
        /// <summary>
        /// Получения списка Тегов в содержащихся в файле CSV
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public List <TagCSV> GetListTagFromCSV(string fileName)
        {
            List <TagCSV> retList    = new List <TagCSV>();
            StreamReader  fileStream = OpenFile(fileName);

            //debug
            string fistLine;

            if (fileStream != null)
            {
                //char[] charsToTrim = { '%','"', '/', '\'' };
                //не удаляет первый символ "\"
                //fistLine = fileStream.ReadLine().Trim(charsToTrim);
                fistLine = fileStream.ReadLine();
                fistLine = Regex.Replace(fistLine, "[@,%\\.\"'\\\\]", string.Empty);
                fistLine = fistLine.Replace("-", "_");
                fistLine = fistLine.Replace("/", "_");

                //s = s.Replace("\"", "")

                string[] headerLine = fistLine.Split(';');

                string ll;

                //После удаления ковычек стало работать нормально
                //for (int i = 0; i < headerLine.Length; i++)
                //{
                //    ll=headerLine[i].Remove(0, 1);
                //    headerLine[i] = ll;
                //}

                //foreach (string line in headerLine)
                //{
                //    //Удаляем первый символ который почему-то "\"

                //    ll= line.Remove(0, 1);
                //    line = ll;
                //}
                ////string[] headerLine = fileStream.ReadLine().Split(';');

                string nameTagTemp;
                int    columnTimeStamp;
                int    columnValue;

                for (int i = 0; i < headerLine.Length; i++)
                {
                    if (headerLine[i].IndexOf("Time") != -1)
                    {
                        columnTimeStamp = i;
                        nameTagTemp     = headerLine[i].Remove(headerLine[i].IndexOf("Time")).Trim();

                        for (int j = 0; j < headerLine.Length; j++)
                        {
                            if ((headerLine[j].IndexOf(nameTagTemp) != -1) && (headerLine[j].IndexOf("ValueY") != -1))
                            {
                                columnValue = j;
                                TagCSV tagCSV = new TagCSV()
                                {
                                    TagNameRus = nameTagTemp, TagName = Translit.GetTranslit(nameTagTemp), TimeStampColumn = columnTimeStamp, ValueColumn = columnValue
                                };
                                retList.Add(tagCSV);
                            }
                        }
                    }
                }
            }
            return(retList);
        }
コード例 #3
0
        /// <summary>
        /// Создание тега из файлов и фильтрация через указанный промежуток минут
        /// </summary>
        /// <param name="fileNames"></param>
        /// <param name="tagCSV"></param>
        /// <param name="minuteAvarage">Период минут усреднения</param>
        /// <returns></returns>
        public Tag GetTagFromCSV(List <string> fileNames, TagCSV tagCSV, int minuteAvarage, bool avgMode)
        {
            Tag tag = new Tag()
            {
                TagName = tagCSV.TagName, TagDescription = tagCSV.TagNameRus
            };

            foreach (string fileName in fileNames)
            {
                StreamReader fileStream = OpenFile(fileName);

                string timeStampStr;
                string valueStr;

                string fistLine;

                if (fileStream != null)
                {
                    fistLine = fileStream.ReadLine();
                    fistLine = Regex.Replace(fistLine, "[@,%\\.\"'\\\\]", string.Empty);
                    fistLine = fistLine.Replace("-", "_");
                    fistLine = fistLine.Replace("/", "_");

                    string[] headerLine = fistLine.Split(';');


                    //string[] headerLine = fileStream.ReadLine().Split(';');

                    if (headerLine[tagCSV.TimeStampColumn].Contains(tagCSV.TagNameRus) && headerLine[tagCSV.ValueColumn].Contains(tagCSV.TagNameRus))
                    {
                        NumberFormatInfo nfi = new NumberFormatInfo()
                        {
                            NumberDecimalSeparator = "."
                        };

                        while (fileStream.Peek() > 0)
                        {
                            string[] dataLine = fileStream.ReadLine().Split(';');

                            if (tagCSV.TimeStampColumn < dataLine.Length - 1 && tagCSV.ValueColumn <= dataLine.Length - 1)
                            {
                                timeStampStr = dataLine[tagCSV.TimeStampColumn];
                                valueStr     = dataLine[tagCSV.ValueColumn];

                                if (!string.IsNullOrEmpty(timeStampStr) && !string.IsNullOrEmpty(valueStr))
                                {
                                    //if (decimal.TryParse(valueStr, NumberStyles.Float, CultureInfo.InvariantCulture, out decimal d))
                                    if (decimal.TryParse(valueStr.Replace(',', '.').Trim(), NumberStyles.Float, nfi, out decimal d))
                                    {
                                        TagValue tagValue = new TagValue();
                                        tagValue.ValueFloat = d;
                                        tagValue.TimeStamp  = Convert.ToDateTime(timeStampStr.Trim());
                                        tag.TagValues.Add(tagValue);
                                    }

                                    //tagValue.ValueString = valueStr.Trim();
                                    //TagValue tagValue = new TagValue();
                                    //tagValue.ValueFloat = decimal.Parse(valueStr, NumberStyles.Float, nfi);

                                    //tagValue.ValueFloat = Convert.ToDecimal(valueStr.Replace('.', ','));
                                    //tagValue.TimeStamp = Convert.ToDateTime(timeStampStr.Trim());
                                    //tag.TagValues.Add(tagValue);
                                }
                            }
                        }
                    }
                    fileStream.Close();
                }
            }
            List <TagValue> tagValues = new List <TagValue>();

            if (avgMode)
            {
                var groups = tag.TagValues.OrderBy(k => k.TimeStamp).GroupBy(x =>
                {
                    var stamp = x.TimeStamp;
                    stamp     = stamp.AddMinutes(-(stamp.Minute % minuteAvarage)); //instead minuteAvarage was 5
                    stamp     = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
                    return(stamp);
                })
                             .Select(g => new TagValue {
                    TimeStamp = g.Key, ValueFloat = g.Average(s => s.ValueFloat)
                }).ToList <TagValue>();
                tag.TagValues = groups;
            }
            else
            {
                var groups = tag.TagValues.OrderBy(k => k.TimeStamp).GroupBy(x =>
                {
                    var stamp = x.TimeStamp;
                    stamp     = stamp.AddMinutes(-(stamp.Minute % minuteAvarage)); //instead minuteAvarage was 5
                    stamp     = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
                    return(stamp);
                })
                             .Select(g => new TagValue {
                    TimeStamp = g.Key, ValueFloat = g.First().ValueFloat
                }).ToList <TagValue>();
                tag.TagValues = groups;
            }


            //.Select(g => new TagValue { TimeStamp = g.Key, ValueFloat = g.Average(s =>Convert.ToDecimal(s.ValueString.Replace('.',','))) }).ToList<TagValue>();
            //            .Select(g => new TagValue { TimeStamp = g.Key, ValueString = g.OrderBy(s=>s.TimeStamp).FirstOrDefault(d=>string.IsNullOrEmpty(d.ValueString)) }).ToList<TagValue>();

            //if (zeroOffset)
            //{
            //    int minSecond = tag.TagValues.Min(a => a.TimeStamp.Second);
            //    tagValues = tag.TagValues.OrderBy(a => a.TimeStamp).Distinct().First(s=>s.TimeStamp.Year)
            //    tagValues = tag.TagValues.Where(tv => ((tv.TimeStamp.Minute % minuteAvarage == 0) && (tv.TimeStamp.Second- minSecond) == 0) || (tv.TimeStamp.Minute == 0 && (tv.TimeStamp.Second- minSecond) == 0)).OrderBy(tv => tv.TimeStamp).Distinct().Select(tv => tv).ToList<TagValue>();
            //    tag.TagValues = tagValues;
            //}
            //else
            //{
            //    tagValues = tag.TagValues.Where(tv => ((tv.TimeStamp.Minute % minuteAvarage == 0) && tv.TimeStamp.Second == 0) || (tv.TimeStamp.Minute == 0 && tv.TimeStamp.Second == 0)).OrderBy(tv => tv.TimeStamp).Select(tv => tv).ToList<TagValue>();
            //    tag.TagValues = tagValues;
            //}
            return(tag);
        }
コード例 #4
0
        public Tag GetTagFromCSV(List <string> fileNames, TagCSV tagCSV)
        {
            Tag tag = new Tag()
            {
                TagName = tagCSV.TagName, TagDescription = tagCSV.TagNameRus
            };

            foreach (string fileName in fileNames)
            {
                StreamReader fileStream = OpenFile(fileName);

                string timeStampStr;
                string valueStr;

                if (fileStream != null)
                {
                    string[] headerLine = fileStream.ReadLine().Split(';');

                    if (headerLine[tagCSV.TimeStampColumn].Contains(tagCSV.TagNameRus) && headerLine[tagCSV.ValueColumn].Contains(tagCSV.TagNameRus))
                    {
                        NumberFormatInfo nfi = new NumberFormatInfo()
                        {
                            NumberDecimalSeparator = "."
                        };
                        while (fileStream.Peek() > 0)
                        {
                            string[] dataLine = fileStream.ReadLine().Split(';');

                            if (tagCSV.TimeStampColumn < dataLine.Length - 1 && tagCSV.ValueColumn < dataLine.Length - 1)
                            {
                                timeStampStr = dataLine[tagCSV.TimeStampColumn];
                                valueStr     = dataLine[tagCSV.ValueColumn];

                                if (!string.IsNullOrEmpty(timeStampStr) && !string.IsNullOrEmpty(valueStr))
                                {
                                    if (decimal.TryParse(valueStr.Replace(',', '.').Trim(), NumberStyles.Float, nfi, out decimal d))
                                    {
                                        TagValue tagValue = new TagValue();
                                        tagValue.ValueFloat = d;
                                        tagValue.TimeStamp  = Convert.ToDateTime(timeStampStr.Trim());
                                        tag.TagValues.Add(tagValue);
                                    }

                                    //TagValue tagValue = new TagValue();
                                    ////tagValue.ValueString = valueStr.Trim();
                                    //tagValue.ValueFloat = decimal.Parse(valueStr, NumberStyles.Float, nfi);
                                    //tagValue.TimeStamp = Convert.ToDateTime(timeStampStr.Trim());
                                    //tag.TagValues.Add(tagValue);
                                }
                            }
                        }
                    }
                    fileStream.Close();
                }
            }
            List <TagValue> tagValues = new List <TagValue>();

            tagValues     = tag.TagValues.OrderBy(tv => tv.TimeStamp).Select(tv => tv).ToList <TagValue>();
            tag.TagValues = tagValues;

            return(tag);
        }