Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Console.Error.WriteLine("Tcx To Csv Application");

            string fileName = null;

            if (args.Length < 1)
            {
                Console.Error.WriteLine("Usage: Tcx2Csv.exe <filename> ");
                return;
            }

            fileName = args[0];
            try
            {
                var parser     = new TcxParser();
                var activities = parser.Parse(fileName);
                if (activities == null)
                {
                    Console.Error.WriteLine($"Invalid Tcx file '{fileName}' ");
                    return;
                }
                if (!activities.Any())
                {
                    Console.Error.WriteLine($"No activities found in Tcx file '{fileName}' ");
                    return;
                }
                int iA = 0;
                foreach (var activity in activities)
                {
                    iA++;
                    string outFilePath = findOutfileName(fileName, activity);

                    var allTrackPoints = activity.Laps.SelectMany((lap, i) => lap.Track.TrackPoints.Select(t => new { Lap = lap, LapIndex = i, TrackPoint = t })).ToList();
                    allTrackPoints = allTrackPoints.OrderBy(t => t.TrackPoint.Time).ToList();

                    if (!allTrackPoints.Any())
                    {
                        Console.Error.WriteLine($"No track data found in activity {iA} Tcx file '{fileName}' ");
                        continue;
                    }

                    var headers = $"LapIndex\t{nameof(Lap.Name)}\t{nameof(TrackPoint.Time)}\t{nameof(TrackPoint.DistanceMeters)}\t{nameof(TrackPoint.Speed)}\t{nameof(TrackPoint.AltitudeMeters)}\t{nameof(TrackPoint.HeartRateBpm)}";

                    var lines = new string[] { headers }.ToList();
                    lines.AddRange(
                        allTrackPoints.Select(t => $"{t.LapIndex}\t{t.Lap.Name}\t{t.TrackPoint.Time}\t{t.TrackPoint.DistanceMeters}\t{t.TrackPoint.Speed}\t{t.TrackPoint.AltitudeMeters}\t{t.TrackPoint.HeartRateBpm}")
                        );
                    File.WriteAllLines(outFilePath, lines);
                    Console.Error.WriteLine($"{activity.Sport} Activity from {activity.Laps.Min(l => l.StartTime)} with {activity.Laps.Count()} and {lines.Count - 1} trackPoints (max distance {allTrackPoints.Max(t => t.TrackPoint.DistanceMeters)}m) written to '{outFilePath}' ");
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine($"Exception parsing '{fileName}': {ex.ToString()}");
            }
        }
Exemplo n.º 2
0
        public TcxChartViewModel()
        {
            if (!Directory.Exists(sourceDirectory))
            {
                Directory.CreateDirectory(sourceDirectory);
            }
            if (!Directory.Exists(targetDirectory))
            {
                Directory.CreateDirectory(targetDirectory);
            }

            var sourceFiles = Directory.GetFiles(sourceDirectory, "*.tcx").ToList();
            var targetFiles = Directory.GetFiles(targetDirectory, "*.tcx").ToList();

            var files = sourceFiles.ToList();

            files.AddRange(targetFiles);

            var activities = new List <ActivityViewModel>();

            foreach (var file in files)
            {
                try
                {
                    var loadedActivities = new TcxParser().Parse(file);
                    if (loadedActivities != null)
                    {
                        activities.AddRange(loadedActivities.Select(a => new ActivityViewModel(file, a)));
                    }
                }
                catch (Exception e)
                {
                }
            }

            sourceFiles = Directory.GetFiles(sourceDirectory, "*.tcxml").ToList();
            targetFiles = Directory.GetFiles(targetDirectory, "*.tcxml").ToList();

            files = sourceFiles.ToList();
            files.AddRange(targetFiles);

            foreach (var file in files)
            {
                try
                {
                    var loadedActivities = loadActivities(file);
                    if (loadedActivities != null)
                    {
                        activities.AddRange(loadedActivities.Select(a => new ActivityViewModel(file, a)));
                    }
                }
                catch { }
            }

            var groupedActivities = activities.GroupBy(a => a.StartTime);
            var newestActivities  = groupedActivities.Select(g => g.OrderByDescending(a => new FileInfo(a.FileName).LastWriteTime).First());

            foreach (var newestActivity in newestActivities.OrderByDescending(a => a.StartTime))
            {
                Activities.Add(newestActivity);
                newestActivity.PropertyChanged += someActivityChanged;
            }

            SelectedSportTypes.AddRange(SportTypes);
        }