uhm, well. The numbers with comma's as delimiters are just there and just can't seem to get to 5.3 as the result of the calculation. Well, we'll just go on and a hint is appreciated. Looked at the regex and now asking myself how to implement that. | [reply] [Watch: Dir/Any] |
okay I'm there for the moment. Thank you all. I finally put the regex, I was adviced to use, in the place where it works. Code below could be improved because when starting the first column with a 'space' or nothing there won't show up a 0 (zero) in the column but that also wasn't really where I was after.
Thangs again, rethinking the issue made me learn and get to a solution.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Table;
my $t =
new Data::Table( [ [ "1", "2", "3" ], [ "10", "20", "2,3" ] ], [ "A"
+, "B" ],
1 );
# create emtpy column
my @newCol = ();
$newCol[ $t->nofRow - 1 ] = undef;
$t->addCol( \@newCol, 'adding_up' );
# to change , into . in respective columns
# not needed for a correct calculation of col3 though
$t->colsMap( sub { $_->[0] =~ s/,/\./g } );
$t->colsMap( sub { $_->[1] =~ s/,/\./g } );
# Return input if input is an integer, otherwise zero
sub to_int_or_zero {
my $value = shift;
if (
defined($value)
# the regex that above hints pointed at.
&& $value =~ /^-?\d+\.?\d*$/
)
{
return $value;
}
else {
return 0;
}
}
# Put the formula in the empty column
$t->colsMap(
sub {
$_->[2] = to_int_or_zero( $_->[0] ) + to_int_or_zero( $_->[1]
+);
}
);
print $t->csv;
| [reply] [Watch: Dir/Any] [d/l] |