2014年10月2日木曜日

[Excel VBA] 正規表現パターンと一致する文字列を置換処理するワークシート関数






Public Function RegexReplace( _
        Source As String, _
        Pattern As String, _
        Replacement As String, _
        Optional Flags As String = "" _
    )

    With New VBScript_RegExp_55.RegExp
        If Flags = "" Then
            .Global = False
            .IgnoreCase = False
            .MultiLine = False
        Else
            .Global = Flags Like "*g*"
            .IgnoreCase = Flags Like "*i*"
            .MultiLine = Flags Like "*m*"
        End If
        .Pattern = Pattern
        RegexReplace = .Replace(Source, Replacement)
    End With

End Function





[Excel VBA] 正規表現パターンと一致する文字列(or 部分文字列)を取得、またはカウントするワークシート関数




※参照設定が必要
Microsoft VBScript Regular Expressions 5.5


Public Function Regex( _
        Source As String, _
        Pattern As String, _
        Optional Flags As String = "", _
        Optional MatchIndex As Long = 0, _
        Optional SubMatchIndex As Long = 0 _
    )

    Dim RetVal
    Dim Matches As VBScript_RegExp_55.MatchCollection
    Dim SubMatches As VBScript_RegExp_55.SubMatches

    If MatchIndex = 0 Then
        If SubMatchIndex = 0 Then
            With New VBScript_RegExp_55.RegExp
                If Flags = "" Then
                    .IgnoreCase = False
                    .MultiLine = False
                Else
                    .IgnoreCase = Flags Like "*i*"
                    .MultiLine = Flags Like "*m*"
                End If
                .Global = True
                .Pattern = Pattern
                RetVal = .Execute(Source).Count
            End With
        Else
            RetVal = CVErr(XlCVError.xlErrValue)
        End If

    ElseIf MatchIndex > 0 Then
        If SubMatchIndex = 0 Then

            With New VBScript_RegExp_55.RegExp
                If Flags = "" Then
                    .IgnoreCase = False
                    .MultiLine = False
                Else
                    .IgnoreCase = Flags Like "*i*"
                    .MultiLine = Flags Like "*m*"
                End If
                .Global = MatchIndex > 1
                .Pattern = Pattern
                Set Matches = .Execute(Source)
                If MatchIndex <= Matches.Count Then
                    RetVal = Matches(MatchIndex - 1).Value
                Else
                    RetVal = ""
                End If
            End With

        ElseIf SubMatchIndex > 0 Then

            With New VBScript_RegExp_55.RegExp
                If Flags = "" Then
                    .IgnoreCase = False
                    .MultiLine = False
                Else
                    .IgnoreCase = Flags Like "*i*"
                    .MultiLine = Flags Like "*m*"
                End If
                .Global = MatchIndex > 1
                .Pattern = Pattern
                Set Matches = .Execute(Source)
                If MatchIndex <= Matches.Count Then
                    Set SubMatches = Matches(MatchIndex - 1).SubMatches
                    If SubMatchIndex <= SubMatches.Count Then
                        RetVal = CStr(SubMatches(SubMatchIndex - 1))
                    Else
                        RetVal = ""
                    End If
                Else
                    RetVal = ""
                End If
            End With

        Else
            RetVal = CVErr(XlCVError.xlErrValue)
        End If
    Else
        RetVal = CVErr(XlCVError.xlErrValue)
    End If

    Regex = RetVal

End Function
















2014年8月17日日曜日

JavaScriptでクラス風の書き方

JavaScriptにて、Javaでいうところのクラスを書きたいときの方法。

1. publicで非staticなメソッドの実装

これには次の2通りの実装方法がある。

1. prototypeプロパティにfunctionを追加する
2. thisにfunctionを追加する

基本は 1 の実装方法をとるが、場合によっては 2 の方法をとる。

2. publicでstaticなメソッドの実装




3. privateで非staticなメソッドの実装



4. privateでstaticなメソッドの実装




基本形


var classFunc = (function(){

    var fn = function(){

        // パブリック・フィールド
        this.public_field1 = 0;

        // パブリック・メソッド1
        this.public_method1 = function(){

        }
    }

    // パブリック・メソッド2
    fn.prototype.public_method2 = function(){
        
    }

    // 静的パブリック・メソッド
    fn.public_static_method = function(){
       
    }

    // 静的パブリック・フィールド
    fn.public_static_field = 1;

    // プライベート・メソッド(呼び出し方により静的か否かが変わる)
    var private_method = function(){
        
    }

    // プライベート・フィールド
    var private_field = 10;

    return fn;

})();

2013年3月15日金曜日

YYYYMMDD形式の現在日付とHHMISS形式の現在時間を取得する

ログファイルや一時ファイルなどのファイル名を作成する時に使用する YYYYMMDD 形式の現在日付を取得するコードです。


現在日時の取得 その1 ちょっと複雑なコード

変数 DELIM には、年月日の区切り文字を指定します。
YYYYMMDD 形式で取得する場合は、何も指定しません。
YYYY-MM-DD 形式で取得する場合は、- (ハイフン)を指定します。
YYYY.MM.DD 形式で取得する場合は、. (ピリオド)を指定します。

@echo off

rem YYYYMMDD形式の現在日付を取得する
set DELIM=
set YYYYMMDD=%date:~0,4%%DELIM%%date:~5,2%%DELIM%%date:~8,2%
echo %YYYYMMDD%

rem YYYY-MM-DD形式の現在日付を取得する
set DELIM=-
set YYYYMMDD=%date:~0,4%%DELIM%%date:~5,2%%DELIM%%date:~8,2%
echo %YYYYMMDD%

rem YYYY.MM.DD形式の現在日付を取得する
set DELIM=.
set YYYYMMDD=%date:~0,4%%DELIM%%date:~5,2%%DELIM%%date:~8,2%
echo %YYYYMMDD%

pause


現在日時の取得 その2 より簡単なコード

上記の方法より簡単です。

@echo off

rem YYYYMMDD形式の現在日付を取得する
set YYYYMMDD=%date:/=%
echo %YYYYMMDD%

rem YYYY-MM-DD形式の現在日付を取得する
set YYYYMMDD=%date:/=-%
echo %YYYYMMDD%

rem YYYY.MM.DD形式の現在日付を取得する
set YYYYMMDD=%date:/=.%
echo %YYYYMMDD%

pause


現在時間の取得

上記の現在日時を取得するコードと同じやり方で現在時間を取得します。
注意しなければならない点を次に挙げます。

1.時間が1桁の場合、先頭はゼロ埋めではなく、空白埋めであること。
例えば、午前9時の場合は「09ではな 9となること。
2.現在時間を取得する環境変数を利用する為、取得した時間には十ミリ秒単位までの時間が含まれている。ミリ秒以下が不要であれば、ミリ秒以下をトリムする必要があること。

@echo off

rem HHMISS形式(時,分,秒)の現在日時を取得する
set HHMISS=%time:~0,8%
set HHMISS=%HHMISS::=%
set HHMISS=%HHMISS: =0%
echo %HHMISS%

rem HHMISSFF形式(時,分,秒,ミリ秒)の現在日時を取得する
set HHMISS=%time::=%
set HHMISS=%HHMISS:.=%
set HHMISS=%HHMISS: =0%
echo %HHMISS%

pause

2013年3月7日木曜日

aaaaaaaa

TEST 2

TEST3




import java.sql.Conection;

public class ConnectionProxy implements Connection {

    protected Connection delegate;

    public ConnectionProxy(Connection delegate) {
        this.delegate = delegate;
    }

}