Tan's monologue

Tan's monologue

日常の出来事とか独り言をならべています。

でも食事のことが多くなるのは
表現力が不足してるからなのだろうなぁ。

コメントをいただけると幸いです。

Amebaでブログを始めよう!

<html>
<head>
<title>Unicode Decoder</title>
<script language="JScript">
////////////////////////////////////////////////////////////////
// Unicode Decoder
//
////////////////////////////////////////////////////////////////
//====================================
// 処理メイン
//====================================
function ScriptMain() {

    var arrayLines = window.form1.targetList.value.split(/\n/);

    // 結果リストボックス用領域を準備。
    var resultList    = "";

    // 改行コードを削除する。
    for (var i=0; i<arrayLines.length; i++) {
        strLine = arrayLines[i].replace(/[\n\r]/g, "");    // 改行コードを削除する。
        strWords    = strLine.replace(/(\\u.{4})+/ig, '__%%%__');
        arrayUcodes = strLine.match(/(\\u.{4})+/ig);
        for (var j=0; j<arrayUcodes.length; j++) {
            strWords = strWords.replace(/__%%%__/, unicodeUnescape(arrayUcodes[j]));
        }
        resultList = resultList + strWords + "\n";
    }

    // 結果リストボックスの内容を更新する。
    window.form1.resultList.value = resultList;

}

//==================================
// Unicode Unescape
//==================================
var unicodeUnescape = function(str) {
    var result = '', strs = str.match(/\\u.{4}/ig);
    if (!strs) return '';
    for (var i = 0, len = strs.length; i < len; i++) {
        result += String.fromCharCode(strs[i].replace('\\u', '0x'));
    }
    return result;
};

//==================================
// Window OnLoad イベントプロシジャ
//==================================
window.onload = function() {

    // Windowサイズを調整する。
    window.resizeTo(790,460)

};


</script>
</head>
  <hta:application
     id="HTA"
     icon=""
     applicationname=""
     border="thick"
     borderstyle="normal" 
     caption="yes" 
     innerborder="yes" 
     maximizebutton="yes" 
     minimizebutton="yes" 
     showintaskbar="yes" 
     singleinstance="no" 
     sysmenu="yes" 
     version="" 
     windowstate="nomal" 
     scroll="yes" 
     scrollflat="yes" 
     selection="yes" 
     contextmenu="yes" 
     navigable="yes" />
<body>
<form name="form1">
    <table>
    <tr valign="middle">
        <td><textarea name="targetList" cols="30" rows="20" wrap="off"></textarea></td>
        <td><input type="button" value=" ⇒ " onClick="ScriptMain()" /></td>
        <td><textarea name="resultList" cols="60" rows="20" wrap="off"></textarea></td>
    </tr>
    </table>
</form>
</body>
</html>
 

# -*- coding: utf8 -*-

import sys

from tkinter import Tk, ttk, StringVar

 

# configファイル名

config_file = 'config.py'

 

# 送信先dict

ip_lists = [{'ip1' : '192.168.1.1', 'ip2' : '192.168.2.1', 'name' : 'A君'},

{'ip1' : '192.168.1.2', 'ip2' : '192.168.2.2', 'name' : 'B君'},

{'ip1' : '192.168.1.3', 'ip2' : '192.168.2.3', 'name' : 'C君'},

{'ip1' : '192.168.1.4', 'ip2' : '192.168.2.4', 'name' : 'D君'},

{'ip1' : '192.168.1.4', 'ip2' : '192.168.2.4', 'name' : 'E君'},

{'ip1' : '192.168.1.5', 'ip2' : '192.168.2.5', 'name' : 'F君'} ]

 

##########

def cancel_btn_event (ev):

"""

cancelボタン押下イベントプロシジャ

"""

global win

win.quit()

 

##########

def getValue(strTargetKey, strTargetString):

"""

文字列中のkeyからvalueを返す。

Parameters

----------

strTargetKey : string

探し出すkey

strTargetString : string

key=valueを含む検索対象文字列

 

Returns

-------

value : int

keyに対応するvalueを返す。

"""

# '=' で区切って key-value に分割する

strKey, strValue = strTargetString.split('=', 1) # 1回目を区切って、2個目以降は区切らない

strValue = strValue.strip()

return strValue.strip('\'\"')

 

##########

def find_line(strTargetKey, listData):

