ヘッダメニュー
書斎
MovableType
電算室
日々徒然
お知らせ
PHOTO
アーカイブ
ソフトウェア
開発メモ
DiCoPre
DiCoScE
[Perl] スケジュールスイッチ用関数
Posted by
ぴろり
Posted
at
2006/08/21 23:34
Post Comment
コメントできます
Category
バッチスクリプトでは、何時〜何時の間だけ実行する/しない、といった制御が必要になる場合があります。 この判定を簡単に行うための小さな
Perl
関数です。
Perl
スクリプトの自動運転などで活躍するつもり。
|
|
|
use strict; ### Schedule (From) <= T < (To) my %schedule = ( '21:00:00-27:00:00' => 1, '23:00:00-25:00:00' => 0, ); use Data::Dumper; print Dumper (¥%schedule); &testcase ('20:00:00'); &testcase ('21:00:00'); &testcase ('22:00:00'); &testcase ('22:59:59'); &testcase ('23:00:00'); &testcase ('24:00:00'); &testcase ('00:00:00'); &testcase ('00:59:59'); &testcase ('25:00:00'); &testcase ('01:00:00'); &testcase ('26:00:00'); &testcase ('02:00:00'); &testcase ('02:59:59'); &testcase ('03:00:00'); sub testcase { my ($item) = @_; printf "%s : %s¥n", $item, &isScheduledOn ($item) ? 'OK' : 'NG'; } ### sub isScheduledOn { my ($curtime) = @_; ;# return undef unless $curtime =‾ m/¥s*(¥d+)¥s*:¥s*(¥d+)¥s*:¥s*(¥d+)¥s*/; my ($hc,$mc,$sc) = ($1,$2,$3); ;# my $ret = 0; foreach (keys %schedule) { my $switch = $schedule{$_}; ;# parse next unless m/¥s*(¥d+)¥s*:¥s*(¥d+)¥s*:¥s*(¥d+)¥s*-?¥s*(¥d+)¥s*:¥s*(¥d+)¥s*:¥s*(¥d+)¥s*/; my ($h1,$m1,$s1, $h2,$m2,$s2) = ($1,$2,$3, $4,$5,$6); ;# normalize; h:[00,23], m:[00,59], s:[00,59] ($m1++, $s1 -= 60) while 60 <= $s1; ($h1++, $m1 -= 60) while 60 <= $m1; ($h1 -= 24) while 24 <= $h1; ($m2++, $s2 -= 60) while 60 <= $s2; ($h2++, $m2 -= 60) while 60 <= $m2; ($h2 -= 24) while 24 <= $h2; ;# T1 must be < T2 ($h2 += 24) while _ti($h2,$m2,$s2) < _ti($h1,$m1,$s1); ;# Check on today and tomorrow my $_tic = _ti($hc,$mc,$sc); foreach (0..1) { if (_ti($h1,$m1,$s1) <= $_tic && $_tic < _ti($h2,$m2,$s2)) { return 0 unless $switch; $ret = 1; } $_tic += 24 * 60 * 60;# tomorrow } } return $ret; # sub _ti { ($_[0] * 60 + $_[1]) * 60 + $_[2] } }
実行結果の例
X:¥temp>perl schedule.pl $VAR1 = { '21:00:00-27:00:00' => 1, '23:00:00-25:00:00' => 0 }; 20:00:00 : NG 21:00:00 : OK 22:00:00 : OK 22:59:59 : OK 23:00:00 : NG 24:00:00 : NG 00:00:00 : NG 00:59:59 : NG 25:00:00 : OK 01:00:00 : OK 26:00:00 : OK 02:00:00 : OK 02:59:59 : OK 03:00:00 : NG
この記事を読んだ人はこんな記事も読んでいます
トラックバックにサイトのサムネイルを表示する
(26hits)
講演のお知らせ
(15hits)
最近のスパム迎撃状況
(8hits)
ストレージ、飛ぶ
(7hits)
Google Calendarの予定表を表示する『ぐぐるかる』
(2hits)
その他の関連する記事
MovableTypeの検索機能を爆速にするプラグイン:SearchResultsCache
(2pts)
[Perl] 無名ハッシュに関するメモ
(2pts)
不思議な数字 〜 水田の数
(2pts)
この記事のアーカイブ
全ての記事
»
2006年
全てのカテゴリ
»
電算室
,
開発メモ
全てのタグ
»
Perl
,
ソースコード
キーワード検索 »
Perl
,
ソースコード
コメントを投稿する
名前
(必須/公開)
メール
(必須/非公開)
返信先
コメント
お気軽にコメントをお寄せください ・コメントを投稿するにはブラウザの JavaScript を有効にしてください ・入力された通りに改行位置で改行されます ・HTML タグは使用できませんが、文中の URL は自動的にリンクされます ・"<" は "<"、">" は ">" と書いてください
投稿確認
コメントスパム防止のため投稿前に
を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。
(必須)
リファレンス
ブロガープロフィール
ぴろり
ツール
このサイトを購読する
このサイトのフィード
この記事のコミュニケーションフィード
モバイル
管理
ナビゲーション
記事検索
検索機能を使うにはブラウザのJavaScriptを有効にしてください。
勝手におすすめ
色覚異常をシミュレーション CUDGlass
MovableTypeの記事をmixiに簡単投稿 mixiSync
MovableTypeのタグ機能を使って片手間SEO
MovableTypeで人気記事ランキングを表示する
MovableTypeプラグインの作り方(連載記事)
最近のコメント/関連記事
Google Analytics のコンバージョンレポート設定方法
Open MagicVox.net
mixi日記をBlowfishで暗号化 mixCipher
ぴろり ◆OLEEi.VOX.
ぉゅぅ
ぴろり
シリアルばかり食べていたら体重が5kg落ちてしまった
ぴろり ◆OLEEi.VOX.
てらぽん
キャッシュを利用して再構築を高速化するMovableTypeプラグイン:KeyCached
せんのじ
ぴろり ◆OLEEi.VOX.
せんのじ
どんな記事リストが効果的か?
Open MagicVox.net
てらぽん♪
最近の人気記事
誰でも簡単に15分間でソフトウェア作家だと思われる方法 (1)
(972hits)
仮想デスクトップ WinDeskWide が激しく便利な件
(712hits)
誰でも簡単に45分間でソフトウェア作家だと思われる方法 (2)
(558hits)
仮想デスクトップソフト Virtual Dimension を使ってみる
(421hits)
ぬるぬるローションの製作
(356hits)