ホーム > ラボラトリー > WSH >
ラボラトリー  VBScript サンプル
Software | Reference | FAQ | Technique | Laboratory | Download

均等割付.vbs

'【VBScript 文字均等割付】Copyright(C) 1999 Primesoft
'
' VBScriptによる外部変形のサンプル スクリプトです。 1999/9/29
' 同じ文字サイズで1番長い文字列を基準に均等割付します。
' 原点の座標と位置は変更しませんので、あらかじめ文字の先頭を合わせてください。
'
' #be
'            #be はbed_temp.txtとbed_temp.pt を 均等割付.batがある
'            ディレクトリに作成します。
' #h3
' #hc 均等割付する文字範囲を指定
' #e

' ----------------------------------------------------------------------
' VBScriptによる処理

Dim fs
Dim aryLength(64)

Set fs = CreateObject("Scripting.FileSystemObject")

' bed_temp.pt から文字属性ごとの文字長さをセットする
Call Process(0)
' 文字均等割付する
Call Process(1)

WScript.Quit

' ----------------------------------------------------------------------
' 文字均等割付 サブルーチン
'
Sub Process(iMode)
  Dim readFile, tempFile
  Dim strBuf, strText, strField, strTemp
  Dim iPos, iLen, iLenByte, iFormat, iOne, i

  Set readFile = fs.OpenTextFile("bed_temp.pt")
  If iMode = 0 Then
    ' 文字属性ごとの文字長さを初期化
    For i = 0 To 63
      aryLength(i) = 0
    Next
  Else
    ' 書き込みテンポラリファイルを作成
    Set tempFile = fs.CreateTextFile("bed_temp")
  End If

  strText = "T" & Chr(9)
  While readFile.AtEndOfLine = false
    strBuf = readFile.ReadLine
    If iMode <> 0 Then
      tempFile.WriteLine(strBuf)
    End If

    strField = Left(strBuf, 2)
    If strField = strText Then
      ' 文字データ
      strTemp = Mid(strBuf, 3)
      strField = ""
      For i = 1 To 4
        ' スペースが見つかったら、スペースの左側がフィールド テキスト
        iPos = InStr(strTemp, Chr(32))
        If iPos = 0 Then
          break
        End If

         ' フィールド テキストを strField 変数に割り当てる
         strField = Left(strTemp, iPos - 1)
        ' テキスト行からフィールド値テキストを取り除く
        strTemp = Right(strTemp, Len(strTemp) - iPos)
      Next

      If strField <> "" Then
        ' iFormat 文字属性番号
        iFormat = Int(strField)
        strBuf = readFile.ReadLine
        iLen = Len(strBuf)
        iLenByte = 0
        ' 文字列のバイト数
        For i = 2 To iLen
          strField = Mid(strBuf, i, 1)
          iCode = Asc(strField)
          If iCode > 0 Then
            ' 半角文字
            iLenByte = iLenByte + 1
          Else
            ' 全角角文字
            iLenByte = iLenByte + 2
          End If
        Next

        If iMode = 0 Then
          ' 文字属性ごとの最長バイト数
          If iLenByte > aryLength(iFormat) Then
            aryLength(iFormat) = iLenByte
          End If
        Else
          iLen = aryLength(iFormat) - iLenByte
          If iLen > 0 Then
            ' 一番長い文字に合わせて "・" と "・" を付加
            iOne = iLen Mod 2
            iLen = iLen - iOne
            i = 0
            While i < iLen
              strBuf = strBuf & "・"
              i = i + 2
            Wend
            If iOne <> 0 Then
              strBuf = strBuf & "・"
            End If
          End If

          tempFile.WriteLine(strBuf)
        End If
      End If
    End If
  Wend

  ' ファイルをクローズ
  readFile.Close
  If iMode = 1 Then
    tempFile.Close

    ' ファイル bed_temp を bed_temp.pt にコピー
    fs.CopyFile "bed_temp", "bed_temp.pt", true
    ' テンポラリファイルを削除
    fs.DeleteFile "bed_temp"

    Set tempFile = fs.CreateTextFile("bed_temp.txt")
    ' 選択文字を削除
    tempFile.WriteLine("hd")
    tempFile.Close
  End If
End Sub

©2000-2001 Primesoft