"""

configを読み込んだリストから特定 key を含む行番号を返す。

Parameters

----------

strTargetKey : string

探し出すkey

listData : list

configを読み込んだリスト

 

Returns

-------

行番号 : int

先頭の場合は1を返し、なければ0を返す。

"""

 

bFindFlag = False

# list の全ての内容から、strTargetKey を探す

for i in range(len(listData)):

# 1行取り出しては # より右の文字列を削除する

strLine = listData[i].split('#', 1)

# = がなければ key-value ではない

if not '=' in strLine[0]:

continue

strLine = listData[i].split('#')

strKey, strValue = strLine[0].split('=', 1) # 1回目を区切って、2個目以降は区切らない

 

# Targetのkeyと同じkeyをconfigからみつけたら、その行番号を返す。先頭行なら「1」を返す

if strTargetKey.strip() == strKey.strip():

return i + 1

 

# key が見つからない場合は 0 を返す

if not bFindFlag:

return 0

 

##### main #####

if __name__ == '__main__':

### configを読み込む

with open(config_file, "r") as f:

config_lines = f.readlines()

 

### Tkinter を使ってWindowを用意する

win = Tk()

win.title(u"Config Changer")

win.geometry("400x300")

 

### 送信先ラジオボタンを表示する

lbl1 = ttk.Label(win, text='送信先: ')

lbl1.place(x=15, y=10)

 

ip_grp = StringVar()

ip_Radiobutton = []

 

# config内に'ip'の行があれば、その内容を取得する

intConfigIp = find_line('ip', config_lines)

if intConfigIp != 0:

strIpValue = getValue('ip', config_lines[intConfigIp-1])

else:

strIpValue = ''

 

# 送信先ラジオボタンを設定する

y_axis = 30

for i in range(len(ip_lists)):

Radio = ttk.Radiobutton(win, text=ip_lists[i]['name']+' ('+ip_lists[i]['ip1']+')', variable=ip_grp, value=(str(i)))

ip_Radiobutton.append(Radio)

ip_Radiobutton[i].place(x=40, y=y_axis)

y_axis = y_axis + 20

 

# config内に表示と同じ'ip'があれば、そのボタンをチェックする

if strIpValue == ip_lists[i]['ip1']:

ip_grp.set(str(i))

 

### ファイルタイプラジオボタンを表示する

lbl2 = ttk.Label(win, text='ファイルタイプ: ')

lbl2.place(x=15, y=160)

 

type_grp = StringVar()

#type_grp.set('csv')

type_csv = ttk.Radiobutton(win, text='csv', variable=type_grp, value='csv')

type_xml = ttk.Radiobutton(win, text='xml', variable=type_grp, value='xml')

type_csv.place(x=40, y=180)

type_xml.place(x=40, y=200)

 

lbl3 = ttk.Label(win, text='送信モード: ')

lbl3.place(x=200, y=160)

 

mode_grp = StringVar()

mode_grp.set('normal')

mode_csv = ttk.Radiobutton(win, text='Normal', variable=mode_grp, value='normal')

mode_xml = ttk.Radiobutton(win, text='Hi speed', variable=mode_grp, value='speed')

mode_csv.place(x=240, y=180)

mode_xml.place(x=240, y=200)

 

ok_btn = ttk.Button(text='保存')

cancel_btn = ttk.Button(text='キャンセル')

ok_btn.place(x=200, y=250)

cancel_btn.place(x=300, y=250)

ok_btn.bind( '<Button-1>', cancel_btn_event )

cancel_btn.bind( '<Button-1>', cancel_btn_event )

 

find_line('ip', config_lines)

 

win.mainloop()

/////////////////////////////
// 日付のフォーマッティング
// formatDate(Date [, type])
/////////////////////////////
function formatDate() {
    if (arguments.length == 0) return "";

    var targetDate = new Date();
    targetDate.setTime( arguments[0].getTime() );

    var yy = targetDate.getYear();
    var mm = targetDate.getMonth() + 1;
    var dd = targetDate.getDate();
    if (yy < 2000) { yy += 1900; }
    if (mm < 10) { mm = "0" + mm; }
    if (dd < 10) { dd = "0" + dd; }

    var charSeparator1 = "";
    var charSeparator2 = "";
    var charSeparator3 = "";
    if (arguments.length > 1) {
        switch (arguments[1]) {
            case 1:
                charSeparator1 = "/";
                charSeparator2 = "/";
                break;

            case 2:
                charSeparator1 = "-";
                charSeparator2 = "-";
                break;

            case 3:
                charSeparator1 = "年";
                charSeparator2 = "月";
                charSeparator3 = "日";
                break;

            default:
                charSeparator1 = "";
                charSeparator2 = "";
        }
    }

    return (yy + charSeparator1 + mm + charSeparator2 + dd + charSeparator3);

}

