2

私はPerlの初心者です。以下に示すように、ツリー形式のデータを含むファイルがありました。大きなデータを解析し、そこから .TSV ファイルを生成する必要があります。ファイルのフォーマットは

A 
|
|--B 
|  |
|  |--C
|     | 
|     |---PQR
|     |---XYZ
|--D
|  |
|  |---LMN
|---XYZ

必要な出力はタブ区切り形式です。

Coloum1     Coloum2     Coloum3     Coloum4 
A           B           C           PQR
A           B           C           XYZ
A           D                       LMN
A                                   XYZ

中間ノードで機能しないコードを書きました。ここでは、葉ノードを持たない B ノードであり、ルート ノードに接続されている葉ノードが正しく出力されません。コマンドラインから入力ファイルを読み込んでいます。

#!/usr/bin/perl
use Data::Dumper;
open (MYFILE, "<", $ARGV[0]);

my $content = "";
while(<MYFILE>)
{
    my $line = $_;
    $content = $content.$line;
}

my ($root, @block) = split(/\|--(\w)/, $content);

$root =~ s/.*?(\w+).*/$1/is;
my %block = @block;

print "\nColoum1\tColumn2\tColumn3\tColumn4";
foreach my $key( keys %block)
{
    my $content =  $block{$key};
    my (undef, @lines) = split(/\n/, $content);
    foreach my $line (@lines)
    {
        if($line =~ /---(\w+)/is)
        {
            my $val = $1;

            if(defined $val)
            {
                print "\n$root\t$key\t$val";
            }
        }
    }
}

これから得た出力は

Coloum1     Column2     Column3     Column4
A           D       LMN
A           D       XYZ
A           C       PQR
A           C       XYZ

このコードに欠けているものがあります。私の問題を解決するために私を導くことができますか?

このような問題を処理するのに役立つ CPAN ライブラリはありますか。

4

1 に答える 1