как преобразовать столбец в строку в Perl - PullRequest
0 голосов
/ 27 июня 2019

Я читаю значения из моей базы данных 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.Я хочу использовать вывод в запросе, как в заявлении.

1 Ответ

2 голосов
/ 27 июня 2019

Ваш вывод поступает из этого раздела вашего кода:

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 в вашем коде.И исправьте проблемы, которые они выявят.
  • Используйте встроенные в Perl инструменты даты и времени вместо того, чтобы указывать date.
  • Использование :: в вашем дескрипторе файла голого слова ничего не дает.Просто DBCMD работает так же и менее запутанно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...