/////////////////////////////
// 本日日付取得
/////////////////////////////
function getToday(type) {
    var todayDate = new Date();
    return (formatDate(todayDate, type));
}


//////////////////////////////////
// 休日リスト(画面)をファイル保存
//////////////////////////////////
function saveHolidays() {

    var objOutputResult    = objFSO.OpenTextFile(pathName + holidayListName, 2, true, -2);
    objOutputResult.WriteLine(document.form1.holidayList.value);
    objOutputResult.close();

}

</script>
</head>
  <hta:application
     id="HTA"
     icon=""
     applicationname=""
     border="thick"
     borderstyle="normal"
     caption="yes"
     innerborder="yes"
     maximizebutton="yes"
     minimizebutton="yes"
     showintaskbar="yes"
     singleinstance="no"
     sysmenu="yes"
     version=""
     windowstate="nomal"
     scroll="yes"
     scrollflat="yes"
     selection="yes"
     contextmenu="yes"
     navigable="yes" />
<body>
<p>
日報の当日分を作成する。
</p>
<form name="form1">
    <p>日付
    <input type="text" name="date" class="datepicker" id= "datepicker1" style="width:8em;" />&nbsp;
    </p>
    <p>
    <input type="button" value=" 実行 " onClick="ScriptMain()" /> (処理にちょっと時間がかかります)<br />
    Excelに「読み取り専用で開きますか?」と聞かれたら、「いいえ(<u>N</u>)」を選択してください。<br />
    </p>
    <p>
        休日一覧<br />
        <textarea name="holidayList" cols="20" rows="15"></textarea><br />
        <input type="button" value=" 保存 " onClick="saveHolidays()" /> (休日一覧を変更したとき用)
    </p>
</form>
</body>
</html>

 

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>オペレーション日報作成</title>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery-ui-i18n.min.js"></script>
<style type="text/css">body, input, textarea {font-family: "MS Pゴシック",sans-serif;}</style>
<script type="text/javascript">
/////////////////////////////
// Window OnLoad イベントプロシジャ
/////////////////////////////
$(function() {
    $.datepicker.setDefaults($.datepicker.regional['ja']);
        $(".datepicker").datepicker({
        dateFormat: 'yy/mm/dd',
        autoSize: true
    });

    // 日付欄に初期値として本日日付を表示
    document.form1.date.value = getToday(1);

    // 休日ファイルを読込んで、表示する
    if(objFSO.FileExists(pathName + holidayListName)) {
        var objInputFile = objFSO.OpenTextFile(pathName + holidayListName, 1, false, -2);
        var listItems = "";
        while (!objInputFile.AtEndOfStream) {
            var LineVal = objInputFile.ReadLine();
            listItems += LineVal + "\n";
        }
        objInputFile.close();
        document.form1.holidayList.value = listItems;
    }

    window.resizeTo(640,500);

});
</script>

<script language="JScript">
//====================================
//====================================
var pathName        =    "C:\\Users\\マスタ\\";
//var pathName        =    "\\\\日報\\マスタ\\";
var orgFileName        =    "___マスタ.xls";        // 雛形のファイル名
var fileName        =    "日報_%%TODAY%%.xls";        // 結果用ファイル名
var holidayListName    =    "__HolidayList.txt";                    // 休日ファイル名

var constWeekdays    = ["日", "月", "火", "水", "木", "金", "土"];

var constNumOfWeeks    = [1, 8, 15, 22, 29];                                    // 第x週の初めの「日」
var constMonthDays    = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];        // 月別の満日数 (後述のisIntercalaryMonth()と一緒に用いると、閏月まで対応できる)

var idTimer;

var    arrHolidays    = new Array();                                    // 休日ファイルの内容をDate型にして収めたArray
var objShell    = new ActiveXObject("WScript.Shell");
var objFSO        = new ActiveXObject("Scripting.FileSystemObject");

//Excel のアプリケーションオブジェクトを生成
var objXL        = new ActiveXObject("Excel.Application");

