[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/19 04:01 / Filesize : 303 KB / Number-of Response : 1078
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

自動化ツールUWSC使いよ集まれ16



1 名前:名無しさん@お腹いっぱい。 [2015/11/11(水) 13:45:28.80 ID:+oPzgSay0.net]
Windowsの作業を自動化するツール
フリーソフト版とシェアウェア版の2種類がある
ttp://www.uwsc.info/download.html

●UWSC 掲示板(※作成依頼掲示版ではありません)
 質問の際には自力で作ったスクリプトを晒すか、具体的な解らない場所を提示すること
 上級者が常駐、たまに作者も現れるため過去ログには有益情報の宝庫
www3.rocketbbs.com/13/bbs.cgi?id=umiumi
www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=past

●UWSC - Wikipedia
ja.wikipedia.org/wiki/UWSC

●使い方・基礎解説学習サイト
uwsc.g.hatena.ne.jp/cx20/20100131/1264938584
www.confrage.com/uwsc/
necro.jp/dev/uwsc/
park14.wakwak.com/~simizu/uwsc/fruwsc.html
canal22.org/
big.tm.land.to/handbook/uwsc.htm
www.game-rev.com/review/gameut/uwsc.html

●スクリプトテンプレサイト
izagne.com/uwsc/
scripts.web.fc2.com/
www.nagomi-jp.net/~liners/
nem.symphonic-net.com/uwsct/0610uwsct.html
siromasa.digi2.jp/uwsc/
iriyak.adam.ne.jp/uwsc.html

前スレ 自動化ツールUWSC使いよ集まれ15
anago.2ch.net/test/read.cgi/software/1436671958/

451 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 15:04:22.93 ID:W6132sy20.net]
戻り値が配列になるものを使う場合ってあらかじめ宣言するときは
配列だって明示的に(?)定義しないのね

エラー
dim a[2]
dim b[3][2]
dim i
a = split("a b c")
for i = 0 to 3
b[i] = split("a b c")
next

dim a
dim b[3]
で動く

functionの配列戻しが上手くいかないでしばらく頭抱えてた

452 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 15:20:17.78 ID:cL2tI1rC0.net]
Split()の返値はSafeArrayだから定義するならSafeArray()じゃない?

453 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 19:30:07.95 ID:SGnnlRSc0.net]
>>424
a = split("a b c")
for i = 0 to resize(a)
print a[i]
next

これだけでもうごくみたいだけど・・・どうなの?

454 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 20:05:32.38 ID:W6132sy20.net]
普段はEXPLICITしてるから

dim a[] = split("a b c")
とかって書いて悩んでた
SafeArrayを定義するときは配列じゃないなんてきいてないよままん

まあ正確には二次元だったのもあって
dim a[3][5]
for i = 0 to n
 a[i][] = 関数(i) //←ここ

455 名前:
next
の書き方がわかんなかった
dim a[3]
にすれば通るのねってことで土日が終わった
[]
[ここ壊れてます]

456 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 20:16:13.80 ID:rJZHZ5Hk0.net]
そうですか

457 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 20:28:40.93 ID:cL2tI1rC0.net]
>>427
>戻値 = SPLIT( 文字列, [区切文字列, 空文字処理フラグ, 数値処理フラグ] )
>戻値
> 作成された一次元配列(SAFEARRAY型)

返値がSafeArrayなのにDIM定義の配列で受けるのがおかしいだろって
遠回しに言ったつもりだったんだけど・・・

458 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 20:48:30.79 ID:W6132sy20.net]
SAFEARRAYとはなんぞやDIMとの違いはって
HELPみてもさっぱり載ってないもんでよくわかんなかったのです

戻値 = SAFEARRAY( [下限, 上限])
↑の定義はどこでするのん?みたいな

459 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 21:06:58.46 ID:RkOVI4vxn]
気になって見ていたら本当に載ってなくてワロタ



460 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 21:04:45.22 ID:mevx1vWE0.net]
SAFEARRAYはメモリ内での並び順が保証されている配列で宣言したければ普通の変数としてDIMしたら良いだけの話

461 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 22:04:46.46 ID:ymVVdFl90.net]
リファレンス見たり、マクロ記録してコピペして作るクソ汚いコードなら簡単なやりたい事作れるようになってきたんだけど、スッキリした綺麗なコーティングとかは何を勉強すれば出来るようになるの?

