コード例 #1
0
ファイル: FileIO.cs プロジェクト: DELTAJoSch/dip-cider
        /// <summary>
        /// This function reads the .csv part of the data folder
        /// </summary>
        /// <param name="Data">A DataProvider object to store the ingested data in</param>
        /// <param name="Path">A path to the folder to the .csv file</param>
        /// <param name="Read">An object implementing the IRead interface</param>
        /// <param name="Main">A MainWindowViewModel object to toggle the buttons from</param>
        public async Task ReadCSV(DataProvider Data, string Path, IRead Read, MainWindowViewModel Main)
        {
            logger.Debug("Starting CSV ingestion.");

            try
            {
                Main.ButtonState(false);
                await Task.Run(() =>
                {
                    string[] lines = Read.ReadLinesCsv(Path);

                    List <Tuple <float, float> > DataLsb = new List <Tuple <float, float> >();

                    foreach (string line in lines)
                    {
                        string[] split = line.Split(';');

                        if (split[0] == "Inf")
                        {
                            try
                            {
                                Data.RouteDate = Convert.ToDateTime(split[1]);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, "Couldn't convert to DateTime");
                            }
                            Data.RouteName = split[2];
                        }

                        if (split[0] == "Dat")
                        {
                            try
                            {
                                var tp = new Tuple <float, float, float>(float.Parse(split[1], CultureInfo.InvariantCulture), float.Parse(split[2], CultureInfo.InvariantCulture), float.Parse(split[3], CultureInfo.InvariantCulture));

                                Data.XAcceleration.Add(tp.Item1);
                                Data.YAcceleration.Add(tp.Item2);
                                Data.ZAcceleration.Add(tp.Item3);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, "Couldn't convert to touple");
                            }
                            try
                            {
                                var tp = new Tuple <float, float, float>(float.Parse(split[4], CultureInfo.InvariantCulture), float.Parse(split[5], CultureInfo.InvariantCulture), float.Parse(split[6], CultureInfo.InvariantCulture));

                                Data.Roll.Add(tp.Item1);
                                Data.Pitch.Add(tp.Item2);
                                Data.Yaw.Add(tp.Item3);
                                Data.Heading.Add(tp.Item3);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, "Couldn't convert to touple");
                            }
                            try
                            {
                                Data.Height.Add(float.Parse(split[7], CultureInfo.InvariantCulture));
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, "Couldn't Convert to float");
                            }
                            try
                            {
                                Data.Pressure.Add(float.Parse(split[8], CultureInfo.InvariantCulture));
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, "Couldn't Convert to float");
                            }
                        }
                    }

                    Data.DataPointsAcceleration = Math.Min(Data.XAcceleration.Count, Data.YAcceleration.Count);
                    Data.DataPointsAcceleration = Math.Min(Data.DataPointsAcceleration, Data.ZAcceleration.Count);
                });

                Data.DataPointsAngle = Math.Min(Data.Roll.Count, Data.Pitch.Count);
                Data.DataPointsAngle = Math.Min(Data.DataPointsAngle, Data.Yaw.Count);
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Error reading File");
            }
            logger.Debug("CSV ingestion finished.");
        }