function ScriptMain() {

    // 日付の設定
    var todayDate    = new Date(document.form1.date.value);    // 当日日付
    var targetDate    = new Date();

    var yesterdayDate = new Date();
    yesterdayDate.setTime( todayDate.getTime() - 86400000);

    var today        = formatDate(todayDate);
    var yesterday    = formatDate(yesterdayDate);

    // 当日分ファイルのファイル名を作成する。
    var resultOrgName    = pathName + orgFileName;
    var resultFileName    = pathName + fileName;
    resultFileName    = resultFileName.replace("%%TODAY%%",    today);
    resultFileName    = resultFileName.replace("%%YESTERDAY%%",yesterday);

    // 休日ファイルの読込み処理をCall
    getHolidayList( arrHolidays );

    // マスターファイルを、当日分のファイルとしてコピーする
    objFSO.CopyFile(resultOrgName, resultFileName);

    ExecuteExcel(resultFileName, todayDate);

}

function ExecuteExcel(resultFileName, todayDate) {

    var targetDate            = new Date();

    idTimer = window.setTimeout(function () {

    objXL.Visible    = true;
    objXL.WorkBooks.Open(resultFileName);

    // 当日日付
    objXL.Cells.Range("AB5").Value    =  todayDate.getFullYear();
    objXL.Cells.Range("AE5").Value    =  todayDate.getMonth() + 1;
    objXL.Cells.Range("AH5").Value    =  todayDate.getDate();
    objXL.Cells.Range("AL5").Value    =  constWeekdays[todayDate.getDay()];

    targetDate    = getNextWeekDay( todayDate, 1, true, arrHolidays, true );
    objXL.Cells.Range("AI48").Value    =  "'" + formatDate( targetDate, 1 );

    // フルバックアップ終了確認 (毎月曜日)
    objXL.Cells.Range("AI50").Value    =  "'" + formatDate( targetDate, 1 );

    // 当日の曜日が指定曜日とは異なる場合、未実施を塗りつぶす
    if ( !getNextWeekDay( todayDate, 1, true, arrHolidays, false )) {
        // 送付 (毎月曜日)
        objXL.Cells.Range("W48").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W48").Interior.Pattern        = 1;
        objXL.Cells.Range("Z48").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z48").Interior.Pattern        = 1;

        // バックアップ終了確認 (毎月曜日)
        objXL.Cells.Range("W50").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W50").Interior.Pattern        = 1;
        objXL.Cells.Range("Z50").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z50").Interior.Pattern        = 1;
    }

    // 在庫データ送信 (月初実施)
    targetDate    = getNextMonthFirstDay( todayDate, true, true, true );
    objXL.Cells.Range("AI54").Value    =  "'" + formatDate(targetDate, 1);
    // 当日の日付が指定日付とは異なる場合、未実施を塗りつぶす
    if ( !getNextMonthFirstDay( todayDate, false, true, false )) {
        // JDS在庫データ送信
        objXL.Cells.Range("W54").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W54").Interior.Pattern        = 1;
        objXL.Cells.Range("Z54").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z54").Interior.Pattern        = 1;
    }

    // 月次締め処理 (月末実施)
    if (getNextMonthLastDay( todayDate,  false, false, false ) == false )    targetDate    = getNextMonthLastDay( todayDate, false, false, true );    // 未経過
    else                                                                    targetDate    = getNextMonthLastDay( todayDate,  true, false, true );    // 当日または既に経過
    objXL.Cells.Range("AI56").Value    =  "'" + formatDate(targetDate, 1);

    // 当日の日付が指定日付とは異なる場合、未実施を塗りつぶす
    if ( !getNextMonthLastDay( todayDate, false, true, false )) {
        // 在庫データ送信
        objXL.Cells.Range("W56").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W56").Interior.Pattern        = 1;
        objXL.Cells.Range("Z56").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z56").Interior.Pattern        = 1;
    }

    // サーバー再起動(第一水曜日)
    // 次回実施日の算出
    if (getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, false ) == -1 ) targetDate  = getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, true );    // 未経過
    else                                                                             targetDate  = getHizukeInMonth( todayDate, 0, 3, true, true, arrHolidays, true );    // 当日または既に経過
    objXL.Cells.Range("AI58").Value    =  "'" + formatDate( targetDate, 1 );

    // 当日じゃなかったら、未実施を塗りつぶす
    if (getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, false ) != 0 ) {            // 当日以外
        objXL.Cells.Range("W58").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W58").Interior.Pattern        = 1;
        objXL.Cells.Range("Z58").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z58").Interior.Pattern        = 1;
    }

    // Eサーバー再起動(第三水曜日)
    if (getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, false ) == -1 ) targetDate  = getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, true );    // 未経過
    else                                                                             targetDate  = getHizukeInMonth( todayDate, 2, 3, true, true, arrHolidays, true );    // 当日または既に経過
    objXL.Cells.Range("AI60").Value    =  "'" + formatDate( targetDate, 1 );

    // 当日じゃなかったら、未実施を塗りつぶす
    if (getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, false ) != 0 ) {            // 当日以外
        objXL.Cells.Range("W60").Interior.ColorIndex    = 0;
        objXL.Cells.Range("W60").Interior.Pattern        = 1;
        objXL.Cells.Range("Z60").Interior.ColorIndex    = 1;
        objXL.Cells.Range("Z60").Interior.Pattern        = 1;
    }

    // 処理終了メッセージを表示
    alert("処理が終了しました。\n\n作成したファイル:\n" + resultFileName + "\n\nExcelを保存・終了して、ファイルを\n親ディレクトリへ移動してください。\n\n");

        window.clearTimeout(idTimer);

                    }, 2000);
}

