次のようなファイルがあります。
[options42BuySide]
logged-check-times=06:01:00
logged-check-address=192.168.3.4
logged-check-reply=192.168.2.5
logged-check-vac-days=sat,sun
start-time=06:01:00
stop-time=19:00:00
falldown=logwrite after 10000
failtolog=logwrite after 10000
listento=all
global-search-text=Target Down. This message is stored;
[stock42BuySide]
logged-check-times=06:01:00
logged-check-address=192.168.2.13
logged-check-reply=192.168.2.54
logged-check-vac-days=sat,sun
start-time=06:01:00
stop-time=18:00:00
このスクリプトは、リストを名前、開始時間、終了時間だけにまで細分化します。
sellSide40, start-time=07:05:00, stop-time=17:59:00
SellSide42, start-time=07:06:00, stop-time=17:29:00
SellSide44, start-time=07:31:00, stop-time=16:55:00
42SellSide, start-time=09:01:00, stop-time=16:59:00
問題は、コマンド ライン パラメータを使用してファイルから特定の名前を除外したいことです。@ARGV 配列を使用して、@nametimes 配列からコマンド ライン値を grep しようとしています。何かのようなもの :
capser@capser$ ./get_start_stop SorosSellSide42 ETFBuySide42
スクリプトはファイルを解析するために正常に動作します - コマンドライン配列に関するヘルプが必要です
#!/usr/bin/perl
use strict ;
use warnings ;
my ($name , $start, $stop, $specific);
my @nametimes;
my $inifile = "/var/log/Alert.ini";
open ( my $FILE, '<', "$inifile") or die ("could not open the file -- $!");
while(<$FILE>) {
chomp ;
if (/\[(\w+)\]/) {
$name = $1;
} elsif (/(start-time=\d+:\d+:\d+)/) {
$start = $1;
} elsif (/(stop-time=\d+:\d+:\d+)/) {
$stop = $1;
push (@nametimes, "$name, $start, $stop");
}
}
for ($a = 0; $a >= $#ARGV ; $a++) {
$specific = (grep /$ARGV[$a]/, @nametimes) ;
print "$specific\n";
}
おそらくかなり簡単ですが、私は何日もかけて取り組んできましたが、このショップで perl を使用しているのは私だけです。私には誰にも尋ねる人がいませんし、グーグル化も進んでいません。このような簡単な質問をすることで、私に怒鳴るはずの perl の神々を怒らせてしまったことを、あらかじめお詫び申し上げます。