读书人

新手初学者再次厚颜怎样在循环体内做两

发布时间: 2012-06-01 16:46:36 作者: rapoo

新手菜鸟再次厚颜求助:怎样在循环体内做两列数据求和及去掉单位符号
小弟再次厚颜救助。。。
使用perl语言将DB2数据库表中有两列数据 目的是把表中第二列数据中的字符串和数值分开分别放在第二列和第三列中。 这个昨天bugs2k 已经在下面的代码中帮小弟解决了。现在在前面的基础上如果想先将单位"M"去除 然后将testB和testC 的数值型数据相加并将结果放在第四列中.....如何解决?? 感谢各位大侠 帮看看 。。

原始数据:
testA | luck
testB | 0.54M
testC | 7.83M
testD | .43M

想要得到的数据:

testA | luck | 0 | 0
testB | NA | 0.54 | 0
testC | NA | 7.83 | 8.37
testD | NA | 0.43 | 0


while ($DBResult->fetch) {

if ($Col2 =~ /^\.\d+$/) {
$Col2 = "0" . $Col2;
}

if ($Col2 =~ /^[0-9]+(\.[0-9]{1,100})?$/) {
# valure is a number !
$numVal = $Col2;
$strVal = "NA";
}
else {
# valure is a string !
$numVal = 0;
$strVal = $Col2;
}

print "$Col1|$strVal|$numVal\n";

}


[解决办法]

Perl code
#/usr/bin/env perluse strict;use warnings;my @datas = ();foreach my $line (<DATA>) {    my ($name, $data) = split /\s+/, $line;    my ($numVal, $strVal) = ();    if ($data =~ /(\d*\.\d+)/) {        $numVal = $1 + 0;        $strVal = 'NA';    }    else {        $numVal = 0;        $strVal = $data;    }    push @datas, [$name, $strVal, $numVal, 0];}my $testB = $datas[1];my $testC = $datas[2];$testC->[3] += $testB->[2] + $testC->[2];foreach my $data (@datas) {    print "$data->[0] | $data->[1] | $data->[2] | $data->[3]\n";}__DATA__testA  lucktestB  0.54MtestC  7.83MtestD  .43M 

读书人网 >perl python

热点推荐