格子戸描画スクリプト Koushi.vbs

ver.1.0(2004.08.23)ダウンロード
内容 サイズ(Bytes)
VBSスクリプトファイル 3,710

格子戸を作図します。
動作にはWindowsScriptingHostが必要です。

AWKなんかだと自動でやってくれるフィールドへの分割も、
VBScript(には限りませんが)では自前で実装する必要があります。
私は C のstrtok()関数をモデルに、(区切り文字の扱いが異なっています)
次のようなものを書いて使っています。

Function StrTok(Line,Delimiter)
    Do While InStr(Line,Delimiter) = 1
        Line = Right(Line,Len(Line)-1)
    Loop

    If InStr(Line,Delimiter) = 0 Then
        StrTok = Line
        Line = ""
    Else
        StrTok = Left(Line,InStr(Line,Delimiter)-1)
        Line = Right(Line,Len(Line)-InStr(Line,Delimiter))
    End If
End Function

VBScriptのプロシージャの引数は、原則参照渡しである事に注意してください。
(プロシージャ内での変更が、呼び出し元に反映される)
値渡しにしたい時は、次のいずれかの手段をとります。
    @定義する時に、「ByVal」キーワードを使う
        ex.)Function Tako(ByVal V1,V2) ・・・ End Function
    A呼び出す時に、引数を ( ) で囲む
        ex.)Result = Tako((V1),V2)

StrTok()プロシージャは、Lineの先頭のフィールドを戻り値とします。
例えば、次のような感じで使います。

Const ForReading = 1
Const LineDataPattern = "^[-0-9]"

Set FSObj = CreateObject("Scripting.FileSystemObject")
Set InputFile = FSObj.OpenTextFile("tmp.txt",ForReading)

Set REObj = new RegExp
REObj.Pattern = LineDataPattern

Do Until InputFile.AtEndOfStream
    CurrentLine = LTrim(InputFile.ReadLine)
    If REObj.Test(CurrentLine) Then
        i = 0
        Do Until CurrentLine = ""
            X(i) = StrTok(CurrentLine,"")
            Y(i) = StrTok(CurrentLine,"")
            i = i + 1
        Loop
        X(1) = CDbl(X(1)) * 2 - CDbl(X(0))
        Y(1) = CDbl(Y(1)) * 2 - CDbl(Y(0))
        WScript.Echo X(0) & " " & Y(0) & " " & X(1) & " " & Y(1)
    Else
        WScript.Echo CurrentLine
    End If
Loop

InputFile.Close

線分の長さを2倍にするスクリプトです。
CurrentLineは先頭からどんどん削られて、最後は空文字列になるので、
それを利用したループにしています。
(本来は For i = 0 to UBound(X) 〜 Next を使うところですが、例と言う事で)

RegExpオブジェクトに関しては、次の機会に・・・。

Jw_cad外部変形プログラム目次へ

Tails of CAD! トップページへ