#!/usr/bin/perl ###################################################################### # # Copyright (c) 2007, Nils Knieling. All rights reserved. # # http://training.gartenderfreu.de/ # # Nils Knieling; Dienstag, 29. Mai 2007 10:43:54 # # Convert jErgoTrainer CSV file to Polar HRM file # jergo2hrm.pl <jErgoTrainer CSV file> # ###################################################################### use strict; ###### USER VARIABLES START HERE ###### # Save HRM files to: my $dir = "D:/Nils/HRM/"; my $MaxHR = "202"; my $RestHR = "48"; my $VO2max = "53"; my $Weight = "72"; ###### USER VARIABLES END HERE ###### my $interval = 5; # 5, 15, 30 ... my $startsec = 10000; my $lastsec = 0; my $xid = -1; my @sec = (); my @watt = (); my @puls = (); my @tritt = (); my @kmh = (); my @last = (); my $date = ''; my $time = ''; my $file = $ARGV[0]; unless ($dir =~ m~/$~) { die("Error: You forgot the trailing slash! Please correct \$dir.\n"); } # Speicherort pruefen unless (-d $dir) { die("Error: \"$dir\" isn\'t a directory\n"); } # Datei oeffnen if (!open(JERGO,"<$file")) { die("Error: Can\'t open file \"$file\"\n"); } if ($file =~ /([^\/\\]+)$/) { $file="$1"; } else { $file="$file"; } # Sicher HRM Datei nach... my $savefile = 'HRM.hrm'; if ($file =~ /^P_(\d{2})(\d{2})(\d{4})_(\d{6}).csv$/) { $savefile = "$2$3$4.hrm"; } else { die("Error: File \"$file\" isn\'t a jErgoTrainer CSV file\n"); } my $save = "$dir$savefile"; if (!open(HRM,">$save")) { die("Error: Can\'t create HRM file \"$save\"\n"); } # Datei einlesen und in Arrays speichern while (<JERGO>) { my @csv = split(/;/, $_); # [Info] -- Datum und Uhrzeit (Trainingsende) if ($csv[0] =~ /^\d{4}$/) { $date = "$csv[0]$csv[1]$csv[2]"; $time = "$csv[3]:$csv[4]:$csv[5]"; } # [Data] -- Jede Sekunde alle Werte my ($null, $programm, $benutzer, $egal, $sec, $watt, $puls, $tritt, $kmh) = @csv; if ($csv[0] == '0' && $sec > $lastsec) { $startsec = $sec if ($sec < $startsec); # Bei welcher Sekunde hat die Aufzeichung begonnen if ($sec != $lastsec + 1 && $sec != $startsec) { push(@sec, $sec); push(@watt, $last[0]); push(@puls, $last[1]); push(@tritt, $last[2]); push(@kmh, $last[3]); $xid++; } push(@sec, $sec); push(@watt, $watt); push(@puls, $puls); push(@tritt, $tritt); push(@kmh, $kmh); $lastsec = $sec; @last = ($watt, $puls, $tritt, $kmh); # Letzte Werte merken $xid++; } } # Fahrzeit berechnen my $hour = int($xid / 3600); my $min = int(($xid - ($hour * 3600)) / 60); my $sec = int($xid - ($hour * 3600) - ($min * 60)); $hour = "0$hour" if ($hour < 10); $min = "0$min" if ($min < 10); $sec = "0$sec" if ($sec < 10); print HRM qq ~ [Params] Version=106 Monitor=22 SMode=111000100 Date=$date StartTime=$time.0 Length=$hour:$min:$sec.0 Interval=$interval Upper1=0 Lower1=0 Upper2=0 Lower2=0 Upper3=0 Lower3=0 Timer1=00:00:00.0 Timer2=00:00:00.0 Timer3=00:00:00.0 ActiveLimit=0 MaxHR=$MaxHR RestHR=$RestHR StartDelay=0 VO2max=$VO2max Weight=$Weight [HRData] ~; for(my $i = 0; $i <= $xid; $i = $i + 5) { print HRM $puls[$i] . "\t" . $kmh[$i] * 10 . "\t" . $tritt[$i] . "\t" . $watt[$i] . "\n"; } print "\n" . "-" x 60 . "\nOK: New HRM file \"$save\" created!\n" . "-" x 60 . "\n";