//=================================================================================================
//次曜日日付を取得
//
//getNextWeekDay(    todayDate,            // 調査開始日 (Date型)
//                    targetWeekDay,        // 曜日 (0:日曜日~6:土曜日)
//                    directionFlg,        // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
//                    arrHolidays,        // 休日一覧(Date型Array)。事前にgetHolidayList()をコールして初期化しておく。
//                    opeMode    )            // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
//                                        // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextWeekDay( todayDate, targetWeekDay, directionFlg, arrHolidays, opeMode ) {

    // 作業用日付を調査開始日で初期化する
    var targetDate    = new Date();
    targetDate.setTime(todayDate.getTime());

    // 調査開始日の曜日を保存しておく
    var    todayDay    = todayDate.getDay();

    // 引数で指定された曜日の日付を、一日づつ移動しながら調べる。
    for (i=0; i<7; i++) {
        targetDate.setTime(targetDate.getTime() + 86400000);
        if (targetDate.getDay() == targetWeekDay) break;
    };

    // 休日処理(一ヵ月分ループする)
    // 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
    var    iDirection = 86400000;                            // 翌日
    if(directionFlg == false) iDirection = -86400000;    // 前日
    for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
        // 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
        if ( !(isHoliday( targetDate, arrHolidays)) ) break;
        // 休日だった場合、1日のミリ秒分移動する。
        targetDate.setTime(targetDate.getTime() + iDirection);
    }

    // 操作モードがtrueの場合、算出した日付を返す。
    if (opeMode) return targetDate;
    else {
        // 当日の曜日が指定曜日だった場合はtrue, 異なる場合はfalseを返す
        if (targetWeekDay == todayDay) return  true;
        return false;
    }
}

//=================================================================================================
//翌月初検索処理
//
//getNextMonthFirstDay(    todayDate,            // 調査開始日 (Date型)
//                        nextMonthFlg.        // 翌月フラグ (true: 翌月の指定曜日。false: 当月の指定曜日)
//                        directionFlg,        // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
//                        opeMode    )            // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
//                                            // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextMonthFirstDay( todayDate, nextMonthFlg, directionFlg, opeMode ) {

    // 引数の日付から「年」と「月」を抽出し、その月の初めの「日」で初期化した、Date型変数をnewする。
    if (nextMonthFlg)    var    monthOffset    = 1;
    else                 var    monthOffset    = 0;
    var targetDate    = new Date(todayDate.getYear(), todayDate.getMonth()+monthOffset, 1);

    // 休日処理(一ヵ月分ループする)
    // 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
    var    iDirection = 86400000;                            // 翌日
    if(directionFlg == false) iDirection = -86400000;    // 前日
    for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
        // 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
        if ( !(isHoliday( targetDate, arrHolidays)) ) break;
        // 休日だった場合、1日のミリ秒分移動する。
        targetDate.setTime(targetDate.getTime() + iDirection);
    }

    // 操作モードがtrueの場合、算出した日付を返す。
    if (opeMode) return targetDate;
    else {
        // 当日の日付が指定曜日だった場合はtrue, 異なる場合はfalseを返す
        if (todayDate.getTime() == targetDate.getTime()) return  true;
        return false;
    }

}

