繁体   English   中英

如何在perl中将列转换为行

[英]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 strictuse warnings 并解决他们将揭示的问题。
  • 使用Perl的内置日期和时间工具,而不是炮制date
  • 在裸字文件句柄上使用::不会产生任何效果。 只是DBCMD以相同的方式工作并且不那么混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM