これからの季節に親子でハイキング! >>

UWSCのSELECT文について教えてください。

今IFB-ELSE-ENDIFを使って行っている条件文を
SELECT文でスマートに書き直しできますか?

たとえば
ifb cnt < 3 then
print "3未満"
elseif cnt >=3 and cnt <= 5 then
print "3~5"
else
print "6以上"
endif
みたいな範囲を持った条件式なんですが、
select文の範囲指定みたいな記述方法が分かりません。

select
case cnt < 3
print "3未満"
case cnt >=3 and cnt <= 5
print "3~5"
default
print "6以上"
endif
の様に書いても上手く動きません。

select文はこういう使い方はできないんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

dim num[10]


for i=0 to length(num)-1; num[i]=i; next
cnt = SLCTBOX(SLCT_BTN or SLCT_STR, 0, "番号を選んでね。",num)
select TRUE
  case cnt < 3
    print "3未満"
  case cnt >=3 and cnt <= 5
    print "3~5"
  default
    print "6以上"
selend
sleep(1)
    • good
    • 0
この回答へのお礼

selectの後にTRUEを記述するんですね。
HELPについてる例にはSLCTBOXとか式のところに書いてあるので、
理解できませんでした。

ありがとうございました

お礼日時:2008/12/14 22:05

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUWSC SLCTBOXもしくはSELECTについて

頻繁に誤動作が起き、原因が分からないので質問させてもらいます。

以下のような形でSLCTBOXを使った関数を使ってます。

==サンプル==

THREAD キー入力()

//メインループ
While true  //テスト用
 Print a*10 +"秒経過"
 Sleep(10)
 a=a+1
wend

 //== ★関数定義★ ==//
PROCEDURE キー入力()
 while true
  Ifb GetKeyState(VK_NUMPAD0)
   Print "セレクト()へ"
   セレクト()
  Endif
  Sleep(0.1)
 wend
FEND


PROCEDURE セレクト() 
 SELECT SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージ0", "AAA", "BBB", "CCC" )

 CASE SLCT_1
   Print "AAA を選択しました"
  変数1 = SLCTBOX(SLCT_BTN +SLCT_NUM, 0, 300,300, "表示メッセージA", "A0", "A1")

 CASE SLCT_2
  Print "BBB を選択しました"
  SELECT SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージB", "B0", "B1", "B2" )
  CASE SLCT_1
   変数2=100
  CASE SLCT_2
   変数2=180
  CASE SLCT_3
   変数2= INPUT("変数2を入力", 変数2, false)
  DEFAULT
   Print "セレクトBBB無効です"
   Sleep(1)
  SELEND

 CASE SLCT_3
  Print "CCC を選択しました"
  変数3 = SLCTBOX(SLCT_BTN +SLCT_STR, 0, 300,300,  "表示メッセージC", "C0", "C1", "C2" ,"C3", "C4")

 DEFAULT
  Print "セレクト0無効です"
  Sleep(1)

 SELEND
FEND

== ここまでサンプル ==

※上記サンプルも実際使っているものも単体で動かすと誤動作は起きません。

◆起こる誤動作
サンプル最初の
SLCTBOX(SLCT_BTN, 0, 300,300, "表示メッセージ0", "AAA", "BBB", "CCC" )
を例にすると、
・指定座標に表示されない
指定座標の(300,300)ではなく、無指定の時と同様の位置にボックスが表示される。
・要素(項目がズレる)
"表示メッセージ0"の位置に”AAA”と表示されて、ボタン(項目)が”BBB”と”CCC”の二つになる。
・選択した項目以外へ分岐する
ボックス表示が正常なときでも、"AAA"を選択したときに「CASE SLCT_1」ではなく別のCASEに飛ぶことがある。(主にPrintで確認)

考えられる原因としてどのようなものがあるでしょうか?
正常な動作が続くときもあれば、セレクト()の呼び出し一回目から誤動作という場合もあります。

単体で正常動作する以上記載した部分以外が原因だとは思うのですが全ては書けないので
SELECT や SLCTBOX の正常動作の妨げになる例だけでも良いので
改善のアドバイスお願いします。

補足)念のため使用してるプログラム全体のその他の情報
・プログラム内で関数セレクト()の外でSLCTBOXを使ってる箇所はありません。
・THREADはもう一つ、複数の変数の状態をFUKIDASIで表示するもの
・変数と関数の定義は定義用ファイルにまとめてCALLで呼び出している。
・UWSファイルは全体で1000行以下25KB以下