462 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/01/31(日) 22:28:54.39 ID:h2MIJWcH0.net]
他人の綺麗なコードを見て弄って真似をする

463 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 00:06:56.18 ID:ODrpB13q0.net]
あとこれ
X = CALCARRAY( split("1 2 3"),CALC_ADD)
が駄目で
a = split("1 2 3")
X = CALCARRAY(a,CALC_ADD)
でないと動かないのもよく分からないです
配列なのかなんなのか

ヘルプ読んでも
<変数>
 変数に型はありません(SAFEARRAY型がないとは言ってない)
って感じでわけわかめ

464 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 00:37:00.65 ID:+rnmEAjm0.net]
変数の名前で後になって困ることが多い

・適当に名づけて似たような変数名があふれてごっちゃに
・名前を決めかねて、後から読むと意味の読み取れない変数名に
・コードをなおしていくうち、当初の意図とは違うコードになり意味が合わなくなる
・コピペしてきたコードなので意味が合わなくなる

こういうのを最初から見越してきちんと決めていくと良いコードになるのかなあ
でも、変数使うときって、思考の中心は「こういうコードを作ろう」だから、
変数名に気を取られると「こういうコードを作ろう」の中身を忘れちゃったりするんだよな

465 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 00:42:55.69 ID:baaBe9/W0.net]
せっかく日本語使えるんだから日本語でつけちゃえばいい

466 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 01:03:00.84 ID:VsiPttLF0.net]
単純にスコープの管理が甘いと思う
広いスコープの変数なら「何を保持しているのか」が中心にした方が良い

UWSCはクラスのインスタンスを作れないから
オブジェクト指向的に変数を管理し難いのが難点だよね

それでも自分はある程度の規模のスクリプトならクラスを造って変数を管理するけれどね

467 名前:429 mailto:sage [2016/02/01(月) 01:45:10.84 ID:+rnmEAjm0.net]
>>438
そういうものがあるのか
関数まとめて別ファイルに入れてこっちで呼び出して……みたいなことやってるからちょうど良さそう
オブジェクト指向と言う名前は聞いたことある、程度の初心者だけど、いい機会だから勉強してみるよ
ありがとう

468 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 02:55:35.27 ID:BoGYQ2nB0.net]
名前が決まらないのはその目的(責務)が明確になってないのが原因でもある

469 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 08:25:33.84 ID:8RvGbPw20.net]
未熟な自分では考えてもできなかったのでご教授ください

t=



470 名前:GETTIME()
While True
ifb CHKIMG("A.bmp")
sleep(1.0)
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
t=GETTIME()
else
(中略)
ifb CHKIMG("H.bmp")
sleep(1.0)
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
t=GETTIME()
else
ifb ((GETTIME()-t)>3) Then
BTN(LEFT,CLICK,100,100,0.5)
t=GETTIME()
endif
(中略)
endif
sleep(0.1)
WEND

これらを実行する時
ifb CHKIMG("A.bmp")
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
t=GETTIME()
に限り「画像Xがある時のみ行う」としたいのです
全てに対してとするならできたのですが1つ目文に対してのみというのができなくて詰まってしまいました
[]
[ここ壊れてます]

471 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 09:04:45.92 ID:g7iI5XSU0.net]
if X and A

elseif !A

endif

472 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 09:33:11.94 ID:pZZgy3PS0.net]
ifb CHKIMG("X.bmp") AND CHKIMG("A.bmp")

こんだけのことやんけ

473 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 15:18:36.89 ID:hzvm75kL0.net]
option shortcircuit付けてな

474 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 16:00:59.79 ID:Th0k4/oZ0.net]
本体のホットキーを使わずに一時停止をやりたいんですけど
こんな感じの関数を随所随所で呼び出すしかないんでしょうか?


PROCEDURE ESC_PAUSE
 IF !GETKEYSTATE(VK_ESC) then exit
 SLEEP(0.1)
 REPEAT
  SLEEP(0.1)
 UNTIL GETKEYSTATE(VK_ESC)
 SLEEP(0.1)
FEND

