§ Game-emaG §

プログラマーになりたい30歳のメモ&ブログ

VBS:無限ループの回避方法

最近新人が入り(プログラム知識ゼロ)、VBSとVBA(Excel)の課題をやってもらってます。

課題の内容としては下記の通りになります。

 

どっちが大きい値なのか判定

  1. 値と値の間は半角スペースで区切られている⇒"20 30"のようなデータ
  2. 取得データは全て整数である
  3. 与えられたデータを比較し、値の大きい方を表示する
  4. 値が同じ場合は"EVEN"を表示する

 

内容としてはあらかじめ用意してあるtxtデータを取得し、

最終レコードまで値を取得をしていきそれぞれの処理結果を表示していく

 

もとめていることとしては

  • プログラムって何だろうって知ってもらう
  • 自分で作ったプログラムが正しく動いたときの感動を知ってもらいたい
  • 条件分岐(If Else文)
  • 繰り返し(Do While文)

 

以上のことをやってもらったんですが、

テキストデータを取得して最終レコードまでループする際に

 

-----------------------------------------------------------

'FileSystemObject取得

Set FSO = CreateObject("Scripting.FileSystemObject")

'読み込みファイルオブジェクト作成

Set objText = FSO.OpenTextFile("C:\compare.txt")

'全部読み込み

Dim a,b

 a = objText.ReadLine

 b = Split(b," ")

 Do While(ObjText.AtEndOfLine<>True)

  If(b(0) < b(1)) then

   MsgBox b(1)

  End If

 Loop

-----------------------------------------------------------

 

としてしまい無限ループに入ってしまったそうです(´Д`|||) ドヨーン

自分の用意した説明も悪かったんで反省をしたんですが

上記を実行すると1レコード目のデータは問題なく読み込めるんですが

2レコード目に移るための記述がなくAtEndOfLineを指定しても意味がない

なので実際は

 Do While(ObjText.AtEndOfLine<>True)

  a = objText.ReadLine

  b = Split(b," ")

  If(b(0) < b(1)) then

   MsgBox b(1)

  End If

 Loop

 

としてあげるのが正解

無限ループに入ってしまったら

新人さんは結果として無限ループになり処理を止めれなくなりました

VBSにおいて無限ループを止める際は

  1. Ctrl + Alt + Delete を同時押下します
  2. 画面が変化するのでタスクマネ-ジャーの起動を選択します
  3. タブメニューからプロセスを選択します
  4. イメージ名からwscript.exeを選択しプロセスの終了を選択することで止まります

職場ではインターネットが使えず止め方が分からず一旦ログアウトして

プログラムを終了してしまいましたが、上記のような終了があることを学べました

φ(^∇^ ) メモナノラ