私は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 ライブラリはありますか。