頻繁に誤動作が起き、原因が分からないので質問させてもらいます。

以下のような形でSLCTBOXを使った関数を使ってます。

==サンプル==

THREAD キー入力()

//メインループ
While true  //テスト用
 Print a*10 +"秒経過"
 Sleep(10)
 a=a+1
wend

 //== ★関数定義★ ==//
PROCEDURE キー入力()
 while true
  Ifb GetKeyState(VK_NUMPAD0)
   Print "セレクト()へ"
   セレクト()
  Endif
  Sleep(0.1)
 wend
FEND


PROCEDURE セレクト() 
...続きを読む

Aベストアンサー

サンプルでは再現しないので、確証が持てません。
出来たらUWSCのバージョンを追記してください
また、初回は発生する/しない、とか各処理の状態を示すフラグや変数を定義して
どの状態の時に起きやすいか など詳細が分かれば何が原因か見えてくると思います。


現情報だけで考えられるものとすれば
・UWSC自体にバグがある
・スレッドが終了せずに残ったままで影響している
・もう1つのスレッドで参照しているつもりの変数がデッドロックしている?
・SLCTBOXのタイムアウトが0なので、キー入力関数内の他の処理が変なところでスタックしている?
・定義を重複してCallしていていないか?

1000行以下といってもスレッド複数走らせたりフォーム使用したりすると
重いマクロになったりもしますので、サンプルからではこれくらいしかわかりませんでした。


GetKeyStateを使ったミスでありがちなのが、入力を再受付するまでの時間が短すぎて
1回押したつもりが複数回受け付けてしまっている・・とかありますが
セレクト()で処理待ちするので考えにくいですし。

本件の根本解決になりませんが、メッセージの送受信方式で他の処理呼び出す形にしてみてはどうでしょう。

サンプルでは再現しないので、確証が持てません。
出来たらUWSCのバージョンを追記してください
また、初回は発生する/しない、とか各処理の状態を示すフラグや変数を定義して
どの状態の時に起きやすいか など詳細が分かれば何が原因か見えてくると思います。


現情報だけで考えられるものとすれば
・UWSC自体にバグがある
・スレッドが終了せずに残ったままで影響している
・もう1つのスレッドで参照しているつもりの変数がデッドロックしている?
・SLCTBOXのタイムアウトが0なので、キー入力関数内の他の処...続きを読む

QUWSCでIEが開いているか判定する方法

UWSCでIEを操作しています。

しかし、IEは相手側のネットの環境によって動きが左右される場合があり
時々、IEが閉じてしまいます。

そこで、IEが閉じてしまったらUWSCのプログラムをストップするような処理を作りたいのですが、
そのような命令は存在するのでしょうか?

例えば、 IEが起動していればTRUE、起動していなければFALSEを返すような処理があれば良いのですが、もし知っている方がいましたらアドバイスを頂けるとうれしいです。

よろしくお願いします。

Aベストアンサー

こんにちわ

For i = 0 To GetAllWin() - 1
Ifb Status(ALL_WIN_ID[i], ST_CLASS) = "IEFrame" then
  msgbox("BBBBBBBB") // IEが有るときの処理
  exitexit
endif
Next
msgbox("AAAAAAAA") // IEが無いときの処理
exitexit


WIN XP, IE6での処理なので、動くかどうか試してください。

QUWSCを使用して、ドロップダウンリストを操作

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリストがあり、それぞれに決定ボタンがあります。

<td class="b2"align="center">

<select name=mode>
<option value="aaa">あああ
<option value="bbb">いいい
<option value="ccc">ううう
<option value="ddd">えええ
<option value="eee">おおお
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

<select name=mode>
<option value="aaa">かかか
<option value="bbb">ききき
<option value="ccc">くく
<option value="ddd">けけ
<option value="eee">こここ
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリス...続きを読む

Aベストアンサー

IESetDataを使うと良いかもしれません。

IESetData(IE,"bbb","mode")
IESETDATA(IE, True, "決定")

とかすれば、いけるかも。

http://e-dcz.com/~uwsc/iesetdata.htm
http://www.uwsc.info/sample.html#n33

有料版使えばIE用記録ツールがあるので便利。
http://www.uwsc.info/download.html

