-1

このようなファイルが1つあります

COMPANY=xyz
system.employee[0].Name=shayam
system.employee[0].Age=26
system.employee[0].sex=Male
system.employee[1].Name=ram
system.employee[1].Age=28
system.employee[1].sex=Male

COMPANY=bhg
system.employee[0].Location=Bangalore
system.employee[0].Number=26
system.employee[1].Location=chennai
system.employee[1].Number=28

名前、年齢、性別の列を持つ会社xyzのテーブルと、場所と番号の列を持つもう1つのテーブルを作成したいと思います。perlを使用してこれを達成する方法を教えてください出力は次のようになります

COMPANY xyz

名前年齢性別

シャヤム26男性

ラム28男性


COMPANY bgh

ロケーション番号

バンガロール26

チェンナイ28

ありがとう

4

1 に答える 1

1

以下の大まかなコードはプログレッシブマッチを実行します。つまり、文字列を下に移動して、必要なデータを抽出します。同様のコードをファイルの2番目の部分に使用できます。

#!/usr/bin/perl -w
use strict;
use warnings;

my $inline;
{
    local $/ = undef;    #turn on slurp mode
    $inline = <DATA>;
}

print "COMPANY xyz\nName Age sex\n";    #Report header

$inline =~ s/^COMPANY=xyz\n(.*)COMPANY=bhg/$1/msx;    #strip off surplus text to
$inline =~ s/system\.employee\[\d+\]\.//gx;    #simplify progressive match below

while (
    $inline =~ /
(?:                 #start of non capturing block
    Name=(.*)\n
    Age=(.*)\n
    sex=(.*)\n
){1}            # end of non-capturing block (progressive match)
/gmx    # g=progressive match, m=multiline match x=comments
  )
{
    print "$1 $2 $3\n";
}

__DATA__
COMPANY=xyz
system.employee[0].Name=shayam
system.employee[0].Age=26
system.employee[0].sex=Male
system.employee[1].Name=ram
system.employee[1].Age=28
system.employee[1].sex=Male

COMPANY=bhg
system.employee[0].Location=Bangalore
system.employee[0].Number=26
system.employee[1].Location=chennai
system.employee[1].Number=28
于 2010-06-01T15:36:48.493 に答える