Сортировка разделенных переменных из массива в скрипте Perl в этот конкретный формат? - PullRequest
0 голосов
/ 10 октября 2018

Я написал сценарий, который вызывает другой сценарий, используя два аргумента, один из которых - файл журнала, а другой - файл sql. Я пытаюсь захватить spid и cid (две записи) из базы данных,мне удалось захватить вывод в массив.например, 325 - это spid, а p58 - это cid.

325    p58
525    p58
591    p58
1180   p85

, но я должен расположить его в определенном формате, в котором не может быть повторяющихся cid, и на каждом cid должны быть напечатаны спиды.к этому.Мне удалось разделить массив, и это то, что я мог придумать до сих пор

p58- 325
p58- 525
p58- 591
p58- 1180 

и вот необходимый формат.

p58- 325, 525, 591, 1180

    my @results = capture( [0,1,2], $^X, "/asp_batch/bin/clientquery.pl", @ARGV);


    my $size =  scalar(@results);


    for (my $count = 0; $count < $size; $count++)
      {
         my ($spid, $cid) = split /\s+/, $results[$count];
         print $cid, "- ";
         print $spid, "\n";

      }     

1 Ответ

0 голосов
/ 10 октября 2018

Используйте хеш для сбора значений, индексированных на cid.Как только вы соберете все, выведите одну строку на ключ в хэше:

my %hash;

for (my $count = 0; $count < $size; $count++)
      {
         my ($spid, $cid) = split /\s+/, $results[$count];
         # the hash value is an anonymous array
         # it's created automatically for you when
         # you treat the value as a reference
         push @{ $hash{$cid} }, $spid;

      }  

foreach my $cid ( sort keys %hash ) 
    {
      say "$cid- ", join " ", @{ $hash{$cid} };
    }

Это очень распространенная техника Perl.В большинстве случаев, когда в проблеме обнаруживается «только один раз» или «уникальный», кто-то пытается получить хеш.

...