菜鸟求助(急):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
...全文
167 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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+)$/) {
标题基于Spring Boot的骑行路线规划与分享平台研究AI更换标题第1章引言介绍骑行路线规划与分享平台的研究背景、意义、国内外现状以及本论文的方法和创新点。1.1研究背景与意义分析骑行运动普及和路线分享需求,阐述平台设计的必要性。1.2国内外研究现状概述国内外在骑行路线规划与分享方面的技术发展和应用现状。1.3研究方法与创新点说明本文采用的研究方法和实现的创新功能。第2章相关理论与技术介绍Spring Boot框架、路线规划算法和分享技术的基础理论。2.1Spring Boot框架概述解释Spring Boot的核心概念和优势,以及在本平台中的应用。2.2路线规划算法原理阐述常用的路线规划算法,如Dijkstra、A等,并分析其适用场景。2.3分享技术实现方式介绍平台实现路线分享所采用的技术手段,如社交媒体集成、二维码生成等。第3章平台需求分析与设计详细阐述骑行路线规划与分享平台的需求分析、系统设计和数据库设计。3.1需求分析从用户角度出发,分析平台应具备的功能和性能要求。3.2系统设计设计平台的整体架构、模块划分以及各模块之间的交互方式。3.3数据库设计根据平台需求,设计合理的数据库表结构和数据存取方式。第4章平台实现与测试说明平台的开发环境、关键模块的实现过程,以及系统测试的方法与结果。4.1开发环境搭建介绍开发平台所需的软硬件环境及其配置方法。4.2关键模块实现详细描述路线规划、路线分享等核心功能的实现细节。4.3系统测试与性能评估对平台进行功能测试、性能测试,并分析结果以验证系统的稳定性和可靠性。第5章结论与展望总结本文的研究成果,指出不足之处,并展望未来的研究方向和改进措施。5.1研究结论概括性地阐述本文的主要研究内容和取得的成果。5.2未来工作展望针对当前研究的局限性,提出未来可能的改进方向和扩展功能。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