//=================================================================================================
//翌月末検索処理
//
//getNextMonthLastDay(    todayDate,            // 調査開始日 (Date型)
//                        nextMonthFlg.        // 翌月フラグ (true: 翌月の指定日。false: 当月の指定日)
//                        directionFlg,        // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
//                        opeMode    )            // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
//                                            // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextMonthLastDay( todayDate, nextMonthFlg, directionFlg, opeMode ) {

    // 引数の日付から「年」と「月」を抽出し、その月の初めの「日」で初期化した、Date型変数をnewする。
    if (nextMonthFlg)    var    monthOffset    = 1;
    else                 var    monthOffset    = 0;
    var workDate = new Date(todayDate.getYear(), todayDate.getMonth()+monthOffset, 1);

    // その月の最終日を設定する
    var    monthLastDay    = constMonthDays[workDate.getMonth()] + isIntercalaryMonth( workDate );
    var targetDate    = new Date(workDate.getYear(), workDate.getMonth(), monthLastDay);

    // 休日処理(一ヵ月分ループする)
    // 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
    var    iDirection = 86400000;                            // 翌日
    if(directionFlg == false) iDirection = -86400000;    // 前日
    for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
        // 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
        if ( !(isHoliday( targetDate, arrHolidays)) ) break;
        // 休日だった場合、1日のミリ秒分移動する。
        targetDate.setTime(targetDate.getTime() + iDirection);
    }

    // 操作モードがtrueの場合、算出した日付を返す。
    if (opeMode) return targetDate;
    else {
        // 当日の日付が指定曜日だった場合はtrue, 異なる場合はfalseを返す
        if (todayDate.getTime() == targetDate.getTime()) return  true;
        return false;
    }

}

/////////////////////////////
// 次月末検索処理
// mode: true  = 次月
//       false = 本月
/////////////////////////////
function nextMonthLastDay(fromDate, mode) {
    var workDate   = new Date();
    var targetDate = new Date();
    workDate = fromDate;

//    if (mode == false) workDate.setDate(1);
//    if (mode == true)  workDate.setDate(28);
    workDate.setDate(1);
    workDate.setTime( workDate.getTime() + (86400000 * 50));
    workDate.setDate(1);

    for (var i=1; i<1800; i++) {
        targetDate.setTime( workDate.getTime() - (86400000 * i));
        if (decideHolidat( targetDate )) continue;
        break;
    }
    return targetDate;
}

//=================================================================================================
//月内の第x週の指定曜日日付を取得
//
//getHizukeInMonth(    todayDate,            // 調査開始日 (Date型)
//                    numWeek,            // 第x週の指定 (0スタート)
//                    targetWeekDay,        // 曜日 (0:日曜日~6:土曜日)
//                    directionFlg,        // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
//                    nextMonthFlg.        // 翌月フラグ (true: 翌月の指定曜日。false: 当月の指定曜日)
//                    arrHolidays,        // 休日一覧(Date型Array)。事前にgetHolidayList()をコールして初期化しておく。
//                    opeMode    )            // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
//                                        // (同じな場合は0, 経過済みなら1, 未経過なら-1を返す))
//
//=================================================================================================
function getHizukeInMonth( todayDate, numWeek, targetWeekDay, directionFlg, nextMonthFlg, arrHolidays, opeMode ) {

    // 引数の日付から「年」と「月」を抽出し、その月の第x週の初めの「日」で初期化した、Date型変数をnewする。
    var targetDate = new Date(todayDate.getYear(), todayDate.getMonth(), constNumOfWeeks[numWeek]);

    // 翌月フラグがtrueの場合、1ヵ月分時間を進ませる
    if (nextMonthFlg) targetDate.setTime(targetDate.getTime() + (constMonthDays[targetDate.getMonth()] * 86400000) + (isIntercalaryMonth( targetDate ) * 86400000));

    // 引数で指定された曜日の日付を、一日づつ移動しながら調べる。
    for (i=0; i<7; i++) {
        if (targetDate.getDay() == targetWeekDay) break;
        targetDate.setTime(targetDate.getTime() + 86400000);
    };

    // 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
    var    iDirection = 86400000;                            // 翌日
    if(directionFlg == false) iDirection = -86400000;    // 前日

    // 休日処理(一ヵ月分ループする)
    for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
        // 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
        if ( !(isHoliday( targetDate, arrHolidays)) ) break;
        // 休日だった場合、1日のミリ秒分移動する。
        targetDate.setTime(targetDate.getTime() + iDirection);
    }

    // 操作モードがtrueの場合、算出した日付を返す。
    if (opeMode) return targetDate;
    else {
        // 算出した日付と調査開始日が同じ場合は0, 経過済みなら1, 未経過なら-1を返す
        if (targetDate.getTime() == todayDate.getTime()) return  0;
        if (targetDate.getTime()  < todayDate.getTime()) return  1;
        return -1;
    }

}

