Skip to content

Commit 883aa0c

Browse files
authored
Add files via upload
1 parent 1a6f4ff commit 883aa0c

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

scripts/raindata2test.pl

+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
eval 'exec perl -w -S $0 ${1+"$@"}'
2+
if 0; # not running under some shell
3+
4+
use strict;
5+
use warnings;
6+
use Time::Piece;
7+
8+
# Rain gauge overflow value
9+
my $RAINGAUGE_MAX_VALUE = 100;
10+
11+
my $file = $ARGV[0]; # input file
12+
my $hourly = 0;
13+
my $daily = 0;
14+
my $weekly = 0;
15+
my $monthly = 0;
16+
my $prevDay = -1;
17+
my $prevHour;
18+
my $prevWeek;
19+
my $prevMonth;
20+
my $rain_acc = 0;
21+
my @hour = ();
22+
my $cnt = 0;
23+
my $no_lines = 5000;
24+
usage() unless $#ARGV >= 0;
25+
26+
die "Error: can't read $file.\n" if (!-r $file); # check if file is readable
27+
open (INFO, "<$file") || die "Can't open $file.\n";
28+
29+
# skip first line
30+
$_ = <INFO>;
31+
32+
# read entire file to string
33+
my $line;
34+
foreach $line (<INFO>) { # read line by line
35+
$cnt = $cnt + 1;
36+
my ($ts, $rain) = split(",", $line);
37+
my $dt = Time::Piece->strptime($ts, '%d/%m/%Y %H:%M');
38+
39+
push @hour, $rain;
40+
41+
if (@hour > 4) {
42+
$_ = shift(@hour);
43+
}
44+
$hourly = 0;
45+
my $i;
46+
foreach $i (@hour) {
47+
$hourly = $hourly + $i;
48+
}
49+
50+
if ($prevDay == -1) {
51+
$prevDay = $dt->wday;
52+
$prevWeek = $dt->week;
53+
$prevMonth = $dt->mon;
54+
$daily = $rain;
55+
$weekly = $rain;
56+
$monthly = $rain;
57+
} else {
58+
if ($dt->wday != $prevDay) {
59+
$daily = 0;
60+
} else {
61+
$daily = $daily + $rain;
62+
}
63+
64+
if ($dt->week != $prevWeek) {
65+
$weekly = 0;
66+
} else {
67+
$weekly = $weekly + $rain;
68+
}
69+
70+
if ($dt->mon != $prevMonth) {
71+
$monthly = 0;
72+
} else {
73+
$monthly = $monthly + $rain;
74+
}
75+
76+
$prevDay = $dt->wday;
77+
$prevWeek = $dt->week;
78+
$prevMonth = $dt->mon;
79+
}
80+
$rain_acc = $rain_acc + $rain;
81+
if ($rain_acc >= $RAINGAUGE_MAX_VALUE) {
82+
$rain_acc = $rain_acc - $RAINGAUGE_MAX_VALUE;
83+
}
84+
85+
#print $dt->strftime('%F %T') . "H: $hourly D: $daily W: $weekly M: $monthly\n";
86+
#print $dt->strftime('%F %T') . ",$rain,$hourly,$daily,$weekly,$monthly\n";
87+
my $timestr = $dt->strftime('%F %H:%M');
88+
printf( " // $timestr -> $rain; H: $hourly; D: $daily; W: $weekly; M: $monthly\n");
89+
printf( qq{ setTime("$timestr", tm, ts);\n} );
90+
printf( qq{ rainGauge.update(tm, $rain_acc);\n} );
91+
printf( qq{ DEBUG_CB();\n});
92+
printf( qq{ DOUBLES_EQUAL(%7.1f, rainGauge.pastHour(), TOLERANCE);\n}, $hourly);
93+
printf( qq{ DOUBLES_EQUAL(%7.1f, rainGauge.currentDay(), TOLERANCE);\n}, $daily);
94+
printf( qq{ DOUBLES_EQUAL(%7.1f, rainGauge.currentWeek(), TOLERANCE);\n}, $weekly);
95+
printf( qq{ DOUBLES_EQUAL(%7.1f, rainGauge.currentMonth(), TOLERANCE);\n}, $monthly);
96+
print "\n";
97+
98+
if ($cnt == $no_lines) {
99+
last;
100+
}
101+
}
102+
print "}\n";
103+
close INFO;
104+
105+
sub usage {
106+
my $script_name = `basename $0`;
107+
108+
chop $script_name;
109+
110+
printf("\n SYNTAX : %s %s\n", $script_name, "<csv_file>");
111+
112+
print <<END_OF_HELP;
113+
114+
PROGRAM DESCRIPTION:
115+
This Perl script generates unit test data for RainGauge from rain data in CSV file.
116+
117+
Expected CSV file format:
118+
DateTime, mm
119+
12/06/13 00:00,0
120+
12/06/13 00:15,0.4
121+
[...]
122+
123+
DateTime: d/m/y H:M
124+
The result is printed to STDOUT.
125+
126+
END_OF_HELP
127+
128+
exit;
129+
}

0 commit comments

Comments
 (0)