475 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 16:12:58.29 ID:hzvm75kL0.net]
使わずにっていうのは、本体の一時停止をやりたくないのか
それとも本体に設定されたホットキー以外のキーで一時停止したいのか
どっち?

476 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 17:12:39.88 ID:Th0k4/oZ0.net]
本体の一時停止ホットキーは、2つ以上のキーで面倒なのと
スクリプト内でやれば、好みの条件に出来るかなと思いまして

たとえば、マウスカーソルの位置とか

PROCEDURE MOUSE_PAUSE
 IF G_MOUSE_X<1000 then exit
 Repeat
  SLEEP(0.1)
 Until G_MOUSE_X<1000
FEND

477 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 17:20:38.17 ID:Th0k4/oZ0.net]
あと、本体の一時停止ホットキーは
本体から動かしてるスクリプトには有効ですが
ランチャー等から起動した別のスクリプトには無効みたいです

478 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 17:38:04.47 ID:PbXPJngC0.net]
>>447
停止処理はSETHOTKEYで呼び出し 停止処理からの復帰は停止処理内でGETKEYSTATE

dim i
sethotkey(VK_A,,"proc_Pause")

while true
i= i+1
fukidasi(i)
sleep(0.5)
wend

procedure proc_Pause()
repeat
sleep(0.5)
until GETKEYSTATE(VK_ESC)
fend

aで処理中断 escで中断からの復帰 中断復帰後は中断時の処理から続いてる事も確認できる
sethotkeyでコードの頭に登録すればそれ以降の処理内で一々中断用のコード書かなくてもいいから保守性も高いよ

479 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 17:41:43.95 ID:hzvm75kL0.net]
UIが無い別プロセスのスクリプトにも有効なのは有効だよ。
ただ、2つ以上のスクリプトが動作してると、キーが消費されちゃうので
連打するとか押しっぱなしにするとかしないと効かない。
あーでも一時停止は連打はダメか。
停止のホットキーは押しっぱなしで全プロセス停止に効く。

本体を一時停止してもいいなら、SETHOTKEYで任意のキーを押した時に
UWSC本体に一時停止のホットキーを送るってのもありかと。

あと停止はループさせるよりMSGBOXとか出す方が便利とは思うが。



480 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/01(月) 21:11:01.64 ID:Th0k4/oZ0.net]
レス、ありがとうございます

>>449
おぉー、ホットキーを設定するやり方ですか
仮想キー限定のようですが、これはいい方法ですね

>>450
MSGBOXを使うと、解除がちょっと面倒なんで・・・

あと、UWSC本体を起動せず
下記スクリプトをショートカットから実行した場合
一時停止ホットキーは機能しませんでした

for j=1 to 10000
 fukidasi(j)
 SLEEP(0.5)
next

481 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/02(火) 07:05:55.13 ID:Mf47p9PS0.net]
>>451
ttp://uproda.2ch-library.com/916238SO2/lib916238.uws
俺はこんな感じでやってる
実際に使うときはウィンドウ指定してアクティブ時にキーチェック

482 名前:オてる []
[ここ壊れてます]

483 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 13:22:20.05 ID:bYNIn2Du0.net]
Google Speech API と組み合わせて音声入力させるものって作れるかなあ?

484 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 14:03:46.64 ID:fyQC3oxA0.net]
すみません、UWSCってこのスレで初めて知ったんですが、業務で利用されてる方いらっしゃいますか?

485 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 15:21:36.98 ID:ja3vwQ+v0.net]
いますよー

486 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 17:34:50.27 ID:cVw67MCx0.net]
詰まったので質問させて下さい。

現在BluestacksとUWSCを使用して自動マクロを運用しています。
また、離籍時にteamviewerを使用してリモートで操作もしています。

相対座標を使用し、通常は問題なく使えるのですが
teamviewer使用時が問題で、セッション終わり毎にダイアログが発生し、そのせいでループが抜けなくなり手間が増えている状態です。

質問なのですが

id=GETID("Bluestacks App Player","WindowsForms10.Window.")
MOUSEORG(id, MORG_DIRECT)

上記のように指定しても画像検索はできますが座標がおかしくなってまともに動きません。
座標を直接指定しても、画像の場所に直接クリックにしても常に左上の端のみをクリックする状態となっています。