QUWSCでテキストファイルを開いて表示したい

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでした。

その一行しか書いてないのがダメな原因なのでしょうか?

「C:\Users\user01\Desktop\uwsc\test01.txt」は
コマンドプロンプトやファイルを指定して実行、からは開けます。

アンチウィルスソフトは一時的にOFFにしてもだめでした。

OS(XPSP3)を再インストールして、ネットにつながず、
セキュリティソフトなしでやってみてもダメでした。

多分、自分が何か勘違いをしているのだと思いますが、
FOPEN関数は、ファイルを開いて表示するものだと思っていましたが
違うのでしょうか?

Webで検索すると、他のみなさんは開いているようなのですが・・・

ファイルのIDを取得するだけではだめで、ほかの記述も必要ということなのでしょうか?

ゆくゆくはExcelのファイルを普通に開きたいのです。
COMで開くような事例もあったので、それは試してみましたが、
Office2003のセキュリティの「中」設定が無視されて
開いてしまい、Auto_Openマクロも無視されたりで、
使いたくありません。
「中」設定のまま、「マクロを実行させるダイアログ」を
表示してExcelファイルを開きたいのです。

でもその前にということで、テキストファイルを試しにと思ったのですが
テキストファイルすら開けません。


何度かWeb検索しても一向に手がかりがつかめません。

大変すみませんが、どなたがご存知の方がいらっしゃったら、
よろしくご指導くださいませ。

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでし...続きを読む

Aベストアンサー

fopenはuwscでファイルを開くための命令です。

> fid=FOPEN("test01.txt",F_READ or F_WRITE)

エラー値が返ってないのなら、

fline=FGET(fid, 1)

とかでflineに1行目が取得できるので、

print fline

なんかで表示できるはず。

--
> UWSCでテキストファイルやExcelファイルを開きたいのですが、

メモ帳(notepad.exe)やExcelでファイルを開くためには、例えば、

exec("C:\Windows\notepad.exe test01.txt")

などとして、メモ帳をアプリとして起動し、同時に引数を指定します。

QUWSCの基本的な文字列操作

該当命令が、見つからず困っております。
9桁の文字列を先頭から、3桁ずつに分割したいのですが
お解かりになる方教えていただけませんでしょうか?

例、
DATA="123456789"
処理後
A="123"
b="456"
c="789"

Aベストアンサー

ヘルプより引用

----------
// 文字列コピー
戻値 = COPY( 文字列, 開始位置, コピー文字数 )
引数
  文字列: コピー元の文字列
  開始位置: コピーすべき文字列の開始位置 (1から)
  コピー文字数: コピーすべき文字数
戻値
  結果の文字列
----------

QUWSC 画像判定と条件分岐について

UWSC 画像判定と条件分岐について質問です

1.画像Aがあるか判定する
2.画像Aがあれば、画像B又は画像Cをクリックする
3.画像Aなければ、sleepで少し秒数を開けてから1からやり直す
以降繰り返し

というプログラムを書きたいのですが、画面上の画像を判定して画像AがあるときだけB,Cをクリック
させる方法がよくわかりません。
加えてBを判定してクリック、Cを判定してクリックというのは
ifb部分を二つ使い別々に扱えば書けるのですが、 elseなど用いて一ブロックのifb-endifでの
表し方もよくわからないので合わせてそちらも教えていただきたいです

御回答よろしくお願いします

Aベストアンサー

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb ChkImg("画像A")
    Sleep(適当な待ち時間を入れる。待つ必要がなければこのSleep自体が不要)
    Ifb ChkImg("画像B")
      //画像Bをクリック。ただし見つけた座標より若干内側にしないと空振りの
      //危険があるので、+2している。この値は適当に調整のこと
      Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
      //この後続けて画像Cもチェックしたい場合は、次のContinueを消す
      Continue
    EndIf
    If ChkImg("画像C") Then Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
  EndIf
  Sleep(適当な待ち時間を入れる。)
Wend

ちなみにIFB~ELSE~ENDIFの書き方は、特に悩むことはなくて…

Ifb 条件
  条件成立時の処理
Else
  条件不成立時の処理
EndIf

の形になります。Elseの後でさらに条件判定をしたければ、ElseIfとするか、あるいはElseの下にさらにIfあるいはIfbを書きます。次のような感じで。

