두 라벨의 속성을 함께 인쇄

두 라벨의 속성을 함께 인쇄

저는 XML:twigXML 파일에서 일부 속성을 추출하기 위해 Perl을 사용하고 있습니다.

이것은 내 코드입니다.

use XML::Twig;
my $file = $ARGV[0];
$file =~ /(.+)\.xml/;
my $outfile = $1.".snp" ;
open my $out,'>',$outfile or die "Could not open file '$outfile' $!";
my $twig = XML::Twig->new
(
twig_handlers => 
    {
        'Rs/MergeHistory' => \&MergeHistory,
    }
);
 $twig -> parsefile( "$file");
sub MergeHistory 
    {
        my ($twig, $elt) = @_;
        print $out "\t";
        print $out "rs";
                print $out $elt->att('rsId'), ",";
        print $out "b";
        print $out $elt->att('buildId'), ",";
    }

그러면 다음 결과가 인쇄됩니다.

rs56546490,b130,    rs386588736,b142
rs56546490,b130,    rs386588736,b142

내가 원하는 것은 다음과 같이 각 합계를 MergeHistory rsId함께 인쇄하는 것입니다 buildId.

rs56546490,rs386588736,   b130,b142
rs56546490,rs386588736,   b130,b142

다음은 XML 파일의 일부입니다.

<Rs>
<MergeHistory rsId="56546490" buildId="130" />
<MergeHistory rsId="386588736" buildId="142" />
</Rs>
<Rs>
<MergeHistory rsId="56546490" buildId="130" />
<MergeHistory rsId="386588736" buildId="142" />
</Rs>

답변1

이것:

use XML::Twig;
my $file = $ARGV[0];
$file =~ /(.+)\.xml/;
my $outfile = $1.".snp" ;
open my $out,'>',$outfile or die "Could not open file '$outfile' $!";
my $twig = XML::Twig->new
(
twig_handlers =>
    {
        'Rs/MergeHistory' => \&MergeHistory,
    }
);

# Here starts changed code.

my %output = ( "rs", (),
             "b" , () );

$twig -> parsefile( "$file" );

my $inLine = 2;  # You said You want 2 in one line.

while( @{$output{"rs"}} ) {
    for( my $i=0; $i < $inLine; $i++ ) {
        print "rs" . ( shift @{$output{"rs"}} ) . ",";
    }
    print "\t";
    for( my $i=0; $i < $inLine; $i++ ) {
        print "b" . ( shift @{$output{"b"}} )  . ( $i == $inLine-1 ? "" : "," );
    }
}

print "\n";




sub MergeHistory
    {
        my ($twig, $elt) = @_;

        push @{$output{"rs"}}, ( "rs" . $elt->att('rsId') );
        push @{$output{"b"}},  ( "b" . $elt->att('buildId') );
    }

다음을 인쇄합니다:

rs56546490,rs386588736,   b130,b142

관련 정보