どのように指定をすればいいでしょうか?

487 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 18:42:53.73 ID:Ml8C21Ff0.net]
mouseorgは通用するアプリとしないものがあると何度いわれたらry

488 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 19:06:31.07 ID:zrOVrXZR0.net]
>>456
teamviewer昨日導入したわ。タイムリーな。ツムツムかな?
俺はダイアログ消す方で解消したわ。
UWSCのスケジュールの指定ウィンドウが現れた時で、ダイアログを消すスクリプト登録したらいい感じ。

489 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 19:21:35.52 ID:cVw67MCx0.net]
>>457
ありがとうございます。
自分では通用するのかどうかがわからなかったのと、画像検索はできたので方法があるのかと思い聞いてみました。
申し訳ありませんでした。

>>458
そうだったんですね。
俺は別のゲームです。
プログラミング初心者の為勉強しながらになりますが頑張って組んでみます。
ありがとうございます。



490 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 19:25:47.32 ID:I350w/WA0.net]
>>456
MORG_DIRECTをMORG_CLIENT変える

491 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 21:48:42.30 ID:DIbZWkUk0.net]
BTN(LEFT,CLICK,1200,150,150)

BTN(LEFT,CLICK,1000,150,150)
どちらかランダムで一つクリックさせたい場合ってどうやればいいですか?

492 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 21:57:51.63 ID:EqtNr8zt0.net]
ランダムで分岐させたら良い

493 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 22:23:24.65 ID:4BmdWrRw0.net]
>>461
BTN(LEFT,CLICK,1000+RANDOM(2)*200,150,150)

494 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 23:36:39.04 ID:bosOw8Gy0.net]
整数化しないとひどいことになりそう

495 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/04(木) 23:42:01.07 ID:EqtNr8zt0.net]
個人的には速度や短さを競うコードコンテスト以外では
結果的にやりたいことになるコードではなく
やりたいことをそのままコードにした方が良いと考えるかな

メンテで正しく動作しなくなる種になるからね

496 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 00:29:23.88 ID:Gg6PibGB0.net]
>>460
今ってbluestacksをバックグラウンドで動かせるようになったの?

497 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 02:27:59.12 ID:AORidpJX0.net]
>>463
ありがとうございます

498 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 02:37:46.36 ID:/HWKBYw70.net]
プログラミングのプの字も知らないけどUWSCで初挑戦中
画像認識でAの画像が出るまでBの操作を繰り返す
Aが出たらその画像をクリックしてCの操作へ
これはrepeat-untilでいいですか?

