Batch 処理について
Scarab の次の2つの機能によって Batch 処理が可能になりました。
準備
その後、Batch プログラムでは
これで Scarab が呼び出され、今保存し直された履歴ファイルの更新されたテキストの手順に従って、
"検索結果の保存" まで実行され、Scarab
は退場します。
後は保存された検索結果を利用して下さい。
参考のため、Batch 呼出し部分のサンプルリストを添えます。
また、「テキストの、指定された部分を別のテキストに入れ替えるサブプロシージャ」のサンプルリスト等も添えます。
Option Explicit
Dim AllText$
Sub Main()
Dim RevisedResumeFileName As String, ManuscriptResumeFileName
As String, AllText As String
'履歴 ファイルを探し、その中の一部を入れ替える。
' =========================================================================
Call ReadEnvironment(ManuscriptResumeFileName,
AllText)
Call WordExchange(AllText, 1, " TableFileNames
Left Top Height Width#a#", 1, "@A@",
"満足")
' InputForm.Text1.Text = AllText
' InputForm.Show 1
RevisedResumeFileName = "D:\Basic5\MyPrograms\すからべ\ExcelCake\BatchTemp.rsm"
Call SaveEnvironment(RevisedResumeFileName,
AllText)
Call ScarabCall(RevisedResumeFileName)
End
' =========================================================================
End Sub
Static Sub ReadEnvironment(ManuscriptFileName
As String, AllText As String)
' 従うべき履歴ファイルを読む。
Dim OrgDirectory As String, CurrentDir As
String, init As Long
Dim OrgDrive As String, CurrentDrv As String
Dim RevisedFileName As String
Dim CrLf$, LineOfText$, channel#
CrLf = Chr$(13) + Chr$(10)
AllText = ""
If ManuscriptFileName = "" Then
OrgDirectory = CurDir
' CommonDialog 使用後、今の CurDir を回復するために憶えておく。
OrgDrive = Left(OrgDirectory, 1)
If CurrentDir <> "" Then
ChDir CurrentDir ' 前回 CommonDialog を使った時の
CurDir が有れば取り出す
ChDrive CurrentDrv
End If
InputForm.CommonDialog1.DialogTitle = "
状態を保存しているファイルを読む。"
InputForm.CommonDialog1.
Filter = "CSV File (*.rsm)|*.rsm"
& "|すべてのファイル (*.*)|*.*|"
InputForm.CommonDialog1.ShowOpen
ManuscriptFileName = InputForm.CommonDialog1.filename
CurrentDir = CurDir ' 次回 CommonDialog
を使う時のため、今の CurDir を憶えておく。
CurrentDrv = Left(CurrentDir, 1)
ChDrive OrgDrive
ChDir OrgDirectory ' Current directory を最初のに戻す。
End If
InputForm.MousePointer = 11 ' 砂時計
channel = 1
' ----------------------------------------------------------------
Do Until EOF(channel) ' ファイルからテキスト行を読み込む。行について回す。
Line Input #channel, LineOfText
AllText = AllText & LineOfText &
CrLf
Loop
Close channel
' ----------------------------------------------------------------
InputForm.MousePointer = 0
End Sub
Sub WordExchange(AllText As String, M As
Long, Anchor As String, N As Long, OldWord
As String, NewWord As String)
' M 個目の "Anchor" フレーズから数えて、N
番目に在った OldWord を NewWord に置き換える。
Dim I As Long, j As Long, k As Long, L As
Integer, M0 As Long, N0 As Long
Dim J0 As Long, J1 As Long, J2 As Long,
J3 As Long, J4 As Long
Dim CrLf As String: CrLf = Chr$(13) + Chr$(10)
' 改行行送りコード
M0 = 0
If InStr(1, AllText, Anchor & ",")
= 1 Or InStr(1, AllText, Anchor & CrLf)
= 1 Then ' Anchor は先頭にあった。
M0 = 1
j = 1
End If
J0 = 0
Do
If M0 = M Then Exit Do
M0 = M0 + 1
j = J0 + 1
J1 = InStr(j, AllText, "," &
Anchor & ",")
J2 = InStr(j, AllText, CrLf & Anchor
& ",")
J3 = InStr(j, AllText, "," &
Anchor & CrLf)
J4 = InStr(j, AllText, CrLf & Anchor
& CrLf)
J0 = Len(AllText)
If j <= J1 Then J0 = J1
If j <= J2 And J2 < J0 Then J0 = J2
If j <= J3 And J3 < J0 Then J0 = J3
If j <= J4 And J4 < J0 Then J0 = J4
If J1 = 0 And J2 = 0 And J3 = 0 And J4 =
0 Then Exit Sub ' M0 番目の Anchor フレーズは
J0 文字目から始まっている。
Loop
' MsgBox (Left(alltext, J0 - 1))
If j = 1 And N = 0 And InStr(1, AllText,
OldWord) = 1 Then '入れ替えるべき OldTxt
は先頭のフレーズだった。
J0 = 1
Else
N0 = 0
Do J1 = InStr(j, AllText, OldWord)
If J1 = 0 Then Exit Sub
N0 = N0 + 1
If j <= J1 And N = N0 Then Exit Do
j = J1 + 1
Loop
End If
AllText = Left(AllText, J1 - 1) & NewWord
& Right(AllText, Len(AllText) - J1 -
Len(OldWord) + 1)
End Sub
Static Sub SaveEnvironment(RevisedFileName
As String, AllText As String) ' 更新した履歴ファイルを保存する
Dim OrgDirectory As String, CurrentDir As
String, init As Long
Dim OrgDrive As String, CurrentDrv As String
If RevisedFileName = "" Then
OrgDirectory = CurDir ' CommonDialog 使用後、今の
CurDir を回復するために憶えておく。
OrgDrive = Left(OrgDirectory, 1)
If CurrentDir <> "" Then
ChDir CurrentDir ' 前回 CommonDialog を使った時の
CurDir が有れば取り出す
ChDrive CurrentDrv
End If
InputForm.CommonDialog1.DialogTitle = "
現状をファイルに保存する。"
InputForm.CommonDialog1.Flags = &H2
InputForm.CommonDialog1.Filter = "CSV
File (*.rsm)|*.rsm" & "|すべてのファイル
(*.*)|*.*|"
InputForm.CommonDialog1.ShowSave
RevisedFileName = InputForm.CommonDialog1.filename
CurrentDir = CurDir ' 次回 CommonDialog を使う時のため、今の
CurDir を憶えておく。
CurrentDrv = Left(CurrentDir, 1)
ChDrive OrgDrive ChDir OrgDirectory ' Current
directory を最初のに戻す。
End If
Open RevisedFileName For Output As #1
Print #1, AllText
Close #1
End Sub
Sub ScarabCall(RevisedFileName As String)
' 履歴ファイル名をコマンドラインパラメータとし、Scarab.exe
を呼び出す。
Dim I As Long
ChDrive "D" ' Scarab.exe の居るドライブを
Current Drive にする。
ChDir "D:\Basic5\MyPrograms\すからべ"
' Scarab.exe の居るフォルダーを Current Directory
にする。
I = Shell("D:\Basic5\MyPrograms\すからべ\Scarab.exe
" & RevisedFileName, 1)
End Sub