0

これらの各アイテムの数値を抽出して個別に保存する必要があるだけですが、これを行う最善の方法は何ですか? IF データが
p °c 4'i
App data usage stats
E
iii
!のようなものである場合 12:12PM
受信データ
送信データ
現在の使用量
598KB
28KB
626KB :18%
現在の統計を取得 ブラウザアプリ
J
バッテリー残量

これを試してみましたが、この場合、出力として 18 しか得られません。

foreach my $line (@lines) {
if ($line =~/ :[ ]*(\d+)[ ]*(KB|%)/) {

$value = $1;
print "the value is $value\n";
    push (@array, $1);
}

}

ありがとう、

4

2 に答える 2

4

すべての行をループし、正規表現を使用する

foreach my $line (@lines) {
    if ($line =~ /(\d+)/) {
        push (@array, $1);
    }
}

@arrayそして、配列にすべての数値が含まれます

于 2012-05-09T07:34:43.277 に答える
0

これを行う1つの方法を次に示します。リクエストに応じて、抽出する数値の種類は気にしないことに注意してください。

キーと値の最大 2 つのフィールドのコロンで行を分割します。次に、値から数値を抽出し、ハッシュに挿入します。この部分は、値に数値が含まれていないすべての行を効果的にスキップします。これは、より厳密なチェックを挿入する場所でもあります。たとえば、if ($value =~ /(\d+)\s*KB/i)数字の後に続くもののみをキャプチャしますKB(大文字と小文字を区別しないようにすることにしました)。

use strict;
use warnings;
use Data::Dumper;

my %hash;

while (<DATA>) {
    my ($key, $value) = split /\s*:\s*/, $_, 2;
    if ($value =~ /(\d+)/) {
        $hash{$key} = $1;
    }
}
print Dumper \%hash;

__DATA__
Received data : 598 KB
Sent data : 28 KB
Current usage : 626 KB
Battery Level : 35 %

出力:

$VAR1 = {
          'Sent data' => '28',
          'Current usage' => '626',
          'Battery Level' => '35',
          'Received data' => '598'
        };
于 2012-05-09T12:52:16.117 に答える