499 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 04:19:16.20 ID:i6SfBH8K0.net]
いいよ(´・ω・`)
とにかく自分で書いて試してみるのが上達の近道



500 名前:だよ

あとUWSCの本があるからブックオフで見かけたら買うといいよ
[]
[ここ壊れてます]

501 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 06:07:19.13 ID:/HWKBYw70.net]
ありがとうございます
色々調べ回って393のような形で処理に成功しました
これを順不同にするにはどうしたらいいでしょうか
a,b,cの画像を出てきた順にクリックしたいとして

repeat
sleep(0.2)
until chkimg("a.bmp")=true or chking("b.bmp")=true or chking("c.bmp")
btn(left,click,g_img_x,g_img_y)

これを3つ羅列するとできると思うんですが
長ったらしくなるのでこれをスマートに収めるにはfor〜nextで挟めば大丈夫でしょうか

502 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 09:15:41.63 ID:YVt32lCs0.net]
ツムツムはMORG_DIRECT使えますか?

503 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 09:18:42.14 ID:AKW1xg3y0.net]
>>460
ありがとうございます。
試してみましたが、バックグラウンドで動くわけではないのですね。
リモートする際はchromeのリモートデスクトップ使用でダイアログに邪魔される事もなくなりましたのでこのまま使用していきます。

504 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 12:28:03.94 ID:/waBKm5O0.net]
>>470
それ一つで動作するが
OPTION SHORTCIRCUITを設定しない標準状態だと
g_img_x,g_img_yの中にchking("c.bmp")の結果しか入らないので
これを設定する

505 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/05(金) 18:09:16.28 ID:YVt32lCs0.net]
使えませんでした

506 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 13:49:52.63 ID:E2a0obR10.net]
>>470
散々既出だけど、画像があればクリックしてTRUEを返すCLKIMG関数を自作する。
while true
  clkimg(

507 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 13:57:39.57 ID:E2a0obR10.net]
なんかカキコが壊れた。
clickImage uwsc でググると過去スレに自作例が出てくるな。

while true
  ifb clickImage("1.bmp") then
    //1のクリックに成功した時の処理
  endif
  ifb clickImage("2.bmp") then
    //2のクリックに成功した時の処理
  endif
  ifb clickImage("3.bmp") then
    //3のクリックに成功した時の処理
  endif
wend
ごく基本的な構造化なのでまだ早いとかやめてね…

508 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 14:00:17.77 ID:E2a0obR10.net]
クリック後に個別の処理が不要なら clickImage("1.bmp"); clickImage("2.bmp"); clickImage("3.bmp") で済んじゃう

509 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 21:35:39.00 ID:4Jvgc2PX0.net]
かなり初歩的な質問なのですが調べてもあまり分からなかったので質問させて頂きます。
UWSCでログファイルが更新され続ける拡張子がtxtなどのファイルを監視し、目的のログが現れた場合
キーを送信 ってできますでしょうか?
やり方を教えて頂きたいです。



510 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 22:15:37.28 ID:k3CjFpd40.net]
・日本語をきちんと使えるようにする
・UWSCを勉強する
たったこれだけで実現できるようになるよ
あとは君の努力次第だから頑張ってね

511 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 22:35:58.37 ID:0QAMOn/70.net]
シェアウェア版って結構高いねそれでも業務に使える?一台に一ライセンス必要みたいだけど

512 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 22:47:44.53 ID:sPS5RQrH0.net]
>>480
何度もバカなの?

513 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/06(土) 22:57:49.59 ID:2YduAXx90.net]
>>478
質問がごちゃごちゃし過ぎで、丸投げしたいようにしか見えない

どのように監視できないのか
どのようにログの検索ができないのか
どのようにキー送信ができないのか

514 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 00:40:38.55 ID:puxzTe8g0.net]
>>456
これに便乗なんだけど
MORG_DIRECTで動作するAndroidのエミュレータってありますか?

515 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 06:08:59.16 ID:I92VPPhw0.net]
uwscって自由すぎて逆に戸惑うことが多くね?

TOTAL = MYCALC(300,400)
//計算結果を出力
PRINT TOTAL
FUNCTION MYCALC(VAL1, VAL2)
ADD = VAL1 + VAL2
RESULT = ADD
FEND

-------------------------------------------------
PRINT MYCALC(300,400)
FUNCTION MYCALC(VAL1, VAL2)
ADD = VAL1 + VAL2
RESULT = ADD
FEND

PRINT文にFUNCUTION関数直接書いても出力されるんだな

516 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 06:13:42.80 ID:mZHgAHcI0.net]
関数の引数に関数を入れるのは普通
出来ない言語の方が珍しい

517 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 06:14:43.21 ID:oQyphb55 ]
[ここ壊れてます]

518 名前:0.net mailto: >>481
そう、パかなの。一台に六千円てことは百台で六十万てことでしょ?
exe化したらライセンスフリーってことはexe化したもなのなら配布自由ってことか、配布したPC全部にライセンスいるのかの思ったよ。やっぱり馬鹿だったんだな俺
[]
[ここ壊れてます]

519 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 07:45:41.55 ID:JTReqb1J0.net]
気づけてよかったね



520 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 07:48:35.49 ID:TPGZWfB40.net]
今までで割引キャンペーンとかってやったことある?
やってくれれば買うんだけどな

521 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 12:25:34.39 ID:DbLS0yGv0.net]
関数の引数に関数を入れる、が関数ポインタとかラムダ式、リスナクラスの話に聞こえてちょっとビックリしたw

522 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 12:30:27.93 ID:UmG8NUOx0.net]
あっしには何を言ってるのかさっぱり

523 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 15:28:50.99 ID:cJXx45gX0.net]
>>487
気付かせてくれてありがとう

524 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 19:18:51.61 ID:I92VPPhw0.net]
>>485
そうなんだ、知らなかった
教本みたいなサイトって丁寧に関数書くから
他人のコード見た時に「なんだこれ!」ってなってびっくりしたわ

ついでに聞きたいんだけどさ
---------------------------------------------------------------
クリック("ボタン")//

FUNCTION クリック(name)
IFB CHKIMG(name + ".bmp",0)
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y)
KBD(VK_a,CLICK)
ENDIF
RESULT
FEND
-------------------------------------------------------------
こうやってCHKIMGの画像ファイル名を関数の引数?を使って好きに変えれるようにしたんだけど
同じようにKBD(VK_a,CLICK)
のVK_aの部分も変えられるように出来ないかね?

525 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 19:28:24.73 ID:mZHgAHcI0.net]
VK_Aとかは定数だから変数に入れたり計算させても大丈夫だよ
例えば VK_A + 1 と VK_B は同じだったりとかね

526 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 19:34:53.46 ID:I92VPPhw0.net]
へー、面白いな
今やってみたら出来たよ
ありがとう

527 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 19:48:58.52 ID:C1KScm550.net]
コードが難読化するからコーディング規約で禁止してるところも多いけどまぁ便利だよね

528 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/07(日) 20:25:57.04 ID:Op3LiiL10.net]
そもそも関数という形はそういう書き方をするためのものだろう。
受け取るだけの変数を毎回経由するなら戻り値なんて機能は不要だし。

529 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 17:06:48.25 ID:T9ZC/Zyz0.net]
質問したい
A処理
└B処理
 └C処理
という感じの処理があって、これをFUNCTION ABC()にまとめた
ABC(Aへの引数) と書くとCまで行くようになっている
だけどA処理を飛ばしてB処理の部分を利用したいこともある
AB飛ばしてC処理をしたい時もある
そういう場合にABC(0,Bへの引数,0)やABC(0,0,Cへの引数)と書けば処理ができるように作ってみたんだけど
これ以外に簡便なやり方って無いかな?

i.imgur.com/TdIP4wY.jpg
------------------------------
FUNCTION ABC(Aへの引数,Bへの引数,Cへの引数,戻り値)
RESULT = False
|IFB !Aへの引数=0
| (A) 処理
|ELSE
| |IFB !Aへの引数=0
| | (B) Aの値を継承して処理
| |ELSE
| | (B') Bへの引数を使って処理
| | |IFB !Aへの引数=0
| | | (C) Bの値を継承して処理
| | |RESULT = True
| | |ELSEIF Aへの引数=0 and !Bへの引数=0
| | | (C') B'の値を継承して処理
| | |RESULT = True
| | |ELSEIF Aへの引数=0 and Bへの引数=0
| | | (C'') Cへの引数を使って処理
| | |RESULT = True
| | |ELSE
| | |RESULT = False
| | |ENDIF
| |ENDIF
|ENDIF
FEND
------------------------------



530 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 17:56:33.03 ID:uvOD7Pon0.net]
引数以外の継承したい変数をPUBLICにするとか参照渡しにして
ABC各処理を別関数に
関数A
関数B
関数C
ABC全部処理する関数ABC
BとCだけ呼ぶ関数BC

みたいに呼べばいいんでないの

531 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 17:58:10.02 ID:657cwzrg0.net]
・継承という用語はプログラミングにおいて特別な意味を持つので別の表現を使うべし。
・サンプルプログラムの条件分岐に既に無意味な部分がありどうしたいのかが読み取れない。
 今の状態だと

532 名前:7,11-12行目は絶対に実行されない。
・引数第4項が戻り値であるにもかかわらずvar宣言がない、関数内でも使われていない。

実行され得ない部分を削って最適化するとこんな感じ。やっぱり意図がわからない。

FUNCTION doABC(Aへの引数, Bへの引数, Cへの引数)
  RESULT = False
  IFB !Aへの引数=0
    doA(Aへの引数)
  ELSE
    doB(Bへの引数)
    IFB !Bへの引数=0
      doC(Bへの引数)
    ELSE
      doC(Cへの引数)
    ENDIF
    RESULT = True
  ENDIF
FEND
[]
[ここ壊れてます]

533 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 17:58:53.91 ID:657cwzrg0.net]
要件ベースでまとめると、
(1) Aへの引数のみ指定すると、doA(Aへの引数), doB(Aへの引数), doC(Aへの引数) の順で実行
(2) Bへの引数のみ指定すると、doB(Bへの引数) のみ実行
(3) Cへの引数のみ指定すると、doC(Cへの引数) のみ実行

解1
関数 doA(paramA), doB(paramB), doC(paramC) を定義し、
関数 doABC(paramABC) 内で上記関数を使用する。
(1)はdoABC(Aへの引数) , (2)はdoB(Bへの引数) , (3)はdoC(Cへの引数) を実行する。

解2
各ケースをあくまで一つの関数にまとめ、引数の指定の仕方のみで制御したい場合。
PROCEDURE doABC(Aへの引数, Bへの引数, Cへの引数)
  RESULT = False
  IFB !Aへの引数=0
    doA(Aへの引数); doB(Aへの引数); doC(Aへの引数)
  ELSE
    IFB !Bへの引数=0
      doB(Bへの引数)
    ELSEIF !Cへの引数=0
      doC(Cへの引数)
    ENDIF
  ENDIF
FEND
メリットは特に無い。

534 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 18:43:19.51 ID:T9ZC/Zyz0.net]
>>498-500
ありがとう
>>500
ごめんなさい、勘違いしてた
関数の中に関数入れて呼び出すとエラーになる気がしてたけど違ったみたい
素直に解1の方法でやります

535 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 19:45:49.25 ID:y9zJENvU0.net]
hashtbl lists
lists["あ"] = "a10 a20 a30"
lists["い"] = "b100 b200"
lists["う"] = "c1 c2 c3 c4"

//上記の場合3*2*4=24通りの全組み合わせを出力するprintCombination
//あ=a10, い=b100, う=c1
//・・・
//あ=a30, い=b200, う=c4
printCombination(lists)

procedure printCombination(lists[])
 product = 1
 for key in lists
  product = product * length(split(lists[key]))
 next
 
 for i = 0 to product - 1
  q = i
  hashtbl outHash
  
  for key in lists
   values = split(lists[key])
   r = q mod length(values)
   q = int(q / length(values))
   
   outHash[key] = key + "=" + values[r]
  next
  
  print join(outHash, ", ")
 next
fend

536 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 19:54:28.61 ID:y9zJENvU0.net]
質問です
printCombinationという関数を書いてみたんですが、
もっとスマートな方法ないでしょうか?

やりたいことはコメントに書いてあるとおりです
すべての組み合わせを出力したい(もちろん別の組み合わせでも動くような感じで)

537 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 20:28:28.46 ID:KECwy5hV0.net]
これじゃいかんのか?

DIM ary1[2] = "a10","a20","a30"
DIM ary2[1] = "b100","b200"
DIM ary3[3] = "c1","c2","c3","c4"

for a1 in ary1
for a2 in ary2
  for a3 in ary3
   print a1 + a2 + a3
  next
 next
next

どうしてもハッシュ使いたいなら上の三行で配列宣言したあとにハッシュリストからsplit使って配列にぶっこめばええんちゃうん

538 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 22:06:55.05 ID:7q7uQHpo0.net]
帰宅中に松屋で飯食いながら考えた。

hashtbl lists
lists[

539 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 22:09:05.76 ID:7q7uQHpo0.net]
帰宅中に松屋で飯食いながら考えた。

hashtbl lists
lists["あ"] = "a10 a20 a30"; lists["い"] = "b100 b200"; lists["う"] = "c1 c2 c3 c4"
const SPLT_V = " "; const SPLT_R = "<#CR>"; const SPLT_C = ", "
print structCombinationCSV(lists, 1)

function structCombinationCSV(lists[], cu



540 名前:rLv)
  key = lists[curLv-1, HASH_KEY]
  curRows = split(lists[curLv-1, HASH_VAL], SPLT_V)
  combinationCSV = ""
  ifb curLv >= length(lists) then
    for curIdx=0 to length(curRows)-1
      combinationCSV = combinationCSV + key + "=" + curRows[curIdx] + SPLT_R
    next
  else
    childRows = split(structCombinationCSV(lists, curLv+1), SPLT_R)
    for curIdx=0 to length(curRows)-1
      for childIdx=0 to length(childRows)-1
        combinationCSV = combinationCSV + key + "=" + curRows[curIdx] + SPLT_C + childRows[childIdx] + SPLT_R
      next
    next
  endif
  result = combinationCSV
fend

っしゃぁ!
[]
[ここ壊れてます]

541 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/08(月) 22:29:31.74 ID:kO8wU/DR0.net]
500 Internal Server Error

542 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 00:41:55.44 ID:l/ELWwG70.net]
複雑すぎワロタ

543 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 10:19:05.55 ID:dxLnf7NN0.net]
松屋で飯食いながら仕事ができるタイプか

544 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 12:33:29.38 ID:qpHYw0y/0.net]
すげえレベル高いな

545 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 12:40:47.60 ID:kzjhglVU0.net]
えっ!?あのお客さん…ウチで飯食いながらコーディングしてる!?

546 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 12:47:42.64 ID:XfpXz+/C0.net]
>>504
それだと関数化するとき困るんじゃね?

ary2までしかないときは動かないし
ary4まであってもちゃんと動かない

547 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 17:31:23.26 ID:FV1/KP6n0.net]
>>506 は入れ子になってるくり返しで使われる再帰処理だね。
再帰を終わらす終了条件が最初あって、次にやりたい事ってふうに見ると分かる。

548 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 18:04:46.21 ID:+8zDwgB90.net]
そっか項目数だけじゃなく要素数も変わるのか なら関数化するならこんな感じかな

//配列組み合わせ生成関数 戻り値は配列を返す
FUNCTION fnc_ArryComb(strarry[])
DIM tmpstr[0],tmp //文字列
DIM i,j,k,l,m=0,tmpcount = 1,maxcount = 1,preCount = 1 //整数
CONST cnt_SPLSTR = ","
for i = 0 to LENGTH(strarry) - 1
  maxcount =maxcount * LENGTH(SPLIT(strarry[i],cnt_SPLSTR))
next
resize(tmpstr,maxcount-1) //結果格納用の変数を引数に合わせてリサイズ
m=0;i=0 //未使用再利用変数の初期化
repeat //順列組み合わせの作成
  tmpcount = 1
  for l = m to LENGTH(strarry) - 1
    tmpcount = tmpcount * LENGTH(SPLIT(strarry[l],cnt_SPLSTR))
  next
  for l = 1 to maxcount / tmpcount
    for tmp in SPLIT(strarry[i],",")
      for j = 0 to tmpcount / LENGTH(SPLIT(strarry[i],cnt_SPLSTR)) - 1
        tmpstr[k] = tmpstr[k] + " " + tmp
        k=k+1
      next
    next
  next
  m=m+1;k=0;i=i+1 //カウンターの整理
until i >= LENGTH(strarry)
result = slice(tmpstr,0,maxcount-1)
fend
//関数ここまで

549 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 18:06:08.69 ID:+8zDwgB90.net]
関数Callのサンプルはこんなかんじ

//関数の呼び出し部
hashtbl lists
DIM strarry[0]
DIM i
//ここで入力する項目数を増やしたりlistsの要素数を増やしたり減らしたりする
lists["あ"] = "a10,a20,a30"; lists["い"] = "b100,b200"; lists["う"] = "c1,c2,c3";lists["ぼんば"] = "d1,d2,d3"
resize(strarry,length(lists)-1) //ハッシュの要素数で配列をリサイズ

for i= 0 to length(lists) - 1
  strarry[i]=lists[i,HASH_VAL]
next
fukidasi(join(fnc_ArryComb(strarry),"<#CR>"))
msgbox("終わり")
//呼び出し部ここまで



550 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 19:17:28.30 ID:GXdSKXvs0.net]
自作関数って引数を設定した場合、引数の数を合わせないと「引数の数が合いません」ってエラー出るけれど
""を使えば引数を省略できるのか
chkimgみたいなデフォルト関数は引数省略できるからどうやるのかなーってずっと悩んでたわ

UWSC: 引数を省略できる関数をつくる
blogs.yahoo.co.jp/nullpage_vwxyz/52255157.html

551 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/02/09(火) 19:24:17.43 ID:4bdWm2Pw0.net]
引数の省略はデフォルト値を関数宣言時に代入しているか否かだ







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<303KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef