[英]how to convert column into row in perl
我正在从sql数据库中读取列的值。 现在,我想以逗号转换行中的列值(例如:-“ abc”,“ xyz”)
Source Data:-
amol
aakash
shami
krishna
Output expected: ( "amol","aakash","shami","krishna")
我正在尝试的代码:-
#!/usr/bin/env perl
$t = `date`;
#print $t;
$GCMS_SERVER = $ENV{DSQUERY};
$GCMS_USERNAME = $ENV{GCMS_USERNAME};
$GCMS_PASSWORD = $ENV{GCMS_PASSWORD};
$GCMS_DATABASE = $ENV{GCMS_DATABASE};
#print "test\n";
my $query = "SELECT Label FROM FeedGenSource WHERE BaseFileName ='aldgctna'";
#print "SQL =$query\n";
my $sqlcmd = (qq/
set nocount on
go
use $GCMS_DATABASE
go
$query
/);
open(::DBCMD, "sqsh -S$GCMS_SERVER -U$GCMS_USERNAME -h -w100 -P- <<EOF
$GCMS_PASSWORD
$sqlcmd
go
EOF
|") || die("Could not communicate with DB ");
while(<::DBCMD>){
print "$_";
}
#print "done\n";
close ::DBCMD;
exit
这是perl脚本。 我想在语句中使用查询中的输出。
您的输出来自代码的这一部分:
while(<::DBCMD>){
print "$_";
}
文件句柄::DBCMD
连接到sqsh
命令的输出。 您的代码从该文件句柄读取每个记录,并将其打印到STDOUT
。
如果您想对输出进行更巧妙的处理,则必须将数据存储在某种数据结构中(在这种情况下可能是数组)并进行操作。
我希望您想要这样的东西:
my @data;
while (<::DBCMD>) {
chomp; # remove the newline
push @data, $_;
}
# And then:
print join(',', @data), "\n";
要打印您想要的确切输出,您需要这样做:
print '(', join(',', map { qq["$_"] } @data), ")\n";
但是我不得不问...您为什么要通过处理来自sqsh
数据使您的生活变得如此艰难? 您应该真正看一下Perl的数据库接口库DBI 。 那将使您的生活变得更加简单。
其他一些技巧:
use strict
并use warnings
。 并解决他们将揭示的问题。 date
。 ::
不会产生任何效果。 只是DBCMD
以相同的方式工作并且不那么混乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.