2012-05-09 3 views
0

이 항목들 각각의 숫자를 추출하여 따로 저장하면됩니다.이 작업을 수행하는 가장 좋은 방법은 무엇일까요? 데이터 인 경우 C °
페이지 같은 4'i
앱 데이터 사용량 통계
E
III
! 오후 12시 12분
수신 된 데이터
보낸 데이터
현재 사용
598킬로바이트
28킬로바이트
6백26킬로바이트 : 18 %
받기 현재 합계 브라우저 앱
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

게시물의 편집을 참조하십시오. – Archer

답변

4

루프, 그리고 정규 표현식

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

를 사용하여 그리고 당신은 당신의 @array 배열의 모든 숫자를해야합니다

+0

고맙습니다 만,이 세 줄의 추출이있는 경우에만 작동합니다 ... 다른 숫자 정보가있는 줄이 더 많이 있으면 ...이 작업을 수행 할 수있는 고유 한 방법은 다음과 같이 숫자를 추출하는 것입니다. 각 줄마다 % ... 내가 맞습니까? 그게 맞아 .. 어떻게 할거야 .. – Archer

+0

질문에 nickisfat의 코멘트를보세요. 문서는 훌륭합니다. 숫자뿐만 아니라 설명도 원하면 [split] (http://perldoc.perl.org/functions/split.html)를보십시오. 이것을 해시에 넣을 수도 있습니다. – simbabque

0

한 가지 방법이 있습니다. 그것은 귀하의 요청에 따라 추출하는 숫자의 종류에 상관하지 않습니다.

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