菜鸟求助(急):perl访问DB2 导出数据后进行数字和字符串的辨别并将已.开头的数字前面加0 脚本执行结果错误 那位大侠帮修改下 小弟不胜感激!!!

luoxinup 2012-05-28 04:15:45
前面一大段是访问数据库的 我测试过了 应该没问题 主要帮看看后面的判断 谢。
#!/usr/local/bin/perl -w
use DBI;
use strict;

# represents a DB2 alias cataloged in your DB2 database directory
# my $Database = "dbi:DB2:" + $ARGV[0];
my $Database = "dbi:DB2:TEST";
# represents the user ID used to connect to the database
# my $Username = $ARGV[1];
my $Username = "ming";
# represents the password for the user ID
# my $Password = $ARGV[2];
my $Password = "tian";
# query statement from database
# my $DBQuery = $ARGV[3];
my $DBQuery = "SELECT * FROM MONAH.HELP";

# represents the database handle returned by the connect statement
my $DBConn = DBI->connect($Database, $Username, $Password) or
die "Cannot connect: $DBI::errstr";

# to connect database and prepare the query
my $DBResult = $DBConn->prepare($DBQuery) or
die "Cannot prepare: $DBConn->errstr";

# get the result from database
$DBResult->execute() or
die "Cannot execute: $DBResult->errstr";
#my $RowCount = $DBConn->do($DBQuery);

# check the execution's return code
my $DBState = $DBConn->state;
my $SQLCode = $DBConn->err;

my $Col1;
my $Col2;

# valibles for test the value type
my $numVal;
my $strVal;

$DBResult->bind_col(1, \$Col1);
$DBResult->bind_col(2, \$Col2);


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";

}

# finished
$DBResult->finish();

# close the connection
$DBConn->disconnect();


DB2连接应该没问题可以导出数据但是判断后不是想要的结果 本鸟才开始学习perl 希望哪位能帮我改改脚本 非常感谢。

实际输出结果:
Update | 15:32:53 | 0
time | 00:05:00 | 0
CPU used | .476 | 0
capabilit | .3 | 0
perm | 1.304 | 0


想要的结果:
Update | 15:32:53 | 0
time | 00:05:00 | 0
CPU used | NA | 0.476
capabilit | NA | 0.3
perm | NA | 1.304
...全文
107 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bugs2k 2012-05-28
while ($DBResult->fetch) {
if ($Col2 =~ /\d*\.\d+/) {
$numVal = $Col2 + 0;
$strVal = "NA";
}
else {
$numVal = 0;
$strVal = $Col2;
}
print "$Col1 | $strVal | $numVal\n";
}
回复
bugs2k 2012-05-28
    my ($numVal, $strVal) = ();
if ($Col2 =~ /\d*\.\d+/) {
$numVal = $Col2 + 0;
$strVal = "NA";
}
else {
$numVal = 0;
$strVal = $Col2;
}
print "$Col1 | $strVal | $numVal\n";
回复
luoxin46001197 2012-05-28
那个原始数据总对不整齐呢 再发一遍 共两列 以“|”做分隔

Update | 15:32:53
time | 00:05:00
CPUused | .476
capabilit | .3
perm | 1.304
回复
luoxin46001197 2012-05-28
感谢楼上两位 。。不过还是不行啊
原始数据是
Update 15:32:53
time 00:05:00
CPU used .476
capabilit .3
perm 1.304

我的目的是 将第二列拆分成‘字符串(15:32:53)和数字(.476)’两列 ,并且将这种.476的这种数据 前面加0放到数字列中。 while循环里的脚本 刚才经过单独测试可以达到这种效果,但不知为什么放到循环里就不执行了,,麻烦各位再帮我看看 感谢!!!!!!!!!!!!
回复
fibbery 2012-05-28
perl -e "print '.32'*1.0"
0.32
回复
bugs2k 2012-05-28
if ($Col2 =~ /^(\d+\.\d+)$/) {
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2012-05-28 04:15
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: