前の版で困難だった、ネットワークドライブ/フォルダ上のファイルアクセスも容易にする為、
対象ファイル読み込み処理だけ、ADODB.Streamから FileSystemObject.OpenTextFileに差し替えました。
以前のログにも記述した通り、ADODB.Streamでは、どう処理の順序を変えても、
ネットワーク先からローカルドライブへ、無条件にテンポラリってしまい、
大量のファイルを連続処理するのはおろか、1つのファイルだけでも多大な時間を要していたのです。
で、今朝・・・ つーか深夜だけどw 夜通しでFSO版を試作してみて、その問題の解消に至りました。
やっぱり餅は餅屋、ファイルアクセスなら、DB向けオブジェクト使うより、FSOってコトですかね・・・(^_^;)
って、書き込みとかはADOのままですケドww以下はアーカイブです。
X3FSIR.zip βReleaseArchive - 20100103 0739 launch -
|
▲ を、右クリックしてファイルとして保存してください。
とは云え まだまだ、
アクマで暫定版デスから。結局こんなん出ました~w
Option Explicit Public My, Parameters, Fs, objADO Set My = WScript With My Set Parameters = .Arguments If Parameters.Count <= 0 Then .Quit End If Set Fs = .CreateObject("Scripting.FileSystemObject") Set objADO = .CreateObject("ADODB.Stream") End With Const vbWq = """" Dim vbWCrLf, vbTc, vbNullB vbWCrLf = vbCrLf & vbCrLf vbTc = vbTab & vbCrLf vbNullB = chr(&h00) Dim X3FSet X3FSet = Array("X3F",, 0, 1800, "VERSION_BF", "BURST", "TIME", "1970/1/1") BPS Parameters, X3FSet Set Fs = Nothing Set objADO = Nothing My.Quit Function BPS(arFileNames, arSet) Dim kNothing, iADO, strTarget, Pc, fKey, rSource, rHeader, lHeader Dim pResult, arResult, rUnits, sResult kNothing = String(5, vbNullB) Set iADO = objADO For Each strTarget In arFileNames If Fs.GetExtensionName(strTarget) = arSet(0) Then arSet(1) = Replace(strTarget,"." & arSet(0),".txt") Set rSource = Fs.OpenTextFile(strTarget,1) With rSource If arSet(2) > 0 Then .Skip(arSet(2)) End If rHeader = .Read(arSet(3)) End With Set rSource = Nothing With iADO If LenB(rHeader) > 0 Then rHeader = CStr(rHeader) rHeader = Replace(rHeader, "SECc", "") rHeader = Replace(rHeader, kNothing, "") .Type = 2 .Charset = "_autodetect" .Open .Position = 0 .WriteText = rHeader lHeader = .Position rHeader = "" For Pc = 1 To lHeader Step 2 .Position = Pc pResult = pResult & .ReadText(1) Next .Close arResult = Split(pResult, vbNullB) pResult = "" For Each sResult In arResult If sResult = arSet(4) Or fKey > 0 Then If fKey = 4 Then sResult = cnvDateTime(arSet(7), sResult) End If rUnits = rUnits & sResult If fKey < 2 Then If sResult = arSet(5) Then fKey = 5 ElseIf sResult = arSet(6) Then fKey = 4 Else fKey = 3 End If rUnits = rUnits & "," Else rUnits = rUnits & vbCrLf If fKey = 5 Then Exit For End If fKey = 1 End If End If sResult = "" Next arResult = "" fKey = 0 .Type = 2 .Charset = "_autodetect" .Open .Position = 0 .WriteText rUnits .SaveToFile arSet(1), 2 End If .Close End With rUnits = "" End If Next Set iADO = Nothing End Function Function cnvDateTime(strBaseDate, SourceDateTime) Dim sDate sDate = DateValue(strBaseDate) cnvDateTime = (((SourceDateTime / 60) / 60) / 24) + sDate End Function
|
< ファイルの一部へのみアクセスするなら、FileSystemObject(FSO) >
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。