perl中的数据连接不起作用

时间:2017-08-31 10:55:56

标签: perl

我是perl的新手。我无法对列的数据进行非规范化。如何对其进行非规范化。我有以下输入

FieldA,FieldB,FieldC

bc,A1,A

bc,A2,A

bc,Z,Z

bc1,A,A

bc1,Z1,Z

bc1,Z2,Z

bc2,A1,A

bc2,A2,A

bc2,Z1,Z

bc2,Z2,Z

所需输出如下

FieldA,FieldB,FieldC

bc,A1#A2,Z

bc1,A,Z1#Z2

bc2,A1#A2,Z1#Z2

我尝试使用推送功能,但它不起作用。请帮忙解决这个问题。

my @aArray;

my @zArray;

while(<FILE_HANDLER>){

    chomp($_);

    @arr = split(/,/$_);

    $bc_name = $arr[0];

    $end = $arr[1];

    if($end eq $end_temp){

        push @aArray, $end;

    }else{

        push @zArray,$end;

    }

    $end_temp = $end;

}

1 个答案:

答案 0 :(得分:1)

在这种情况下使用哈希值,使用bc,bc1,bc2值作为键并将值与现有哈希值连接。

use warnings;
use strict;
my %h;
scalar <DATA>; #removing first line
while (<DATA>)
{
    chomp;
    my ($l,$r) = split(",");
    $h{$l} .= "$r ";

}

print "$_ $h{$_}\n" foreach (keys %h)


__DATA__
FieldA,FieldB
bc,A1
bc,A2
bc,Z
bc1,A
bc1,Z1
bc1,Z2
bc2,A1
bc2,A2
bc2,Z1
bc2,Z2

您的脚本中存在多个问题,

首先,您应该在每个程序中使用use warningsuse strict

你错过了,分裂功能的问题。而这种情况使用哈希,因为如果我们需要一个数组,我们需要做更多的逻辑。

如果您使用的是默认变量($_),请使用以下代码,而不是您的

chomp($_);您可以写为chomp;

@arr = split(/,/$_);您可以写为@arr = split(/,/);