パスワードを忘れた? アカウント作成
239389 journal

soltioxの日記: 躓きの石 又は vb系言語との折り合いの付け方 3

日記 by soltiox

vba とか vbs といった言語群で書かれたコードを弄るとき、
「if文やfor文の書き方も分からんのか、ボケ!」だの
「等号を二つも並べんな、タコ!」だの、
「馬鹿め! switch文は死んだわ」だのといった
エラーメッセージに心が折れそうになる事がある。

アンチョコを工夫してみたりとかしてたんだけど、
動作するスニペットを作っておいて、参照すればいいんじゃね?
という天啓を得たので、書いてみた。

rem *********************************************
rem
rem *********************************************
rem 変数は定義すれ
Option Explicit
 
rem 変数・定数定義
dim intVal
const ZERO = 0
intVal = ZERO
 
dim strMsg, strTitle
dim aryNum(9)
rem aryNum(0) .. aryNum(9)
 
strTitle = "vbs if 文"
if intVal = 0 then
  strMsg = "等値判定子は等号がいっこ"
else
  strMsg = "不等判定子は<>"
end if
msgbox strMsg, vbOKOnly, strTitle
 
strTitle = "vbs select case 文"
select case intVal
  case 0
    strMsg = "switch じゃないので注意"
  case 1
    strMsg = "break しなくても以降の case はパスする"
  case else
    strMsg = "default じゃないので注意"
end select
msgbox strMsg, vbOKOnly, strTitle
 
strTitle = "vbs for 文"
for intVal = 0 to 4 step 2
  strMsg = intVal / 2 + 1 & "回目のループ"
  msgbox strMsg, vbOKOnly, strTitle
  exit for
next
 
strTitle = "vbs do ループ 1"
do while intVal > 0
  strMsg = "while の前に do 必須" & vbCrLf
  strMsg = "今の値は " & intVal
  msgbox strMsg, vbOKOnly, strTitle
  exit do
loop
 
strTitle = "vbs do ループ 2"
do
  intVal = intVal + 1
  strMsg = "while の前に loop 必須" & vbCrLf
  strMsg = "今の値は " & intVal
  msgbox strMsg, vbOKOnly, strTitle
loop while intVal < 2
 
strTitle = "vbs 鉄の掟"
strMsg = "剰余は'mod'、階乗は'^'、論理演算は'And','Or','Not'"
msgbox strMsg, vbOKOnly, strTitle
 
rem vbs file write
dim strFileName, FileSystemObj, FileStreamOut
const OVERWRITE = TRUE
const KEEPORIG = FALSE
strFileName = "c:\temp\temp.txt"
set FileSystemObj = CreateObject("Scripting.FileSystemObject")
 
on error Resume next
  set FileStreamOut = FileSystemObj.CreateTextFile(strFileName, KEEPORIG)
  if Err.Number <> 0 then
    if MsgBox("既存ファイル上書?", vbOKCancel) = vbOK then
      Set FileStreamOut = FileSystemObj.CreateTextFile(strFileName, OVERWRITE)
    else
      WScript.Quit
    end if
    Err.Clear
  end if
on error GoTo 0
 
FileStreamOut.WriteLine( "date : " & date )
FileStreamOut.WriteLine( "now  : " & now )
FileStreamOut.Close
 
strTitle = "vbs file read"
dim FileStreamIn
const FORREADING = 1
 
set FileStreamIn = FileSystemObj.OpenTextFile(strFileName, FORREADING)
strMsg = FileStreamIn.ReadLine()
do while FileStreamIn.AtEndOfLine <> True
  strMsg = strMsg & vbCrLf & FileStreamIn.ReadLine()
loop
FileStreamIn.Close
msgbox strMsg, vbOKOnly, strTitle
 
rem *********************************************
rem
rem *********************************************

エディタのスニペットに喰わして、
あと、texterみたいなスニペットツールに設定して、
ついでに、テキストファイルに書き出して、携帯電話に仕込む。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 好みの問題ですが、vb関係では、インラインコメントは rem より ' の方が好きですな。いや、どっちでもいいことですけど。

    --
    LIVE-GON(リベゴン)
    • by soltiox (25610) on 2010年07月21日 12時59分 (#1798338) 日記

      あ、いやいや、私も使うんですけどね、"'"は。
      ただ、構文強調機能がないエディタで見た時とかに、
      見落としたりするので、"rem"を使うように心がけてます。
      飾り文字とかは、初めっからコメントだと思って読むのですが、
      コメントアウトしたステートメントを、生きてると誤解したりとか。

      // 使ってないステートメントを残存させるな、
      // という至極もっともな指摘は回避の方向で。

      それと、どうせスニペットだから、
      ちょっとぐらい冗長なコードでもいいかな、みたいな。

      親コメント
      • いや別にくいさがるとかそういう話ではなくて第三者にも参考になるかと思って書いているだけですが(笑)

        英語のREMの方が見落としが発生しやすい――自分では読んでて脳内強調表示されない――ので、エディタが使えない環境では ''' という三連星を使っています。ちなみに。

        --
        LIVE-GON(リベゴン)
        親コメント
typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...