예제 #1
0
        /// <summary>
        /// Exports the changes file
        /// </summary>
        /// <param name="data"></param>
        /// <param name="filePath"></param>
        /// <param name="changeMatrixFilePath"></param>
        /// <param name="changesFilePath"></param>
        /// <param name="dateColumnFormat"></param>
        private static void ExportChangesFile(Dataset data, string filePath, string changeMatrixFilePath, string changesFilePath, DateColumnFormat dateColumnFormat)
        {
            var changesUsed = new List <int>();

            using (var writer = File.CreateText(changeMatrixFilePath))
            {
                writer.WriteLine("Change matrix for file: " + Path.GetFileName(filePath));
                var line = dateColumnFormat.Equals(DateColumnFormat.SplitDateColumn)
                               ? "Day,Month,Year,Hours,Minutes" + ','
                               : "Date,Time" + ',';
                line = data.Sensors.OrderBy(x => x.SortIndex).Aggregate(line, (current, sensor) => current + (sensor.Name + ","));
                line = line.Remove(line.Count() - 2);
                writer.WriteLine(line);
                for (var time = data.StartTimeStamp; time <= data.EndTimeStamp; time = time.AddMinutes(data.DataInterval))
                {
                    line = dateColumnFormat.Equals(DateColumnFormat.SplitDateColumn)
                            ? time.ToString("dd") + ',' + time.ToString("MM") + ',' + time.ToString("yyyy") + ',' +
                           time.ToString("HH") + ',' + time.ToString("mm") + ','
                            : time.ToString("dd/MM/yyyy") + ',' + time.ToString("HH:mm") + ',';
                    foreach (var sensor in data.Sensors.OrderBy(x => x.SortIndex))
                    {
                        LinkedList <int> vals;
                        if (sensor.CurrentState.Changes.TryGetValue(time, out vals))
                        {
                            changesUsed.AddRange(vals.Where(x => !changesUsed.Contains(x)));
                            line = vals.Aggregate(line, (current, val) => current + (val + " "));
                        }
                        line += ",";
                    }
                    line = line.Remove(line.Count() - 2);
                    writer.WriteLine(line);
                }
            }
            using (var writer = File.CreateText(changesFilePath))
            {
                writer.WriteLine("Change log for file " + Path.GetFileName(filePath));
                foreach (var i in changesUsed.OrderBy(i => i))
                {
                    Debug.Print("Change number " + i);
                    writer.WriteLine(i == -1
                                         ? new ChangeReason(-1, "Reason not specified")
                                         : ChangeReason.ChangeReasons.FirstOrDefault(x => x.ID == i));
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Exports as a CSV
        /// </summary>
        /// <param name="data"></param>
        /// <param name="filePath"></param>
        /// <param name="includeEmptyLines"></param>
        /// <param name="dateColumnFormat"></param>
        /// <param name="exportRaw"></param>
        /// <param name="numOfPointsToSummarise"></param>
        private static void ExportCSV(Dataset data, string filePath, bool includeEmptyLines, DateColumnFormat dateColumnFormat, bool exportRaw, int numOfPointsToSummarise)
        {
            using (StreamWriter writer = File.CreateText(filePath))
            {
                const char del = '\t';
                var columnHeadings = dateColumnFormat.Equals(DateColumnFormat.OneDateColumn)
                                            ? "DateTime"
                                            : "Date" + del + "Time";
                var currentSensorIndex = 0;
                var outputData = new string[data.Sensors.Count, (data.ExpectedDataPointCount / numOfPointsToSummarise) + 1];
                var rowDate = data.StartTimeStamp;

                foreach (var sensor in data.Sensors.OrderBy(x => x.SortIndex))
                {
                    var stateToUse = (exportRaw) ? sensor.RawData : sensor.CurrentState;

                    //Construct the column headings (Sensor siteNames)
                    columnHeadings += del + ConstructHeader(sensor);
                    var i = data.StartTimeStamp;
                    while (i <= data.EndTimeStamp)
                    {
                        var sum = float.MinValue;
                        for (var j = 0; j < numOfPointsToSummarise; j++, i = i.AddMinutes(data.DataInterval))
                        {
                            float value;
                            if (stateToUse.Values.TryGetValue(i, out value))
                                if (sum.Equals(float.MinValue))
                                    sum = value;
                                else
                                    sum += value;
                        }

                        if (!sum.Equals(float.MinValue))
                        {
                            if (sensor.SummaryType == SummaryType.Average)
                                outputData[
                                    currentSensorIndex,
                                    GetArrayRowFromTime(data, data.StartTimeStamp, i.AddMinutes((-data.DataInterval) * numOfPointsToSummarise),
                                                        numOfPointsToSummarise)] =
                                    Math.Round((sum / numOfPointsToSummarise), 2).ToString();
                            else
                                outputData[
                                    currentSensorIndex,
                                    GetArrayRowFromTime(data, data.StartTimeStamp, i.AddMinutes((-data.DataInterval) * numOfPointsToSummarise),
                                                        numOfPointsToSummarise)] =
                                    Math.Round((sum), 2).ToString();
                        }
                    }
                    currentSensorIndex++;
                }

                //Strip the last delimiter from the headings and write the line
                writer.WriteLine(columnHeadings);

                //write the data here...
                for (int row = 0; row < data.ExpectedDataPointCount / numOfPointsToSummarise; row++)
                {
                    string line = "";

                    for (int col = 0; col < data.Sensors.Count; col++)
                        line += del + outputData[col, row];

                    if (includeEmptyLines || line.Length != data.Sensors.Count)
                    {
                        line = dateColumnFormat.Equals(DateColumnFormat.OneDateColumn)
                                ? rowDate.ToString("yyyy-MM-dd HH:mm") + line
                                : rowDate.ToString("yyyy-MM-dd") + del + rowDate.ToString("HH:mm") + line;

                        writer.WriteLine(line);
                    }

                    rowDate = rowDate.AddMinutes(data.DataInterval * numOfPointsToSummarise);
                }

                writer.Close();
            }
        }
예제 #3
0
        /// <summary>
        /// Exports as a CSV
        /// </summary>
        /// <param name="data"></param>
        /// <param name="filePath"></param>
        /// <param name="includeEmptyLines"></param>
        /// <param name="dateColumnFormat"></param>
        /// <param name="exportRaw"></param>
        /// <param name="numOfPointsToSummarise"></param>
        private static void ExportCSV(Dataset data, string filePath, bool includeEmptyLines, DateColumnFormat dateColumnFormat, bool exportRaw, int numOfPointsToSummarise)
        {
            using (StreamWriter writer = File.CreateText(filePath))
            {
                const char del            = ',';
                var        columnHeadings = dateColumnFormat.Equals(DateColumnFormat.SplitDateColumn)
                                            ? "DD" + del + "MM" + del + "YYYY" + del + "hh" + del + "mm"
                                            : "DD/MM/YYYY" + del + "hh:mm";
                var currentSensorIndex = 0;
                var outputData         = new string[data.Sensors.Count, (data.ExpectedDataPointCount / numOfPointsToSummarise) + 1];
                var rowDate            = data.StartTimeStamp;


                foreach (var sensor in data.Sensors.OrderBy(x => x.SortIndex))
                {
                    var stateToUse = (exportRaw) ? sensor.RawData : sensor.CurrentState;

                    //Construct the column headings (Sensor names)
                    columnHeadings += del + sensor.Name;
                    var i = data.StartTimeStamp;
                    while (i <= data.EndTimeStamp)
                    {
                        var sum = float.MinValue;
                        for (var j = 0; j < numOfPointsToSummarise; j++, i = i.AddMinutes(data.DataInterval))
                        {
                            float value;
                            if (stateToUse.Values.TryGetValue(i, out value))
                            {
                                if (sum.Equals(float.MinValue))
                                {
                                    sum = value;
                                }
                                else
                                {
                                    sum += value;
                                }
                            }
                        }

                        if (!sum.Equals(float.MinValue))
                        {
                            if (sensor.SummaryType == SummaryType.Average)
                            {
                                outputData[
                                    currentSensorIndex,
                                    GetArrayRowFromTime(data, data.StartTimeStamp, i.AddMinutes((-data.DataInterval) * numOfPointsToSummarise),
                                                        numOfPointsToSummarise)] =
                                    Math.Round((sum / numOfPointsToSummarise), 2).ToString();
                            }
                            else
                            {
                                outputData[
                                    currentSensorIndex,
                                    GetArrayRowFromTime(data, data.StartTimeStamp, i.AddMinutes((-data.DataInterval) * numOfPointsToSummarise),
                                                        numOfPointsToSummarise)] =
                                    Math.Round((sum), 2).ToString();
                            }
                        }
                    }
                    currentSensorIndex++;
                }

                //Strip the last delimiter from the headings and write the line
                writer.WriteLine(columnHeadings);

                //write the data here...
                for (int row = 0; row < data.ExpectedDataPointCount / numOfPointsToSummarise; row++)
                {
                    string line = "";

                    for (int col = 0; col < data.Sensors.Count; col++)
                    {
                        line += del + outputData[col, row];
                    }

                    if (includeEmptyLines || line.Length != data.Sensors.Count)
                    {
                        line = dateColumnFormat.Equals(DateColumnFormat.SplitDateColumn)
                                ? rowDate.ToString("dd") + del + rowDate.ToString("MM") + del + rowDate.ToString("yyyy") + del +
                               rowDate.ToString("HH") + del + rowDate.ToString("mm") + line
                                : rowDate.ToString("dd/MM/yyyy") + del + rowDate.ToString("HH:mm") + line;
                        writer.WriteLine(line);
                    }

                    rowDate = rowDate.AddMinutes(data.DataInterval * numOfPointsToSummarise);
                }

                writer.Close();
            }
        }
예제 #4
0
        /// <summary>
        /// Exports the changes file
        /// </summary>
        /// <param name="data"></param>
        /// <param name="filePath"></param>
        /// <param name="changeMatrixFilePath"></param>
        /// <param name="changesFilePath"></param>
        /// <param name="dateColumnFormat"></param>
        private static void ExportChangesFile(Dataset data, string filePath, string changeMatrixFilePath, string changesFilePath, DateColumnFormat dateColumnFormat)
        {
            var changesUsed = new List<int>();
            using (var writer = File.CreateText(changeMatrixFilePath))
            {
                writer.WriteLine("Change matrix for file: " + Path.GetFileName(filePath));
                writer.WriteLine("Cell format: QA/QC value [Raw value] (Change reason number)");
                var line = dateColumnFormat.Equals(DateColumnFormat.OneDateColumn)
                               ? "Day,Month,Year,Hours,Minutes" + '\t'
                               : "Date,Time" + '\t';
                line = data.Sensors.OrderBy(x => x.SortIndex).Aggregate(line, (current, sensor) => current + (sensor.Name + "\t"));
                line = line.Remove(line.Count() - 2);
                writer.WriteLine(line);
                for (var time = data.StartTimeStamp; time <= data.EndTimeStamp; time = time.AddMinutes(data.DataInterval))
                {
                    line = dateColumnFormat.Equals(DateColumnFormat.OneDateColumn)
                            ? time.ToString("yyyy-MM-dd HH:mm") + '\t'
                            : time.ToString("yyyy-MM-dd") + '\t' + time.ToString("HH:mm") + '\t';
                    foreach (var sensor in data.Sensors.OrderBy(x => x.SortIndex))
                    {
                        LinkedList<int> vals;
                        float valsRaw;
                        float currentValue;

                        if (sensor.CurrentState.Changes.TryGetValue(time, out vals))
                        {
                            if (sensor.CurrentState.Values.TryGetValue(time, out currentValue))
                            {

                                line = line + currentValue + " ";

                                if (sensor.RawData.Values.TryGetValue(time, out valsRaw))
                                {

                                    line = line + "[" + valsRaw + "] (";
                                }
                                changesUsed.AddRange(vals.Where(x => !changesUsed.Contains(x)));
                                // line = sensor.CurrentState.Values<time>.Values;
                                line =  vals.Aggregate(line, (current, val) => current + (val + " ")) + ")";
                            }
                        }
                        line += "\t";
                    }
                    line = line.Remove(line.Count() - 2);
                    writer.WriteLine(line);
                }
            }
            using (var writer = File.CreateText(changesFilePath))
            {
                writer.WriteLine("Change log for file " + Path.GetFileName(filePath));
                foreach (var i in changesUsed.OrderBy(i => i))
                {
                    Debug.Print("Change number " + i);
                    writer.WriteLine(i == -1
                                         ? new ChangeReason(-1, "Reason not specified")
                                         : ChangeReason.ChangeReasons.FirstOrDefault(x => x.ID == i));
                }
            }
        }