It's been a long time since I wrote any code, but yesterday the old dog dusted off the Perl manual and managed a few simple tricks. The Garmin GPS unit that I have produces a *.tcx file which is a succession of XML-tagged data points. With every outing the file grows a megabyte or so in length, depending on the duration of the run. In order to produce maps and elevation profiles I've been using a text editor to strip out a single day's trek from the mass. But as the file gets larger, that's more and more inconvenient.
Hence, the following tiny Perl script to pull a run's trackfile out of an arbitrarily-large Garmin *.tcx file:
#! /usr/bin/perl # extract_garmin.prl version 0.1 - ^z - 2010-04-20 # usage: perl extract_garmin.prl datepattern <infile.tcx >outfile.tcx # take a Garmin *.tcx file and extract a chunk for a given date # example: perl extract_garmin.prl 2010-04-10 <Garmin_2010-04-17.tcx >Garmin_BRR.tcx # method: print out header down to and including line containing <Activity Sport="Running"> # scan until find line that matches datepattern # print out that line and all subsequent lines until and including next </Activity> # print out </Activities> and </TrainingCenterDatabase>, and finish $datepattern = $ARGV[0]; while (<STDIN>) { print; last if /<Activity Sport="Running">/; } while (<STDIN>) { last if /$datepattern/; } print; while (<STDIN>) { print; last if /<\/Activity>/; } print " </Activities>\n</TrainingCenterDatabase>\n";
^z - 2010-04-21