2012-05-09 16 views
0

これらのアイテムのそれぞれの番号を抽出して別々に保管するだけです。これを行うにはどうすればよいでしょうか? データである場合は、C°
Pのようなもの4'i
アプリのデータ使用量の統計
E
III
! 12:12
受信データ
送信されたデータ
現在の使用
598キロバイト
28キロバイト
626キロバイト:18%
取得現在の統計ブラウザのApp
J
電池残量私はこれを試してみましたPerlテキストの抽出


、この場合、私は出力としてわずか18しか得られません。

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

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

}

おかげで、すべての行を超える

+2

それはいいだろう、あなたはこれまでに何をしましたか? –

+0

Rezaがこの質問に答えてくれましたが、http://perldoc.perl.org/perlretut.html – beresfordt

+0

のperlの優れた正規表現のドキュメントの指示にあなたを指摘する必要があると思います。投稿の編集を参照してください。 – Archer

答えて

4

ループ、および正規表現

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

を使用して、あなたの@arrayアレイ内のすべての数字を持っています

+0

ありがとうございますが、これは抽出のためにこれら3つの行がある場合にのみ有効です...他の数値情報を持つ行がさらに多い場合は、これを行うユニークな方法は:とKBまたは:との間の数を抽出することです各行の%...私は正しいですか?それが正しい場合は...それを行うには.. – Archer

+0

質問にnickisfatさんのコメントを見てください。ドキュメントは素晴らしいです。数字だけでなく説明も必要な場合は、[split](http://perldoc.perl.org/functions/split.html)をご覧ください。それをハッシュに入れたいかもしれません。 – simbabque

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' 
     };