0

我只需要提取每个项目中的数字并单独存储它们,最好的方法是什么?如果数据类似于
p °c 4'i
应用数据使用统计
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

这是一种方法。请注意,它不关心根据您的要求提取哪种数字。

它将冒号上的行拆分为最多两个字段,键和值。然后我们从值中提取数字并插入到哈希中。这部分将有效地跳过所有值不包含数字的行。这也是您要插入更严格检查的地方,例如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 回答