//=================================================================================================
//休日ファイルの読込み処理
//
//getHolidayList(    arrHolidays )    // 休日ファイルの内容を保持する、Date型Array
//
//=================================================================================================
function getHolidayList( arrHolidays ) {
    var holidayListName    =    "\\\\Kin-storagesrv2\\info-sys\\Private\\SIS\\ksystem\\運用保守\\010_オペレーション日報\\オペレーション日報マスタ\\__HolidayList.txt";

    // 休日ファイルを読込み、Date型Arrayに保持する。
    if(objFSO.FileExists(holidayListName)) {
        // 休日ファイルをオープンする。
        var objInputFile = objFSO.OpenTextFile(holidayListName, 1, false, -2);

        // 休日ファイルがEOFになるまで、処理を繰返す。
        while (!objInputFile.AtEndOfStream) {
            // 休日ファイルから1レコード読込む
            var LineVal = objInputFile.ReadLine();

            // Date型Arrayに保持する。
            var holiday = new Date(LineVal);
            arrHolidays.push(holiday);
        }
    }
}

/////////////////////////////
// 休日チェック
// return: true  = 休日
//         false = 平日
/////////////////////////////
function decideHolidat( targetDate ) {

    if (targetDate.getDay() == 0 || targetDate.getDay() == 6) return true;
    for (var i=0; i<arrHolidays.length; i++) {
        if(arrHolidays[i].getTime() == targetDate.getTime()) return true;
    }
    return false;
}

function PausedSection() {
        alert("waite後");
        window.clearTimeout(idTimer);
}

//==================================================================
// 休日チェック
// isHoliday(    targetDate,                // 調査日付 (Date型)
//                    arrHolidays )        // 休日リスト (Date型Array)
//
// return: true  = 休日
//         false = 平日
//==================================================================
function isHoliday( targetDate, arrHolidays) {

    // 曜日が土日の場合、「休日」を返す。
    if (targetDate.getDay() == 0 || targetDate.getDay() == 6) return true;

    // 休日リストを検索し、同じ日付があれば「休日」を返す。
    for (var i=0; i<arrHolidays.length; i++) {
        if(arrHolidays[i].getTime() == targetDate.getTime()) return true;
    }

    // 平日を返す。
    return false;
}

//==================================================================
// 閏月チェック
//
// constMonthDaysで月別の満日数を定義しているが、このままでは閏月が
// 考慮されていないため、このfunctionを共有することで閏月に対応する。
//
// isIntercalaryMonth(    targetDate )        // 調査日付 (Date型)
//
// return: 1 = 閏月
//         0 = 普通の月
//==================================================================
function isIntercalaryMonth( targetDate ) {

    if ( (targetDate.getYear() % 4) == 0 && targetDate.getMonth() == 1)    return 1;
    else                                                                return 0;

}

 

落語協会の、2016年に真打昇進した3名のお披露目興行を見に行った。

新宿末廣亭 新宿末廣亭
新宿末廣亭



新真打となった中で、林家たけ平って人が今日のトリを勤める。九代目林家正蔵師匠の一番弟子だそうだ。

末廣亭は昼夜の入替えがないので、直ぐ近所にある伊勢丹の開店時間の10:30に到着するように家を出る。伊勢丹のデパ地下で弁当を2食分買って行列に並ぶ。寄席の中で飲食ができるし(飲酒は禁止)持込みも可なので、近所のスーパーで買ったペットボトルのお茶2本とこの弁当でしのぎならが、12時前の前座さんから21時過ぎの夜席のトリまで、木戸銭¥3,000-でたっぷり楽しめるのだ。

2年ぶりの真打昇進披露口上だったけど、何度観ても縁起物って感じで楽しいのだ。また来年も来たいなぁ。


寄席: 新宿末廣亭
住所: 東京都新宿区新宿3-6-12 地図