2013-07-11 5 views
0

를 사용하는 경우 정의되지 않은 값에 대한 경고 제거하기 :내가 CSV 데이터로부터 PNG 형식의 차트 생성하기 차트 모듈을 사용하고 차트 모듈

그것은 잘 작동 enter image description here

이 차트 괜찮아 보여,하지만 난

# ~/txv3.pl "./L*TXV3*.csv" > /var/www/html/x.html 
Generating chart: L_B17_C0_TXV3LIN_PA3_TI1_CI1 
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69. 
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69. 
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69. 
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69. 
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69. 
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69. 
나는 그들이 여기에 쓸모가 이러한 경고를 제거 할 필요가

그들이 내 Hudson-의 로그를 확인하십시오 undef 값에 대한 경고를 얻을 (위 그림의 끝에 3 개와 같은 값이 있습니다) 작업을 읽을 수 없습니다.

그래서 나는 (CentOS는 6.4/64 비트에 펄 5.10.1을 사용하여) 시도했다 :

#!/usr/bin/perl -w 
use strict; 
.... 

$pwrPng->set(%pwrOptions); 
$biasPng->set(%biasOptions); 

my $pwrPngFile = File::Spec->catfile(PNG_DIR, "${csv}_PWR.png"); 
my $biasPngFile = File::Spec->catfile(PNG_DIR, "${csv}_BIAS.png"); 

{ 
     no warnings; 

     $pwrPng->png($pwrPngFile, $pwrData); 
     $biasPng->png($biasPngFile, $biasData); 
} 

그러나 경고는 여전히 인쇄됩니다.

제안 사항을 알려주십시오.

+2

을'더 warnings'는 당신이 선언 블록 범위가 제한되지 않습니다 그것. 해당 범위에서 호출되었지만 다른 범위에서 정의 된 서브 루틴에는 적용되지 않습니다. – mob

답변

-1

허드슨 작업에서는 경고 신호를 처리하는 경고 신호를 설치하여 경고를 필터링하므로 사용자가 알고있는 경고를 표시하지 않습니다.

BEGIN { 
    $SIG{'__WARN__'} = sub { my $w = shift; warn $w if $w !~ m|/Chart/Base.pm| }; 
} 
+0

경고가 중요하지 않으므로 무시하십시오. 그것은 끔찍한 생각처럼 들립니다. –

+2

일반적으로 이것은 끔찍한 생각 일지 모르지만 저를 비난하지 마십시오. "나는 그들이 여기 쓸모없는 것처럼 이러한 경고를 제거해야합니다." 코드의이 작은 부분만으로 충분합니다. – innaM

+0

+1 그리고 anwser에게 감사드립니다. 예, 경고는 중요하지 않으며 잘못되었습니다. –

0

일반적으로 경고를 무시하지 않는 것이 가장 좋습니다.

차트를 만들기 전에 먼저 undef 값을 처리하지 않는 이유는 무엇입니까? 재치있는 무언가로 대체하거나 해당 행 플로팅 건너 다음 중 하나를

data.csv

RGI,BIAS,LABEL 
20,130,"1146346307 #20" 
21,135,"1146346307 #21" 
22,140, 

-

use Scalar::Util qw(looks_like_number); 
my $fname = "data.csv"; 
open $fh, "<$fname" 
    or die "Unable to open $fname : $!"; 

my $data = []; 
while (<$fh>) { 
    chomp; 
    my ($rgi, $bias, $label) = split /,/; # Better to use Text::CSV 
    next unless looks_like_number($rgi); 
    next unless looks_like_number($bias); 
    $label ||= "Unknown Row $."; # Rownum 

    # Create whatever structure you need. 
    push @$data, { rgi => $rgi, bias => $bias, label => $label }; 
} 

# Now draw chart 
+0

여기에 'next'를 호출하면 (undef) 값을 생략하고 x 축에서 제거합니다. 예를 들어 행이있을 때와 undef 또는 null 등으로 표시되는 간격이있는 경우가 있습니다. 다시 회선 –

+0

동의, 내 요점은 당신이 음모를 꾸미기 전에 데이터 문제를 처리해야한다는 것입니다. – xxfelixxx

+0

"데이터 처리"란 무엇을 의미합니까? Chart :: Lines 모듈은'undef' 값에 대한 불필요한 경고를 출력하지만 그렇지 않으면 제대로 처리합니다. 'undef'를 0 또는 -1로 변경하거나 그 값을 무시하면 차트가 잘못됩니다. –