Ifb 条件A
  条件A成立時の処理
Else
  Ifb 条件A不成立時のさらなる条件B
    条件B成立時の処理
  EndIf
EndIf

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb Ch...続きを読む

Q(UWSC) 「#32770」の意味わかりますか?

(UWSC)で、他人が作ったプログラムを見ています。

その中で、
GETID("タイトルの名前","#32770")
となっている箇所があります。
この"#32770"の意味がわかる方いらっしゃいますか?

教えてください。

Aベストアンサー

> この"#32770"の意味

ダイアログのクラス名

QUWSCの待機コマンドについて

現在UWSCでソフトのインストール作業を自動化する必要があります。

問題になっているのが、インストールが終了するまで待機する、というコマンドがあるのかないのかが分かりません。

何秒間待機というのは分かるのですが、例えば画面が完全に開くまで待機、とかインストールが完了した時に作業を続行する、などのコマンドが必要です。

どなたかお力をお貸し下さい。ある作業が終了するまで待機するというコマンドです。以上、よろしくお願いいたします。

Aベストアンサー

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察知し動作させる
事前にウィンドウIDを取得しておくこと。
CLKITEMは処理できなかった場合(下記ケースではボタンが押せなかったり見つからなかった場合)戻り値にFALSE
が返ってきます。

bFlg = 0
// bFlgが1になるまでループ
WHILE bFlg = 1
bFlg = CLKITEM(hogeID,"終了",CLK_BTN)
WEND



簡単な例を2つほど挙げて見ましたが、おそらくこれで解決できるでしょう。

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察...続きを読む

QUWSCのIE操作でプルダウンを選択する方法

UWSCのIE操作でプルダウンを選択する方法がわからなく、
記録機能を使い試してみたのですがうまくいきませんでした。

どなたか教えていただけないでしょうか。
よろしくお願いします。


IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = true

IE.navigate("http://sportsnavi.yahoo.co.jp/")
waiting(IE)

IELINK(IE,"Jリーグ")
waiting(IE)

IELINK(IE,"日程&結果",2)
waiting(IE)


//ここがうまく行かないところです。記録で出てきたものをそのまま使用
CLKITEM(IE, "第22節", CLK_ACC)


//読み込み待ち
Procedure waiting(IE)
while IE.busy or IE.readyState<>4
Sleep(0.5)
wend
Fend

Aベストアンサー

 CLKITEM(IE, "第22節", CLK_ACC)

 IE.document.getElementsByName("select").item[2].value="index_2nd.html#j22"
 IE.document.getElementsByName("select").item[2].fireEvent("OnChange")
に変更すればいけると思います。

しかし、そもそも
 IE.navigate("http://sportsnavi.yahoo.co.jp/")

 IE.navigate("http://sportsnavi.yahoo.co.jp/soccer/jleague/2012/data/result/index_2nd.html#j22")
に変更すれば目的は達成されるような気がするのですが……
(来年度はたぶん2012が2013になるだけです。)

あと、IEの操作を記録したいのであれば、Pro版を購入してRecIEを使用したほうがいいと思います。

QUWSCでエラー発生時の対処法について

UWSCで、エラーが発生したときに、特定の行、または指定されたファンクションへ飛ばしたいのですが、その方法はありますでしょうか?VBでいうOnErrorステートメントと同じ役割ができるものを探しています。

UWSCはエラーがでると、強制終了されてしまい、その後のプログラムの実行が止まってしまいますので、これを回避するためです。

当方、プログラムは素人ではありませんが、UWSCは始めてです。もし分かる方がいましたら、教えていただけませんでしょうか?

Aベストアンサー

こんにちは。

>UWSCはエラーがでると、強制終了されてしまい、その後のプログラムの実行が止まってしまいますので、これを回避するためです。

ANo.1 記載の通り、try ~ except ~ endtry で except 句に、実行時エラーが発生した時の処理を入れておくのがよいと思います。実行時エラーの種類によっては、もはやスクリプトエンジンの処理を中断する類のものと判断される場合があります。その場合はエラーをキャッチできません。

それも救済したい場合は、該当ロジックを別ファイル A.uws に切り出して、EXEC で UWSC.exe A.uws と起動させる。A.uws が異常終了しても EXEC した側の UWSC.exe は影響を受けない。そんな風に影響範囲を局所化することも可能ではあります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング