-1

私が知っているログファイルmy_file.txtには、次の構造があります。

milk marta 1231 joe 1223 ralph 7C3D
cookie
jam
milk marta 163 joe 23 ralph 7FFF

そして、私がやりたいことは、perl の正規表現を使用して、区切り文字で始まる行のすべての値を抽出することですmilk(これは事前に知っています)。次に、いくつかの値の名前 (おもちゃの例martaでは , joe, ralph) があり、それぞれに 10 進数または 16 進数の値が続くことがわかります。

  • 10進数か16進数かを事前に知らずに値を読み取る方法はありますか?

  • この値を保存する最良の方法は何ですか? martaキーが, joe,であるハッシュを実行することを考えましたがralph、事前にそれらを知らない可能性があります。

そして、これまでのところ私の試みはここにあります

$my_file = "my_file.txt"
open my $fh, $my_file or die "Nope!"

while (my $line = <$fh>)
{
    if ($line =~ m/milk/)
    {
        # here iterate with a for or while loop over the $line
        # and read word and value
    }
}
4

2 に答える 2

2

数字の文字列が10進数か16進数かを判断する問題は別として、このようなものは必要なテキストを抽出します

use strict;
use warnings 'all';

use Data::Dump 'dd';

my @data;

while ( <DATA> ) {
    my ($col1, %item) = split;
    push @data, \%item if $col1 eq 'milk';
}

dd \@data;

__DATA__
milk marta 1231 joe 1223 ralph 7C3D
cookie
jam
milk marta 163 joe 23 ralph 7FFF

出力

[
  { joe => 1223, marta => 1231, ralph => "7C3D" },
  { joe => 23, marta => 163, ralph => "7FFF" },
]
于 2016-08-30T15:15:36.463 に答える