2009/02/28

VBScriptで日付処理 そにょ3・・・


日付の処理だけ、某Format関数を模してみた。・・・あくまで暫定版。
限られた指定方法で、要素を並べ替えられる程度しか機能しないが、
新たに曜日を要素として取得可能になっている。

書式)
   iDTw({tDate}, {tNow}, {sFormat}, {dSplitter}, {tSplitter}, {dtSeparator}, Control)    

{tDate} 日付情報(時間を含まない) Date()ないし等価
{tNow} 時間情報 Now()ないし等価
{sFormat} OutPutFormat (Default - "Y/M/D H:N:S")
{dSplitter} DateSplitString (Normal - "/")
{tSplitter} TimeSplitString (Normal - ":")
{dtSeparater} Date/Time SepaleteString (Default - " ")
Control 0 文字列 / 1 配列化 (Default - 0)


{sFormat}に対し、半角英大文字の、"YMD" で 日付部分を
"W"で曜日を "HN" で 時分を "S" で秒を、それぞれ任意の位置に配置できます。

★オマケ
   "S HNS YMD [W] HN"    
のようなデタラメな呼び出しも可能^_^;


曜日取得処理 GetWeekDay
装飾も含めて好きなように曜日文字列を取得したいが為だけに作成したモノ。
単なる曜日取得と異なり、逆引き検索や対応データへの変換など、
パラメータの適用次第で応用の幅を広げられるようになっている。
また、iDTw を使う場合、変数 strWeekday をPublicで宣言し、
この関数(の結果)を事前に代入しておくコトが必須となる。
なんだか、海外のライブラリ使ってるみたいで使いデ悪くて、お蔵入りさせてたブツではあるがw

書式)
   GetWeekday(YMD, wFormat, WeekdaysString, nDepth)

   YMD - 日付を指定 (Date関数と等価値)
   wFormat - 戻り値に対する装飾を指定 例) " [ W ] "
   WeekdaysString - 曜日のリストを入力 ・・・リストの構成はサンプル参照のことw
   nDepth - リスト中の次元の深さを指定 (0~)


lArray や inArrays は、これらの為に用意したモノとも云える・・・

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'GetWeekDay & iDTw & lArray & inArrays
'- Created by LazwardFox -

' スクリプトライブラリの一部

' Release 20090228 1639

