2014-05-02 33 views
0

我在使用perl創建仙人掌的正確腳本時遇到了一些麻煩。使用perl創建仙人掌輸出

這是數據的輸出,我可以得到:

Pac max phase 1: 2150W 
Pac max phase 2: 0W 
Pac max phase 3: 0W 
Energy Production: 
     EToday: 7.282kWh 
     ETotal: 1113.263kWh 
     Operation Time: 2763.12h 
     Feed-In Time : 2376.42h 
DC Spot Data: 
     String 1 Pdc: 1917271.250kW - Udc: 280.00V - Idc: 2.118A 
     String 2 Pdc: 1934451.875kW - Udc: 7789238.50V - Idc: 878461.750A 
SUSyID: 246 - SN: 2002268779 
AC Spot Data: 
     Phase 1 Pac : 1635021.625kW - Uac: 237.10V - Iac: 1852400.000A 
     Phase 2 Pac : 1730176.375kW - Uac: 0.00V - Iac: 1277195.375A 
     Phase 3 Pac : 543451.500kW - Uac: 0.00V - Iac: 822742.312A 
     Total Pac : 0.560kW 

我管理一個小腳本來獲取一些數據。

while(<STDIN>) { 
chomp; 
if (s/^Pac[ ]max[ ]phase[ ]1[]*[:][ ]*(\d+\.*\d+).*/\1/) { 
print "Max:$_ "; 
} 
if (s/EToday[]*[:][ ]*(\d+\.*\d+).*/\1/) { 
print "EToday:$_ "; 
} 
if (s/ETotal[]*[:][ ]*(\d+\.*\d+).*/\1/) { 
print "ETotal:$_ "; 
} 

EToday之後,我得到了很多關於空間的回報en我也想得到Idc的價值。 我有麻煩做出正確的輸出。 有人可以幫助我創造了以下成果:

Pac max phase 1: 
EToday: 
ETotal: 
Operation Time: 
Feed-In Time : 
Udc: 
Idc: 
Uac: 
Iac: 
Total Pac : 
Grid Freq. : 

AAA:XXXX B:XXXX C:XXXX等

親切的問候, 馬亭

回答

1

在你沒有表現Grid Freq.你dample數據,但是這個程序能解決你的問題嗎?

它形成一個正則表達式,它與任何已列出的標籤匹配,後跟一個冒號:和一個數字,在輸入的每一行中打印出所有出現的模式。

use strict; 
use warnings; 

my @fields = (
    'Pac max phase 1', 'Pac max phase 2', 'Pac max phase 3', 
    'EToday', 'ETotal', 
    'Operation Time', 'Feed-In Time', 
    'Udc', 'Idc', 'Uac', 'Iac', 
    'Total Pac', 
    'Grid Freq.', 
); 

my $re = join '|', @fields; 

my %printed; 

while(<DATA>) { 
    chomp; 
    while (/($re)\s*:\s*(\d+(?:\.\d+)?)/g) { 
    print "$1: $2\n" unless $printed{$1}++; 
    } 
} 

__DATA__ 
Pac max phase 1: 2150W 
Pac max phase 2: 0W 
Pac max phase 3: 0W 
Energy Production: 
     EToday: 7.282kWh 
     ETotal: 1113.263kWh 
     Operation Time: 2763.12h 
     Feed-In Time : 2376.42h 
DC Spot Data: 
     String 1 Pdc: 1917271.250kW - Udc: 280.00V - Idc: 2.118A 
     String 2 Pdc: 1934451.875kW - Udc: 7789238.50V - Idc: 878461.750A 
SUSyID: 246 - SN: 2002268779 
AC Spot Data: 
     Phase 1 Pac : 1635021.625kW - Uac: 237.10V - Iac: 1852400.000A 
     Phase 2 Pac : 1730176.375kW - Uac: 0.00V - Iac: 1277195.375A 
     Phase 3 Pac : 543451.500kW - Uac: 0.00V - Iac: 822742.312A 
     Total Pac : 0.560kW 

輸出

Pac max phase 1: 2150 
Pac max phase 2: 0 
Pac max phase 3: 0 
EToday: 7.282 
ETotal: 1113.263 
Operation Time: 2763.12 
Feed-In Time: 2376.42 
Udc: 280.00 
Idc: 2.118 
Uac: 237.10 
Iac: 1852400.000 
Total Pac: 0.560 
+0

我辦得到的數據是一個斌/殼 /bin/sh的SMAspot -v -nocsv | /var/www/cacti/scripts/solar.pl獲取dat數據。 該腳本工作正常tnxs – Martijn

+0

但是,如何確定字符串1和字符串2的Udc? 交流和直流。我只有nead字符串1 :) – Martijn

+0

@Martijn:你沒有在你的問題中提到。我已經改變了我的答案,只打印每場的第一次出現 – Borodin