'***** ↓↓↓ Decralations ↓↓↓ ******************************************************
Const strWeekdays = "1:月:MON:Mon:Monday,2:火:TUE:Tue:Tuesday,3:水:WED:Wed:Wednesday,4:木:THU:Thu:Thursday,5:金:FRI:Fri:Friday,6:土:SAT:Sat:Saturday,7:日:SUN:Sun:Sunday"
Const vbWq = """"
Public strWeekday

Dim varNow, VarDate, sDa, sDb, sDc, sDd, sDe, testResult


'***** ↓↓↓Main(Test)Routine↓↓↓ ***************************************************
varNow = Now()
varDate = Date()

'Function GetWeekday(YMD,wFormat,WeekdaysString,nDepth)
strWeekday = GetWeekday(varDate,,strWeekdays,3)

sDa = iDTw(varDate,varNow,"YMD [W] HN","/",":",,0) '文字列テスト
sDb = iDTw(varDate,varNow,"YMD",,,,0) '文字列テスト
sDc = iDTw(,,"YMD*[W]*HNS",,,"*",1) '配列テスト
sDd = iDTw(,,"YMDWHNS","",""," ",0) 'スプリッタ無しテスト
sDe = iDTw(,,"YMD [ W ] HNS","",""," ",0) 'スプリッタ無しテスト

testResult = "iDTw(" & "varDate,varNow," & vbWq & "YMD [W] HN" & vbWq & "," & vbWq & "/" & vbWq & "," & vbWq & ":" & vbWq & ",,0) - <String YMD[W]HN> - >>> " & sDa & vbTab & vbCrLf _
& "iDTw(" & "varDate,varNow," & vbWq & "YMD" & vbWq & ",,,,0) - <String YMD Only> - >>> " & sDb & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMD*[W]*HNS" & vbWq & ",,," & vbWq & "*" & vbWq & ",1) - <Array iDTw(1)> - >>> " & sDc(1) & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMDWHNS" & vbWq & "," & vbWq & vbWq & "," & vbWq & vbWq & "," & vbWq & " " & vbWq & ",0) - <String NoSplitter> - >>> " & sDd & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMD [ W ] HNS" & vbWq & "," & vbWq & vbWq & "," & vbWq & vbWq & "," & vbWq & " " & vbWq & ",0) - <String Full> - >>>" & sDe & vbTab

msgbox testResult,,"Test"

'***** ↓↓↓Functions↓↓↓ ***********************************************************
'------------------------------------
'GetWeekDay - 曜日文字列配列化及び取得
'- Created by LazwardFox -

' Update 20090228 1403 inArraysの新版向けに変更
' Update 20090228 0855 配列化関数をinArraysに差し替え
' Update 20090223 1544
' Release 20090223
' Develop 20090223 1018

' GetWeekday(
' YMD - 日付を指定 (Date関数と等価値)
' ,wFormat - 戻り値に対する装飾を指定 例) " [ W ] "
' ,WeekdaysString - 曜日のリストを入力
' ,nDepth - リスト中の次元の深さを指定 (0~)
' )

Function GetWeekday(YMD,wFormat,WeekdaysString,nDepth)
Dim arsWeekdays,arWeekdays
If TypeName(WeekdaysString) = "Error" Then
ElseIf VarType(arWeekdays) = vbArray Then
Else
inArrays WeekdaysString,",:",arWeekdays
End If
If TypeName(wFormat) = "Error" Then
GetWeekday = arWeekdays(Weekday(YMD,2) - 1)(nDepth)
Else
GetWeekday = Replace(wFormat,"W",arWeekdays(Weekday(YMD,2) - 1)(nDepth))
End If
End Function

'------------------------------------
'iDTw - 日時(曜日)文字列 ないし 日/曜日/時 配列取得 for VBScript
'- Created by LazwardFox -

' Update 20090228 1403 inArraysの新版向けに変更
' Release 20090223 1413 iDTから改良

' Control以外のパラメータを省略可

' iDTw (
' {tDate}日付情報(時間を含まない)Date()ないし等価
' ,{tNow}時間情報Now()ないし等価
' ,{sFormat}OutPutFormat(Default - "YMD HNS")
' ,{dSplitter}DateSplitString (Normal - "/")
' ,{tSplitter}TimeSplitString (Normal - ":")
' ,{dtSeparater}Date/Time SepaleteString (Default - " ")
' ,Control0 文字列 / 1 配列化 (Default - 0)
' )

'記述例) iDTw(,,,,,0)- 現在の年月日/時分秒を配列で取得
'iDTw(,,"YMD*W*HNS",,"*",0)- 現在の年月日/曜日/時分秒を配列で取得

'曜日を取得する場合、事前に 変数strWeekdayをPublicで宣言し、
'GetWeekDay を実行、代入しておく必要があります。

Function iDTw(tDate,tNow,sFormat,dSplitter,tSplitter,dtSeparator,Control)
Dim nS, strHNS, arHNS, iHNS, valHNS'Update 20090223 0135

If TypeName(tDate) = "Error" Then
tDate = Date()
End If
If TypeName(tNow) = "Error" Then
tNow = Now()
End If
If TypeName(dSplitter) = "Error" Then
dSplitter = "/"
End If
If TypeName(tSplitter) = "Error" Then
tSplitter = ":"
End If
If TypeName(Control) = "Error" Then
Control = 0
End If
If TypeName(dtSeparator) = "Error" Then
If Control = 1 Then
dtSeparator = "*"
Else
dtSeparator = " "
End If
End If

strS = Split(CStr(FormatDateTime(tNow,3)),":")(2) 'Update 20090223 0951
strHN = FormatDateTime(tNow,4) 'Update 20090223 1428
strHNS = FormatDateTime(tNow,4) & tSplitter & strS 'Update 20090223 0951

If TypeName(sFormat) = "Error" Then
sFormat = "YMD" & dtSeparator & "HNS"
End If

If dSplitter = "/" Then
Else
tDate = Replace(tDate,"/",dSplitter)
End If
If tSplitter = ":" Then
Else
strHNS = Replace(strHNS,":",tSplitter)
End If

sFormat = Replace(sFormat,"YMD",tDate)
sFormat = Replace(sFormat,"HNS",strHNS)
sFormat = Replace(sFormat,"HN",strHN)
sFormat = Replace(sFormat,"S",strS)

If TypeName(sFormat) = "Error" Then
Else
wExist = Instr(1,sFormat,"W",1)
If wExist = 0 Then
Else
sFormat = Replace(sFormat,"W",strWeekday)
End If
End If
If Control = 0 Then
iDTw = sFormat
Else
iDTw = Split(sFormat,dtSeparator)
End If
End Function


'------------------------------------
'lArray - 文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function


更に自由度の高い書式指定機能付スクリプトを作成するので、この分も要らなくなったりするww

似たようなものばかりでアレなんだケド、色んなデータへのアプローチの仕方があるというコトで、
なにかしら参考になっていればいいなぁ・・・(´ヘ`;)
<そのまま使える スクリプト 年月日 曜日 時分秒 文字列 配列変数 取得 Format Text FormatDateTime>

VBScriptで多次元配列 そにょ2・・・


外部関数追加で、スプリット文字列に区切り文字 ~(チルダ)を不要にしてみた。
あと、バラバラに列挙してたスクリプトを、ファイルのままに張ってみたw
ただ、Tabが全部ツブれてしまうんだよね・・・


以下を、空のテキストファイルにコピペして、任意の名前に、拡張子.vbsをつければ動作します。

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'lArray & inArrays
'- Created by LazwardFox -

' スクリプトライブラリの一部

' Release 20090228 1330

'***** ↓↓↓ Decralations ↓↓↓ ******************************************************
Const strWeekdays = "1:月:MON:Mon:Monday,2:火:TUE:Tue:Tuesday,3:水:WED:Wed:Wednesday,4:木:THU:Thu:Thursday,5:金:FRI:Fri:Friday,6:土:SAT:Sat:Saturday,7:日:SUN:Sun:Sunday"
Dim arWeekday, sD

'***** ↓↓↓Main(Test)Routine↓↓↓ ***************************************************
arWeekday = Split(strWeekdays,",")
inArrays arWeekday, ":", sD
msgbox sD(2)(3),,"Test"

inArrays strWeekdays, ",:", sD
msgbox sD(2)(3),,"Test"

'***** ↓↓↓Functions↓↓↓ ***********************************************************
'------------------------------------
'lArray - 文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

'inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function


lArrayでは、文字列を文字にバラす際、ADODBオブジェクトに文字列を書き込み、
それを先頭から1文字ずつ読み出して、変数へ配列を追加しつつ、値を代入している。

書式)
   lArray (strLetters, rArray)

strLetters - 分解したい文字列
rArray - 戻り値が代入されます。任意の変数名を指定


書式)
   inArrays(tSources, strLimitters, arReturn)

tSourcess - 区切り文字を含む文字列 ないし、それらで構成された配列変数を指定
strLimitters - 区切り文字を、次元の浅さ順に並べた文字列を記述
arReturn - 戻り値(配列)が代入されます。任意の変数名を指定
しっかし、VBScriptでドコまでやるつもりなのか・・・ 書いた本人がクビ傾げてるワ・・・(´ヘ`;)

VBScriptで多次元配列 そにょ1・・・


日付処理の続きを記述する前に、必須スクリプトなど1つ・・・


    '-----------------------------------     
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多次元配列を作成し返す。

' LastUpdate 20090228 0833

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
arLimitters = Split(strLimitters,"~")
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function


書式)
   inArrays(tSources, strLimitters, arReturn)

tSourcess - 区切り文字を含む文字列 ないし、それらで構成された配列変数を指定
strLimitters - 区切り文字を、~(チルダ) で 区切って順番に並べた文字列を記述
arReturn - 戻り値(配列)が代入されます。任意の変数名を指定


説明面倒っちぃので、実例など・・・
  Const strWeekdays = "1:月:MON:Mon:Monday,2:火:TUE:Tue:Tuesday,3:水:WED:Wed:Wednesday,4:木:THU:Thu:Thursday,5:金:FRI:Fri:Friday,6:土:SAT:Sat:Saturday,7:日:SUN:Sun:Sunday"    
Dim arWeekday, sD

'配列を代入
arWeekday = Split(strWeekdays,",")
inArrays arWeekday, ":", sD
msgbox sD(2)(3),,"Test"

'文字列を代入
inArrays strWeekdays, ",~:", sD
msgbox sD(2)(3),,"Test"


上記2つは等価処理なので、結果は同じとなります。▼▼▼ p.s. そにょ2で修正された版です。▼▼▼▼▼▼▼▼▼▼▼▼▼

★上記実行サンプルとの差異
  '文字列を代入
inArrays strWeekdays, ",~:", sD

inArrays strWeekdays, ",:", sD


書式)
   inArrays(tSources, strLimitters, arReturn)

tSourcess - 区切り文字を含む文字列 ないし、それらで構成された配列変数を指定
strLimitters - 区切り文字を、次元の浅さ順に並べた文字列を記述
arReturn - 戻り値(配列)が代入されます。任意の変数名を指定


        '------------------------------------     
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重化された配列、多次元配列を作成し返す。

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 外部関数 lArray 追加、配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

' inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function

'------------------------------------
'文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function

VBScriptで日付処理 そにょ2・・・


更に手抜きで使えるように・・・
って、曜日表示機能付きの別スクリプトを縮小したもの。

    '------------------------------------     
'iDT - 日時文字列 ないし 日/時配列取得 for VBScript
'- Created by LazwardFox -

'LastUpdate 20090228 0514

Public Function iDT(dSplitter,dtSeparater,tSplitter,Control)
Dim nX, nD, nS, strHMS, sResult
If TypeName(dSplitter) = "Error" Then
dSplitter = "/"
End If
If TypeName(dtSeparator) = "Empty" Then
dtSeparater = " "
End If
If TypeName(tSplitter) = "Error" Then
tSplitter = ":"
End If
If TypeName(Control) = "Error" Then
Control = 0
End If
nX = Now()
nD = FormatDateTime(Date(),0)
nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2)
strHMS = FormatDateTime(nX,4) & nS
If tSplitter = ":" Then
Else
strHMS = Replace(strHMS,":",tSplitter)
End If
If dSplitter = "/" Then
Else
nD = Replace(nD,"/",dSplitter)
End If
sResult = nD & "*" & strHMS
If Control = 0 Then
iDT = Replace(sResult,"*",dtSeparater)
Else
iDT = Split(sResult,"*")
End If
End Function


書式)
   iDT ({dSplitter}, {dtSeparater}, {tSplitter}, Control)    

{dSplitter} - DateSplitString (Default - "/")
{dtSeparater} - Date/Time SepaleteString (Default - " ")
{tSplitter} - TimeSplitString (Default - ":")
Control - String or Array (0 or 1) (Default - 0 )


スクリプト中に On Error Resume Next を宣言してあれば、全パラメータ省略可

   実行a) test = iDT()    


そうでない場合、カンマとControl指定 必須

   実行a) test = iDT(,,,0)    
結果a) test = yyyy/mm/dd HH:nn:ss


   実行b)   test = iDT(,,,1)       
等価) test = iDT("/",,":",1)

結果b) test(0) = yyyy/mm/dd
test(1) = HH:nn:ss

   実行c)   test = iDT("",,"",1)    
結果c) test(0) = yyyymmdd
test(1) = HHnnss

   実行d)   test = iDT("",,"",0)    
結果d) test = yyyymmdd HHnnss

   実行e)   test = iDT("","","",0)    
結果e) test = yyyymmddHHnnss

オマケw
   実行f)   test = iDT("*",,"*",1)    
結果f) test(0) = yyyy
test(1) = mm
test(2) = dd
test(3) = HH
test(4) = nn
test(5) = ss


結果の内容自体は、いずれも文字列参考までに・・・

VBScriptで日付処理 そにょ1・・・


Excelのシート上なら Text関数、VBA (VisualBasic for Application) なら Format関数、
VisualBasicシリーズなら・・・って、列挙するまでも無く、既存関数で可能な、全く必要のない処理なのだが、
VBScriptでは、ハナシが違ってくる。

そもそも、VBS(WSH WindowsScriptingHost 現WindowsScriptHost)は、古来w
日付処理すら内部に持たない動作環境だった・・・
わざわざ、Windowsのプロセスをオブジェクトとして呼び出して、ソコから取得していた時代がww

それが、あれよ×2 と拡張され、簡単に呼び出せるようになったまでは良かったのだが、
完全な書式指定処理は内包せず、システムの設定依存となってしまった・・・
ちょっと処理すれば、桁揃え程度は誰でも出来る記述だったが、イマイチ汎用性に欠いてしまう・・・

いろんなサイトで同様の処理が列挙されているモノの、
中々、関数として そのまま使え(流用でき)るのが みつからない・・・
ソコで、自分で書いてみた。

    '------------------------------------     
'iDT - 日時文字列 ないし 日/時配列取得 for VBScript
'- Created by LazwardFox -

'LastUpdate 20090228 0458

Public Function iDT(dSplitter,dtSeparater,tSplitter,Control)
Dim nX, nD, nS, strHNS, sResult
nX = Now()
nD = FormatDateTime(Date(),0)
nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2)
strHNS = FormatDateTime(nX,4) & nS
If tSplitter = ":" Then
Else
strHNS = Replace(strHNS,":",tSplitter)
End If
sResult = Cstr(Replace(nD,"/",dSplitter)) & "*" & strHNS
If Control = 0 Then
iDT = Replace(sResult,"*",dtSeparater)
Else
iDT = Split(sResult,"*")
End If
End Function


日時値指定ナシで、今の日時文字列を、欲しいカタチで得たいだけなら、コレで充分

書式)
   iDT (dSplitter,dtSeparater,tSplitter,Control)

dSplitter - DateSplitString (Normal - "/")
dtSeparater - Date/Time SepaleteString (Normal - " ")
tSplitter - TimeSplitString (Normal - ":")
Control - String or Array (0 or 1)

   実行a)
test = iDT("/"," ",":",1)

結果a)
test(0) = yyyy/mm/dd
test(1) = HH:nn:ss

   実行b)
test = iDT(""," ","",0)
結果b)
test = yyyymmdd HHnnss

結果の内容自体は、いずれも文字列

・・・パラメータ無指定によるエラーを、回避する構造にはしていないので注意が必要。
無意味に複雑に感じる向きも少なくないと思うが、スクリプトの短さと共に、
他のvbsファイル作成の際にも流用し易いコトに重点を置いている。
また、Windowsの日付設定[地域のプロパティ]が、インストール既定値であることを前提としている。

コレがVBなら容易に既定値を設定できて楽なのだが、VBSだと型宣言すら思い通りにならんのがクチ惜しい・・・
でもまぁコレなら、それなりに、そのまま流用できると思う。

日付/時刻を繋がった文字列として取得したり、それぞれ分けて、配列として取り出すことで、
呼び出した主処理上で、使い分けが利くようになっている。
また、日付時刻関数 FormatDateTime の癖を利用しているのも特徴だ。

肝心の処理だが、主たるは、▼コレ。
   FormatDateTime(Date[,NamedFormat])    


まず、コイツに、日付のみ(Date関数)を投入することで、確実に日付文字列を確保する。
   nD = FormatDateTime(Date(),0)    

NamedFormatパラメータ 0 (ないし、省略 vbGeneralDate)で、yyyy/mm/dd形式の文字列を得られる。
うっかりココで Now関数とか入れちゃうと、yyyy/mm/dd H/n/ssが返ってきてしまい、
時/分 の部分だけ、桁が可変で使えない。・・・何故かシステム既定だと H/n になってるのだ。
(このクセさえなければ、そのまま使えて便利なのだが・・・)
しかし、システム設定には触れずに処理させたい!

ってワケで、次に、秒のみを取得する。 FormatDateTime のパラメータに 3 (vbLongTime) を指定すると、
   実行) FormatDateTime(Now(),3)    
結果) H:n:ss
と、既定で秒だけ桁が揃えられて出力されてくるのを利用している。・・・なんでだろ~?ww
Windowsのシステム既定値って・・・(´ヘ`;)

実スクリプトでは、戻り値をコロンで Split(配列化)し、配列番号{(2)}指定で秒の部分のみを取り出している。
ソレをアトでくっつけるので、コロンを事前に付けてあったりする。
   nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2)    

更に、時分・・・ FormatDateTime のパラメータを 4 (vbShortTime) を指定、
   実行) FormatDateTime(Now(),4)    
結果) HH:nn

と、桁の揃った時分が返ってくる、ソレに秒の文字列をくっつけて時分秒文字列は完成。
   strHMS = FormatDateTime(nX,4) & nS    


・・・ぶっちゃけ、こう▼書いても同じなんだけどねwww
   strHMS = FormatDateTime(nX,4) & ":" & Split(CStr(FormatDateTime(nX,3)),":")(2)    

あとは、日付文字列とを、どう返すか等を処理しているだけ。
セパレータの指定は、日付処理を色んなカタチで用いるコトの多い方なら、重要さが判ると思う。

ファイル名構築であったり、フォルダ名だったり、はたまたWebのURLだったり、
テキストファイル内への書き込みだったり、etc etc・・・ セパレータは用途によって随分と異なるようでw
主処理で、Replaceカマせばイイだけなんだけど、どうせなら取得時点で完了していたほうが・・・と
手抜き根性がココまでさせたというオチも付き、オアトがヨロしいようで・・・
<FormatDateTime ヘンなクセ>

2009/02/17

必要に迫られる・・・


何故かJavaScriptで遊んでいたりw

自鯖のDDNS接続の更新確認をケータイから行えるよう、専用ページを配置しているのだが、
ソコに、ケータイブラウザでも走るデモとして、時計でも置いてやろうか と云うのが始まりだった。

・・・元々VBscript遣いだが、アレがケータイで走るとは、到底思えん(´ヘ`;)
似たような処理は結構多用するし、諦めてJSに手を付けることになったワケで・・・

で、2日ほど色々試行して、JSの身の振りようをあらかた把握したところw
ソコは上記の通りVBS遣い、JSなんて必要ない と思っていたのだが、使うと中々どうして、
こりゃ便利 ってカンジw

ただ、一長一短ではあるようで、JSで、繰り返しや複雑すぎる分岐、
量のある文字列処理などを行うものを、不用意にHTMLに組み込むと・・・ 実動で不得手なのは見て取れた(^_^;
一瞬、ウチの骨董端末がヤバいのかと思った(爆)が、参考にしていた数々のサイトでも
同様の評価が出てた・・・ (ひと安心)

また、当方では よく多用する、時間関連処理でも、
同じ結果を1/1000secレベルまで精度を上げて出そうとすると、かなり重くなって、
実用に耐えなくなってしまった・・・ のて端末のloliちゃんだと停まるコトもw
・・・何故かケータイだと、それなりに走るのだがww
単純分岐処理のモノだと、精度は落ちるが、のて機でも問題なく動く・・・
JSを使うなら、余程必要ない限り、複雑な構造にしないほうが無難なようだ。

VBSなら、文字列処理や 異常なくらい複雑な分岐を構成しても、
速度に不満は感じたコトは無かったが、環境依存度が高いし、
HTMLへの応用だと、出力方法が なんか回りクドいし・・・
まぁ、クライアントの環境に左右されるってだけでも考え物だけどね。

とは云え、便利なのを知ってしまったからにはアトには戻れないのが人情ってヤシで、
そうなると、WSHで、VBS/JS混在記述と云うのも、アリなのではと思いはじめてたりw


・・・IEを非標準扱いしてるヤシのコメとは思えんな・・・(-_-;)

2009/02/14

プロバイダ乗り換える・・・


ついさっきまでは、USEN GyaO with フレッツ光 (NTT西) を 使っていた。

今は、INTERLINKZOOT ・・・ココは随分昔、ADSL時代に利用していたコトがあったのだが、
すっかり存在忘れてたww

直前まで利用していたUSEN GyaOは、基本 鯖立×と云うのも知っていたが、関東在住の折、
旧BroadGate01時代に マンションLANタイプで鯖利用していて、回線品質の高さなどを知っていたのもあり、
盲目的に選択してしまった。しかし、OSの関係で充実を謳うコンテンツも全く閲覧も出来ないし、
直接接続だった関東圏のサービスと違いNTT介在、IPも1つしか割り当てられない上 非固定、
4K円以上の月額も年間では大きいし、その割りに大して利点がないので切るコトにした。

プロバイダのスタンスとして、鯖立×と云う時点でも充分考えモノ。
どローカルのプロバイダ(BBIQJCOM)も、御同様かソレよりタチが悪かったので却下した経緯がある。
そもそも、用途によって明確だったワケだ、コンシューマ向けプロバイダは、高度運用には全く向かないと・・・

ソレを踏まえ、低価格のプロバイダを探すにあたり、INTERLINKを思い出し、サービスをサイトで確認してみる・・・
相変わらずの機能充実・・・ しかも以前より拡張されてるし・・・ しかも月額 GyaOの半額以下・・・ 驚くしかない。
フレッツ同時導入ならキャッシュバックは他のプロバイダと同様で、契約期間の縛りもない。
初期費用もなしで、2ヶ月全機能試用可で、その間の解約違約金もナシ、機能充実で、月額半額・・・
去年、ココを思い出していたら、キャッシュバックがあったとはいえ、USENと云うチョイスはしなかったと思う・・・
結局、思い込みと、価格比較サイトに振り回されたと云うコトだろう。

INTERLINKのサービスを一通り確認し終えて、早速、
月額2100円の固定IP1つのサービスに加入し、2ヶ月間の試用に入った。
週明けまでに動作確認を行い、問題が無いようなら、このままココに決めることになるだろう。
・・・固定IPなんだし、DynamicDNSである必要性はない。 折角だから、ドメインも確保しようかな・・・

つい先日・・・


メイン使用機の SHARP Mebius PC-GP1-C1Mのディスプレイアダプタ(s3 TwistarK)のドライバを更新してみた。

昔からあのメーカーはアテにならなかったので、2001年にs3から発行されたドライバを使い続けていたのだが、
コレがDirectX9cに対応していなかった。

たまたま別件をググるさんで探してたら、昔使っていた便利なアプリケーションを見つけてしまい、
急遽使用することにしたのだが、dX9c必須と云う・・・ 已む無く対応ドライバがナイかとググるさんで捜す。
当然のようにコトも無げにみつかり、それまで更新を放置していたドライバと差し替えた。

が、更新直後、[画面のプロパティ][設定]タブが困ったコトに・・・

元々同一機器で、SXGAで使っていたのにも関わらず、XGA以上の画面解像度が選択できなくなってしまった・・・
諦めてドライバをロールバックしようと思い、最終確認としてディスプレイアダプタのプロパティを見ていたら、
何故か、[モニタ]タブの [このモニタでは表示できないモードを隠す]のチェックが勝手に入ってるコトに気がついた・・・
コレをハズして、[設定]タブの内容がUXGAまで設定可能に戻り、コト無きを得た。

使いたかったアプリケーションも動作するようになり、なんとも(^_^)

2009/02/13

でっかい・・・


・・・ゴミです。

それは、月を撮った日のコト。


最初のショットはナンとも無くて・・・
012815
撮影日: 2009/02/08 21:51:20
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/30秒
絞り値: F11
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 0 mm
記録画素数: HI
ドライブモード: ミラーアップ






そのまま暫く撮ってたら・・・



・・・はひ?
012816
撮影日: 2009/02/08 21:51:27
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/30秒
絞り値: F11
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 0 mm
記録画素数: HI
ドライブモード: ミラーアップ





でも、ファインダ覗いても何もないんです;



何度撮ってもこんなカンジで・・・
012817
撮影日: 2009/02/08 21:51:45
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/30秒
絞り値: F11
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 0 mm
記録画素数: HI
ドライブモード: ミラーアップ






仕方がないのでピンはずして、街灯をパシャリ・・・



あ゛やっぱり・・・
012823
撮影日: 2009/02/08 21:55:52
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/160秒
絞り値: F5
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 0 mm
記録画素数: HI
ドライブモード: 1コマ撮影





おもいっきり載ってます・・・ FoveonX3の上に(´ヘ`;)
取り敢えず簡単なクリーニングで・・・



コト無きを得ました・・・
012844
撮影日: 2009/02/08 22:11:57
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/100秒
絞り値: F5
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 0 mm
記録画素数: HI
ドライブモード: 1コマ撮影





けど、ちょっと気になったので後日、室内でピンをハズして、確認の撮影を・・・




おお~・・・
012881
撮影日: 2009/02/09 15:51:31
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1.0秒
絞り値: F5.6
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 70 mm (17-70)
記録画素数: HI
ドライブモード: 1コマ撮影




ブロアで吹いただけだったんですケド、ものすごく綺麗になっていたので驚いてしまいました^_^;

2009/02/12

ふるむ~ん・・・


・・・撮り損ねる、当日に天候がスグれなくて・・・
天気予報もあったので、前日にフライング撮影できたのは幸いだったが、大して意味はない(爆)


とりあえず・・・
012802
撮影日: 2009/02/08 19:06:10
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/80秒
絞り値: F5.6
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 300 mm (70-300)
記録画素数: HI
ドライブモード: ミラーアップ




別レンズで寄り・・・
012846
撮影日: 2009/02/08 22:12:39
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/100秒
絞り値: F5
測光モード: 評価測光
フォーカスモード: M-マニュアル
点距離: 35mm換算 1190mm相当
記録画素数: HI
ドライブモード: 1コマ撮影
Lens : TAMRON 70-350mm F4.5-22
(ADAPTALL Series - ManualFocus)
+ KENKO APK.TELEPLUS MC7 改
(350mm×2×1.7)





・・・しかし、またもディレイうpw

2009/02/07

制服のミニスカート化が・・・


・・・“化”っても、本人たちが巻くんだけどね(まくのはローゼン麻生だけにしとけよ・・・)
まぁ、コレも教育現場で話題になって久しいはずが、流行モノ半年~3年出遅れが定番の聞屋や局、
無能総本山のお役所は、イマサラ必死こいて話題にしている風で・・・ イミ無ぇ┐(´ー`)┌

別段、本人たちが好きでやってる分には、全然問題を感じないハナシだ。
って、アレが、何らかの強要だったらイササカ考え物だがねw

つか、本人たちにも嗜好ってモンがあるだろうから、学校側も色んな長さのモノを用意すればいいのでは?
放っときゃ好きなの着るんじゃない?

-----
その分布で、本人らの属性(性格など)解析パラメータの一部とか得られそうだしねw
やっぱり世の中、情報に勝る醍醐味は無いってコトで、
ドコかのヒマな大学教授とかが、集計採ってナイかなぁ(´ヘ`;)
-----

そもそも、そんなトコばかり目クジラ立ててる教育現場の連中ばかりだから、肝心な部分は御せないんだよ!
頭使え能無し共がっ#

それにヤロ側も、スカート短いからってマジマジ見るかフツー?・・・ つか、そうしてる時点で怪しすぎナンだが(´ヘ`;)
それ以上に実際、"あーハイハイ"ってぇ程度のばっかりで、このイナカでも東京都内でも、
制服着てる女子学生で、無意識に目がイクほどカワイイ娘、
殆っっど お目に掛かったコトがナイのデスが、ナニか?┐(´д`)┌

!
そっかぁ~ ナルホドねぇ~♪ 騒ぎ立ててる連中は、
如何にもマトモそうなコト云って自分や周りをゴマかしてるケド、ソコに目が逝って仕方のないエロジジィらか、
若さに嫉妬してるオバサン教師とかだな、マチガイナイ!(←懐かしい・・・)


・・・な~んか最後のほうは、バカ野郎様憑いちゃったなぁ(-_-;)

2009/02/06

ディレイうpと云えば・・・


撮影に逝って来た筑豊電鉄駅名変更ネタや、近所で起こった暴力団関係者の殺人事件ネタなど、
Source放置しているものが多いなぁ、とか、ふと想ったり・・・

ブログの基幹を自鯖に移し終えたら考えよっと♪

2009/02/05

タブレットって・・・


・・・ペンを浮かせたまま、カーソルを微動だにさせずに、ペンに付いているボタンをクリックするのは無理ですネw
ペン先に、中指の先添えて安定させるのも手なんですが、そうなると既に持ち方がペンでなくなってるし(´ヘ`;)

なので、以前より使っていたマウスジェスチャツール XWheelの設定を変更し、組み合わせて使うコトに。

まず、タブレットのドライバで、

●ペン先にマウスの左ボタン、コレは既定のまま。
●ペンの前ボタンに、マウスの中(ホイール)ボタン
●後ろボタンに、マウスの第(第1拡張)ボタン

と、割り当てます。 XWheelのほうも、Default動作の設定で、

●ペンの前ボタン(中央ボタン)を押したままで、全ての既定動作を無効に
●常時、第1拡張ボタンの既定動作を無効に
●ペンを落とした(左ボタンを押した)ままにすると、マウスの中央ボタン以外の既定動作は無効に

●ペンを落とし、安定させた上で、ペンの前ボタンを押すと、マウスの中央ボタンクリック
●ペンの前ボタンを押したまま、ペンを落とす(左クリック)で、マウスの右クリック操作。
●ペンの後ろボタン(マウスの第1拡張)を押したまま、ペンを落とす(左クリック)と、キーボードのF2
 (デスクトップやエクスプローラでファイル名の変更)

と、割り当て、多ボタンマウスと同等の操作性を確保できた。

あとは、デスクトップランチャ Orchisをコレらに合わせて、

●デスクトップをダブルクリック で、メインランチャ
●中央ボタンクリック で、システムメンテナンスランチャ

と、変更。

多ボタンマウスを使っていたときには、5つのランチャを使っいたモノの、
結局、面倒になり、メイン使用とシステム管理用に統合し、2つしか使わなくなったり・・・

とは云えコレで、効率よく操作やメンテナンスが行えるようになるのだが、
もう少しコ慣れてきたら、ランチャ(呼び出し操作)を増やす方法でも考えないと・・・

霧が・・・


恐ろしい程 濃霧・・・ 昨日の朝のハナシ。
でも、寝る前のハナシΣ(・ε・;)


こんなの(実家では)見たコトなかったよ・・・
012685
撮影日: 2009/02/04 7:10:44
露出モード: M-マニュアル露出
露出補正: 0 (AB 0 of 0)
ISO感度: 50
ホワイトバランス: オート
色モード: 通常
フラッシュ: 非発光
シャッター速度: 1/15秒
絞り値: F4
測光モード: 評価測光
フォーカスモード: M-マニュアル
焦点距離: 17 mm (17-70)
記録画素数: HI
ドライブモード: 1コマ撮影





・・・しかし、ディレイうpの多いコト多いコトw

つい、うっかり・・・


SD14を床に落としてしまった・・・ 今週頭のハナシ。

階段を降り、母屋への扉を開ける際、その取っ手が指に引っかかってしまい、
手に持っていたヤシが、するりと廊下の木の床へ・・・
"ヤバっ!" と手を伸ばしたが遅く、コンクリの玄関へコロコロとΣ(゚Д゚;≡;゚д゚)

玄関の床へ降り、恐る恐る手に取る・・・ パッと見、なんともない・・・
常設しているBP-21のサイドに、殆ど見えないカスりキズが辛うじて見て取れる程度・・・
試しに電源を入れ動作確認・・・ 普通に動くw

実に頑丈だw さすがSIGMAモノww 有事には良い凶器となるコトであろうwww

あの勢いで落ちて無故障とは・・・ まぁコレも、日頃の行いの賜物だろう ←バカ
・・・たまたま憑いていただけなので、良い子の皆さんはマネをしないように♪

2009/02/01

昨今の人間と云うのは・・・


・・・上に立とうが、下で踏みつけられていようが、志低いのが多いねぇ♪

ココに至っては、土地神にべったりの狛犬以下なのが殆どだろ、最近の世情を観るにつけ、つくづくそう想う・・・
サルから大して進歩してナイと云うか、ノーミソ進化してないと云うか、知的生命体名乗る割には、
そのIdentityを感じないのだが・・・?(´ヘ`;)

大企業経営者や御役所連中、ハテは田舎モノ首相に至るまで、最近の体たらくを見るに、
“このエロ犬っ(ゲシゲシ)” とか あの声で云われてヨロこんでる連中のほうが、まだ格が高いカモ知れないと、
最近とみに思うよ・・・(゚Д゚;)オイオイ

って、コレが、踏みつけられてる側も側で、
中途半端にカネ持ってて、なんか勘違いしまくってる連中に、正当な対価を払われること無く利用され、
いいようにあしらわれた上、斬られようが捨てられようが、流されるだけの状況に全く疑問を感じないよう
国家に教育(調教)された犬ばかりでは、国はおろか、この、人間が存在する世界自体に、先が無いように思うが?