2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無しさん@お腹いっぱい。:2015/03/08(日) 00:18:57.40 ID:itdOhEn30.net
Windowsの作業を自動化するツール
フリーソフト版とシェアウェア版の2種類がある
ttp://www.uwsc.info/download.html

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

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

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

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

421 :名無しさん@お腹いっぱい。:2015/05/04(月) 01:21:07.50 ID:POSm0sDu0.net
よくわからんけどこんでいいの?

Dim DIR = "D:\MyDoc\Desktop\新しいフォルダー"
Dim File = "list.txt"
Dim 年[0]; Dim 月[0]; Dim 日[0]; Dim 時[0]
Dim 分[0]; Dim 秒[0]; Dim 先[0]; Dim 後[0]

NUM = GETDIR(DIR)
ReSize(年, NUM); ReSize(月, NUM); ReSize(日, NUM); ReSize(時, NUM)
ReSize(分, NUM); ReSize(秒, NUM); ReSize(先, NUM); ReSize(後, NUM)
For A = 0 to NUM -1
  Dim ファイル = GETDIR_FILES[A]
  年[A] = COPY(ファイル, POS("-",ファイル,2)+1, 4)
  月[A] = COPY(ファイル, POS("-",ファイル,2)+5, 2)
  日[A] = COPY(ファイル, POS("-",ファイル,2)+7, 2)
  時[A] = COPY(ファイル, POS("_",ファイル,1)+1, 2)
  分[A] = COPY(ファイル, POS("_",ファイル,1)+3, 2)
  秒[A] = COPY(ファイル, POS("_",ファイル,1)+5, 2)
  先[A] = COPY(ファイル, 1, POS("-",ファイル,1) -1)
  後[A] = COPY(ファイル, POS("-",ファイル,1)+1, POS("-",ファイル,2)-POS("-",ファイル,1)-1)
Next

//続く

422 :名無しさん@お腹いっぱい。:2015/05/04(月) 01:21:38.10 ID:POSm0sDu0.net
//続いた

Fukidasi("ソート順 [N]年 [G]月 [H]日 [J]時 [F]分 [B]秒 [P]先 [S]後 [ESC]終了")
Repeat
  Ifb GetKeyState(VK_N)
    QSORT(年, QSRT_A, 月,日,時,分,秒,先,後); Break
  ElseIf GetKeyState(VK_G)
    QSORT(月, QSRT_A, 年,日,時,分,秒,先,後); Break
  ElseIf GetKeyState(VK_H)
    QSORT(日, QSRT_A, 年,月,時,分,秒,先,後); Break
  ElseIf GetKeyState(VK_J)
    QSORT(時, QSRT_A, 年,月,日,分,秒,先,後); Break
  ElseIf GetKeyState(VK_F)
    QSORT(分, QSRT_A, 年,月,日,時,秒,先,後); Break
  ElseIf GetKeyState(VK_B)
    QSORT(秒, QSRT_A, 年,月,日,時,分,先,後); Break
  ElseIf GetKeyState(VK_P)
    QSORT(先, QSRT_A, 年,月,日,時,分,秒,後); Break
  ElseIf GetKeyState(VK_S)
    QSORT(後, QSRT_A, 年,月,日,時,分,秒,先); Break
  EndIf
  Sleep(0.1)
Until GetKeyState(VK_ESC)

FID = FOpen(File, F_WRITE8)
For A = 0 to NUM -1
  FPut(FID, 先[A]+"-"+後[A]+"-"+年[A]+月[A]+日[A]+"_"+時[A]+分[A]+秒[A]+".txt")
Next
FClose(FID)

423 :名無しさん@お腹いっぱい。:2015/05/04(月) 12:30:24.94 ID:fl9/B3+b/
>>420
詳しく知らなければネットで調べて実際に試してみればいい
ren aaa.jpg bbb.jpg
とすればaaa.jpgというファイルをbbb.jpgにリネームする

という事は
ExcelのA列に
20150501_ランダムな数字1.jpg
20150501_ランダムな数字2.jpg
20150501_ランダムな数字3.jpg
20150501_ランダムな数字4.jpg
20150501_ランダムな数字5.jpg
を入れる(ファイルのリストとやらを貼り付ける)

B列に
A00639_1.jpg
A00639_2.jpg
A00639_3.jpg
A00640_1.jpg
A00640_2.jpg
となるような数式を作る

C1に
="ren " & A1 & " " & B1
とすれば
ren 20150501_ランダムな数字1.jpg A00639_1.jpg

出来たコマンドをコマンドプロンプトに貼り付けるだけ

424 :名無しさん@お腹いっぱい。:2015/05/04(月) 16:59:29.42 ID:1tvpD3kK0.net
バッチファイルでファイル名一覧をテキストで取得して、Excelで並び替えた方が汎用的なような…

425 :名無しさん@お腹いっぱい。:2015/05/04(月) 17:09:45.24 ID:NHByfOcj0.net
次の処理に使う為にテキストファイルの方が都合がいいケースも有るだろうし
その辺は本人次第による

426 :名無しさん@お腹いっぱい。:2015/05/04(月) 19:04:39.82 ID:f8nhMwc80.net
あたしならバッチのFor文のヘルプをじっくり読むね

427 :名無しさん@お腹いっぱい。:2015/05/04(月) 22:16:59.97 ID:n2ZrU9UHx
//他の方法でやってみたのですが、
//もう少しでできそうですがSendStrの使い方が難しいです
//これだとA030_1.jpgというファイルになってしまいます。
//A00630_1.jpgにしたいのですが

FOR A = 630 TO 630

//マウスでアクティブにする
BTN(LEFT,CLICK,1100,20,1000)

//HOME で先頭に持ってくる
KBD(VK_END,CLICK,1000)
KBD(VK_HOME,CLICK,1000)

//ファイル名を変更する
KBD(VK_F2,CLICK,1000)

//ファイル名を消す
//
KBD(VK_BACK,CLICK,1000)

428 :名無しさん@お腹いっぱい。:2015/05/04(月) 22:17:25.10 ID:n2ZrU9UHx
//キー入力を開始する
KBD(VK_SHIFT,DOWN,100)
KBD(VK_A,CLICK,100)
KBD(VK_SHIFT,UP,100)
KBD(VK_NUMPAD0,CLICK,1000)
KBD(VK_NUMPAD0,CLICK,1000)

//変数の入力
SendStr(GetId(GET_ACTIVE_WIN),Copy("0"+A,Length(A),2))

//_1 の入力
KBD(VK_RSHIFT,DOWN,1000)
KBD(VK_OEM_102,DOWN,1000)
KBD(VK_RSHIFT,UP,1000)
KBD(VK_OEM_102,UP,1000)
KBD(VK_1,CLICK,1000)

NEXT

429 :名無しさん@お腹いっぱい。:2015/05/04(月) 22:40:53.33 ID:fl9/B3+b/
ヒント
a=1
replace(format(a,3)," ","0")
msgbox(replace(format(a,3)," ","0"))
a=10
msgbox(replace(format(a,3)," ","0"))
a=100
msgbox(replace(format(a,3)," ","0"))

何がやりたいか知らないけど
もう少し整理して考えたほうがいい

KBD関数を多用しているけど本当にそれ以外方法がないの?

430 :名無しさん@お腹いっぱい。:2015/05/04(月) 23:20:33.72 ID:nY4sIpEz0.net
質問です。
001.bmpか002.bmpが一致した場合クリックとしたいのですが、以下の処理にした場合、
002.bmpが一致した場合は正常にクリックされる(正常に座標が取得できる)のですが、
001.bmpが一致した場合は座標が
X座標:-999999
Y座標:-999999(print出力のログファイルより)
となってしまいます。

また、001.bmpと002.bmpを逆で書いた場合は、002.bmpの座標がそれぞれ-999999となってしまいます。

*****
IF CHKIMG("001.bmp") OR CHKIMG("002.bmp") THEN //画像一致で実行
print G_IMG_X
print G_IMG_Y
BTN(LEFT)
ELSE
print "no"
ENDIF
*****

431 :名無しさん@お腹いっぱい。:2015/05/04(月) 23:21:12.27 ID:nY4sIpEz0.net
(続き)

or条件の前半に書いたCHKIMGの座標が取得できないようですが、
うまく座標を取得する方法はあるでしょうか。

↓のようにELSEIFで処理を分ければ動くのですが、出来れば1行で書きたいと思った次第です。
使用バージョンは Ver5.1.1 Pro です。

*****
IFB (CHKIMG("choose_001.bmp")=TRUE) THEN //画像一致で実行
BTN(LEFT)
ELSEIF (CHKIMG("choose_002.bmp")=TRUE) THEN //画像一致で実行
BTN(LEFT)
ELSE
print "no"
ENDIF
*****

432 :名無しさん@お腹いっぱい。:2015/05/04(月) 23:50:40.80 ID:NHByfOcj0.net
特殊変数を共有しているので無理
素直に分けなさい

433 :名無しさん@お腹いっぱい。:2015/05/05(火) 00:22:59.32 ID:VvVhJAr50.net
option shortcircuit
これいれてないだけじゃないの?

434 :名無しさん@お腹いっぱい。:2015/05/05(火) 00:49:12.39 ID:4fpjdasx0.net
>>432-433
レスありがとうございます。
短縮評価というのがあるのですね、勉強になりました。
おかげさまで実現することができました、どうもありがとうございます!

435 :名無しさん@お腹いっぱい。:2015/05/05(火) 09:48:03.69 ID:t379n4Zi0.net
>>433
いいこと教えてもらった
言語仕様かと思って諦めてたわ
むしろ短縮評価をデフォにして欲しいくらいだな

436 :名無しさん@お腹いっぱい。:2015/05/05(火) 12:15:50.95 ID:qn/kIA8j0.net
そんな紛らわしいコードは書かないほうがいいと思うのだが・・・

437 :名無しさん@お腹いっぱい。:2015/05/05(火) 16:56:57.37 ID:d+/e+6EX0.net
じゃぁどんなのが紛らわしくないってんだYO(・3・)
その辺優しく教えろYO

438 :名無しさん@お腹いっぱい。:2015/05/05(火) 19:40:24.06 ID:iRlC9s5c0.net
resObj = chkimg("a.bmp")
if resObj.exists()
x = resObj.getX()
y = resObj.getY()

こんな感じで使えれば余計なこと考えなくて自然なんだけどな

439 :383:2015/05/05(火) 22:54:10.53 ID:TCyoWXwj0.net
383と384で質問したものです。皆様レスありがとうございます。
>>419
UWSCでなければPHPとかRUBYとか?
あとの方もレスくれましたが、バッチ処理を途中かますのがスマートなのでしょうか。
どちらにせよ配列の概念をしっかり理解できないとだめですね。
>>421
ありがとうございます。
後ほど試してみて、弄くりまわしてみます!ForNext文でファイル名の構成をすべて配列に代入し…
>>422
RepeatUntil文のところでキー待ち処理でソートしてるのですね…
しかし配列の概念が理解できないからか、なぜこのスクリプトですべての配列(キー配列以外の配列)が同時にソートされるのかわかりません(配列が判る人からすると 何言ってんだこいつ状態…?)
これをヒントに色々やってみます。
>>424
CSVにして、excelのテーブル機能とか使えばいろんなことができますね…。
ファイルのX行目を参照して、なんてのも別途>>421の方法で配列として取得しておけばいいことですし(ファイル名には入れないとしても)。
>>425
おっしゃるとおりテキストファイルでやりたいことがありました。
>>426
バッチ処理も配列も自分にとってはなかなか難しいですね。
今後勉強していきたいと思います。

440 :名無しさん@お腹いっぱい。:2015/05/05(火) 23:10:23.24 ID:STTevHR60.net
内部的にEXCELな感じでしょうかね
配列A、配列B、配列C、配列D があって、データ部はそれぞれ縦列で

A B C D
11 aa あ rte
12 vb え u5f
13 hd え 4ds
15 ke ん g5d
16 og う ew3

となってて
こんな感じのEXCELでソートをBで行うとまとめてACDも追従しますよね
この場合の関数が QSORT(配列B, QSRT_A, 配列A, 配列C, 配列D) となる訳です

441 :名無しさん@お腹いっぱい。:2015/05/06(水) 06:03:33.06 ID:A1LDEOba0.net
str_n = 2500

gettime()
str = "" + G_TIME_HH + G_TIME_NN

if str >= str_n
 print str_n
endif

○○時まで動作させるというものを組みましたが、うまく動作しなかったので上記のようにしてテストをしていました
strは0000~2359の範囲までにしかならないはずなのになぜか上記のまま動作させるとprintされてしまいました
次にstr = "" + G_TIME_HH2 + G_TIME_NN2とすると思ったように動作しました
例えば6時10分を表す場合には610と0610の表し方の違いになりますが、前者だと2500より大きいと判定され後者だと小さいと判定されたようです

これはどういうことなのでしょうか

442 :名無しさん@お腹いっぱい。:2015/05/06(水) 08:14:04.52 ID:zFCy2m+P0.net
>>441
文字列の比較になって先頭から比べて2より6のが大きいから

443 :名無しさん@お腹いっぱい。:2015/05/06(水) 08:19:22.33 ID:kulMuT5p0.net
変数が文字列型になのか数値型なのか

444 :名無しさん@お腹いっぱい。:2015/05/06(水) 08:35:39.31 ID:A1LDEOba0.net
>>442
なるほどありがとうございます
下一桁から読まれるんじゃないんですね

445 :名無しさん@お腹いっぱい。:2015/05/06(水) 08:55:49.69 ID:jQbs1+K90.net
数値として大小比較をしたいのならval関数な

if val("2500") > val("610") then
 msgbox("2500が大きい") //こっち通る
else
 msgbox("610が大きい")
endif

if "2500" > "610" then
 msgbox("2500が大きい")
else
 msgbox("610が大きい") //こっち通る
endif

446 :名無しさん@お腹いっぱい。:2015/05/06(水) 12:25:21.85 ID:I/ZvQy1N0.net
ファイル名を自在に変更したいなら Flexible Renamer
これ「こんなソフトありませんか」の常連。
正規表現と合わせて使うと真の最強だから困る。

447 :名無しさん@お腹いっぱい。:2015/05/06(水) 12:32:43.76 ID:I/ZvQy1N0.net
>432
特殊変数に触るときは目的に応じた関数名の自作関数でラッピングして使うといいよ
PROCEDURE getImgXY(imgBmpName, VAR X, VAR Y)
画像をクリックしたいなら clickImg を自作するのが定番
関数化すれば、TRYでエラー処理して自動操作中断しないようにしたり、
フォルダ名を関数側に持たせて記述を短くしたり、
便利で読みやすいことが沢山出てくるし

448 :名無しさん@お腹いっぱい。:2015/05/06(水) 16:09:53.31 ID:72Vanucp0.net
chkimgの色幅の指定について質問させてください。
24ビットカラーのbmpで保存した文字の画像を、あらゆる文字色において探索させたいのですが(#000000〜#FFFFFF)、持たせる色幅は「RGB各色に対して8bit」で正しいのでしょうか?

また、その時1pxの透過色を指定していた場合、どうなるんでしょうか?

449 :名無しさん@お腹いっぱい。:2015/05/07(木) 02:08:08.49 ID:ybua1Qzf0.net
>>445
今更だけどありがとう

450 :名無しさん@お腹いっぱい。:2015/05/07(木) 18:14:43.24 ID:36ngVs2G0.net
前スレで配列サイズ取得にRESIZEとLENGTHどちらを使うべきかという話が出ていた。
俺はLENGTHで配列が取得できるようになる前からUWSC使っていたのでRESIZEでも
いいじゃないかと考えていたが、可読性などとは全く異なる理由で、RESIZEによる
配列サイズ取得を今後辞めることにした。
ついでに関数の戻り値にSAFEARRAYを使うことも辞めた。
その考えに至ったテストコードを載せておく。

451 :名無しさん@お腹いっぱい。:2015/05/07(木) 18:17:18.48 ID:36ngVs2G0.net
testCsv1="100,101,102,104,108"
testCsv2=123; testCsv3=EMPTY; testCsv4=NULL; testCsv4=NOTHING
testCsv5=CreateOLEObj("InternetExplorer.Application")
DIM testCsv6
testCsv7=SAFEARRAY(0, 2)
FOR vidx=1 TO 7; PRINT; PRINT "TEST No."+vidx; testSplit(EVAL("testCsv"+vidx)); NEXT
PROCEDURE testSplit(testCsv)
  TRY
    PRINT "test data : " + testCSV
  EXCEPT
    PRINT "test data is not printable."
  ENDTRY
  TRY
    testArray =SPLIT(testCsv, ",")
  EXCEPT
    PRINT "SPLIT NG"; testArray =SPLIT(testCsv, ","); EXIT
  ENDTRY
  PRINT "SPLIT o.k. Array length result="+LENGTH(testArray)+" ( RESIZE result="+RESIZE(testArray)+" )"
  IFB LENGTH(testArray) < 1 THEN
    PRINT "SPLIT result is not array."; EXIT
  ELSE
    FOR idx=0 TO RESIZE(testArray)
      PRINT " array["+idx+"]="+testArray[idx]
    NEXT
  ENDIF
  PRINT "test end."
FEND

452 :名無しさん@お腹いっぱい。:2015/05/07(木) 18:40:45.43 ID:0B5tP8ol0.net
で、何が問題なの?
SAFEARRAYは構造体みたいに使ってポリモーフィズムを実現できる型として重宝してるよ

453 :名無しさん@お腹いっぱい。:2015/05/07(木) 19:05:53.09 ID:kOFrsE6M0.net
SPLITは文字列を配列にする関数だからJOINしろと思う
色々な値が入る可能性のある関数なら最初に引数チェックしろと思う
配列じゃないなら-1なんでそれで判断してJOINしてやれば全て動くしなぁ

454 :名無しさん@お腹いっぱい。:2015/05/07(木) 19:06:54.36 ID:kOFrsE6M0.net
あ、-1なのはRESIZEの戻り値ね
そういう意味ではこういった用途の場合はLENGTHだと文字数になるので使えない

455 :名無しさん@お腹いっぱい。:2015/05/07(木) 19:19:19.12 ID:kOFrsE6M0.net
あー、でも途中のデフォルト参照するケースが駄目になるね
ちゃんとVARTYPEした対処した方がいい

これもコーディング論になってしまうけれど
例外はエラーからの復帰処理で正常系の判断処理には使わない方が良いかなと

456 :名無しさん@お腹いっぱい。:2015/05/07(木) 19:44:34.12 ID:oIqnKeh+0.net
Resizeの何がダメなのかわからん
SafeArray押しなのもまるで分らん

使い勝手というかデータ渡し合いするならSafeArrayだけど
処理速度ならResizeや単純な宣言配列のがうんと早い

Resize > Length だし
Dim Array[] >>>>>>> SafeSrray(0,0) だわ

上にあるようなファイル名取り込んでソートしなおすとかは絶対宣言した方が早い

457 :sage:2015/05/07(木) 21:17:42.38 ID:j+BelTnl0.net
すいません初心者です

While True

KBDA()
KBDB()

Wend

Procedure KBDA()
KBD(VK_A,CLICK)
SLEEP(5)
Fend

Procedure KBDB()
KBD(VK_B,CLICK)
SLEEP(10)
Fend

KBDA()が実行されたあとKBDB()が開始されるのですが
これを、KBDA()とKBDB()を同時にスタートさせるにはどうすればよいのでしょうか?
for-nextを使ってやっていたんですが、ボタンの数が多くなってくると出来ません

458 :名無しさん@お腹いっぱい。:2015/05/07(木) 21:30:45.17 ID:kOFrsE6M0.net
本当の意味で同時に処理するのはイベント駆動のWindowsでは無理
CLICKでやろうとするから無理が出る

DOWNとUPに分けてABが同時にDOWNになるタイミングを作った後でUPしたら良い

459 :名無しさん@お腹いっぱい。:2015/05/07(木) 22:13:39.16 ID:j+BelTnl0.net
>>458
それでやってみます
アドバイスありがとうございました

460 :名無しさん@お腹いっぱい。:2015/05/07(木) 22:36:41.79 ID:f3z72UPoG
> ボタンの数が多くなってくると出来ません

ボタンを同時に押し下げた状態にできるのは確か3つまでだから
4つ目は先にクリックしたキーのUPが完了するまでDOWNやCLICKはできない。

461 :名無しさん@お腹いっぱい。:2015/05/07(木) 23:09:44.89 ID:iddjenAQ0
>>451
これ実行してみた?
要素数1の時、LENGTHは1,RESIZEの戻り値は0
非配列の時、LENGTHは0になるのに、RESIZEの戻り値は0
要素数1なのか非配列なのかRESIZEの戻り値では判断できないってことでしょ。
あと予期せず文字列を想定した処理にSAFEARRAYが混ざってくると、
TRYでトラップ不可能なSyntaxErrorが出てキモい。

462 :名無しさん@お腹いっぱい。:2015/05/08(金) 00:14:41.27 ID:aCA8XdTmI
ちょっと質問です
<確認用.uws>
call test.uws
Dim A,B
pic("D:\images\","test.jpg",A,B)//画像の縦横を取得(例:300×200→A=300,B=200)
sfh(100,200,A,B)
<test.uws>
Procedure pic(a_path,a_name,Var a_Width,Var a_Height)
  Dim Path_Dir = a_path
  Dim FileName = a_name
  Dim Shell = CreateOleObj("Shell.Application")
  Dim NS = Shell.NameSpace(Path_Dir)
  Dim NS_Items = NS.Items
  Dim NS_Item = NS_Items.Item(FileName)
  Dim a_Str = NS.GetDetailsOf(NS_Item, 31)
  a_Width = Trim(Token("x", a_Str))
  a_Height = Trim(Token("x", a_Str))
Fend
procedure sfh(x,y,i,j)
x = x + random(i)
y = y + random(j)
print x
print y
fend
確認用.uwsを実行すると、

1274:定義が間違っています
test.uws: 19行目: X = X + RANDOM(I)

というエラーが出てしまいます、どうしたらいいですか?
やりたいことは、画像の縦横のピクセル数から乱数をそれぞれ得て、ある値に足すことです。上に書いたサンプルでは、100〜499の値と、200〜499の値です。画像の大きさは一定にできないので変数で扱いたいです。
よろしくお願いします。

463 :名無しさん@お腹いっぱい。:2015/05/07(木) 23:59:53.31 ID:gEl3Corv0.net
>testCsv4=NULL; testCsv4=NOTHING
まぎらわしい書き方をするから、こんな事やっちゃうんだろ
無意味な;は糞

464 :名無しさん@お腹いっぱい。:2015/05/08(金) 00:07:33.89 ID:jcQWG3E10.net
>>456
safearray押しではないけど、uwscに速度を求めるのは間違っていると思う

465 :名無しさん@お腹いっぱい。:2015/05/08(金) 00:50:15.30 ID:B65QIiuAJ
>>462
iやjは普通の文字列じゃなくUNICODE文字列なのが原因

バグか仕様かは知らないがrandom関数は数値かANSI文字列しか受け付けない
val関数はUNICODEでも数値に変換できるので
x = x + random(val(i))
とでもすればいけるだろう

466 :名無しさん@お腹いっぱい。:2015/05/08(金) 01:18:30.50 ID:B65QIiuAJ
あ、ごめん嘘ついた

iの先頭とjの末尾に見えない制御文字的なものがついてる
Dim a_Str = NS.GetDetailsOf(NS_Item, 31)
msgbox(vartype(a_Str, var_astr))
この制御文字はANSIに変換できないので?になって見えるようになる
msgbox(length(a_Str))
length関数でも文字数が合わないので分かるはず

どちらにしろval関数で削られるのでval関数を使えばいい

467 :名無しさん@お腹いっぱい。:2015/05/08(金) 05:46:16.80 ID:UKJMttxu0.net
求めてなくても、同じ効果で速度の差がはっきりしてるなら早い方選ぶのが普通じゃないの?

468 :名無しさん@お腹いっぱい。:2015/05/08(金) 06:09:34.64 ID:Vy8D3J360.net
求めてないのなら、安全性とかソースの可読性とかそういうのを優先するよ。

469 :名無しさん@お腹いっぱい。:2015/05/08(金) 06:36:18.86 ID:UKJMttxu0.net
resizeって危険なの?

470 :名無しさん@お腹いっぱい。:2015/05/08(金) 07:55:07.35 ID:ZRJ8LIgC0.net
質問です
call test.uws
Dim A,B
pic("D:\images\","test.jpg",A,B)//画像の縦横を取得
sfh(100,200,A,B)

<test.uws>
Procedure pic(a_path,a_name,Var a_Width,Var a_Height)
  Dim Path_Dir = a_path
  Dim FileName = a_name
  Dim Width, Height
  Dim Shell = CreateOleObj("Shell.Application")
  Dim NS = Shell.NameSpace(Path_Dir)
  Dim NS_Items = NS.Items
  Dim NS_Item = NS_Items.Item(FileName)
  Dim a_Str = NS.GetDetailsOf(NS_Item, 31)
  a_Width = Trim(Token("x", a_Str))
  a_Height = Trim(Token("x", a_Str))
Fend
procedure sfh(x,y,i,j)
x = x + random(i)
y = y + random(j)
print x
print y
fend

これを実行すると
定義が間違っています
test.uws 19行目: X = X + RANDOM(I)
となってしまいます。どうしたらいいですか?
やりたいことは、「画像の縦横のピクセル数」以下の乱数をある値に足すことです。アドレスお願い致します。

471 :名無しさん@お腹いっぱい。:2015/05/08(金) 08:14:35.71 ID:9f3Vt5H+0.net
Varが付いてないから変更出来ないだけじゃないの?

472 :名無しさん@お腹いっぱい。:2015/05/08(金) 08:46:00.34 ID:vrTT6NwFM
>>463;圧縮のためだろ;あれから;なくしたら改行が多すぎて投稿できないぞこのスレだと

473 :名無しさん@お腹いっぱい。:2015/05/08(金) 08:48:38.84 ID:vrTT6NwFM
それより>>454はどうなのかな?;>>461が言う実行結果と異なってるようだがバージョンや環境の違いか?;TRYが利くエラーと効かないエラーの違いも気になる。

474 :名無しさん@お腹いっぱい。:2015/05/08(金) 08:54:53.52 ID:vrTT6NwFM
>>470
19行目の直前でプリントして変数の中身確認してみ?
Iの中身が空っぽだぞ多分>>451の2行目みたいな変な値になってる

475 :名無しさん@お腹いっぱい。:2015/05/08(金) 10:12:19.88 ID:kMHlHwI60.net
msgbox(A)とか入れて見りゃすぐわかる気がするんだが

多分A・Bには文字列が入ってる

476 :名無しさん@お腹いっぱい。:2015/05/08(金) 12:28:16.24 ID:uACYXt1H0.net
>>470
2ch.s cのほうに答え書いてある
制御文字が原因

477 :名無しさん@お腹いっぱい。:2015/05/08(金) 12:31:32.67 ID:pk4bmMyb0.net
>>475
ありがとうございます!!
VAL(A),VAL(B)にしたらできました!!

478 :名無しさん@お腹いっぱい。:2015/05/08(金) 12:35:00.28 ID:pk4bmMyb0.net
>>476
ごめんなさい!!気づきませんでした…

479 :名無しさん@お腹いっぱい。:2015/05/08(金) 12:54:57.17 ID:s8RLZ3fW0.net
472 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/05/08(金) 08:46:00.34 ID:vrTT6NwFM
>>463;圧縮のためだろ;あれから;なくしたら改行が多すぎて投稿できないぞこのスレだと

473 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/05/08(金) 08:48:38.84 ID:vrTT6NwFM
それより>>454はどうなのかな?;>>461が言う実行結果と異なってるようだがバージョンや環境の違いか?;TRYが利くエラーと効かないエラーの違いも気になる。

474 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/05/08(金) 08:54:53.52 ID:vrTT6NwFM
>>470
19行目の直前でプリントして変数の中身確認してみ?
Iの中身が空っぽだぞ多分>>451の2行目みたいな変な値になってる 👀
Rock54: Caution(BBR-MD5:405b7f1af0f5a85b432d79fa769e9aeb)


480 :名無しさん@お腹いっぱい。:2015/05/08(金) 18:51:27.05 ID:CsG9StKG0.net
465 :名無しさん@お腹いっぱい。:2015/05/08(金) 00:50:15.30 ID:B65QIiuAJ[1/2]
>>462
iやjは普通の文字列じゃなくUNICODE文字列なのが原因

バグか仕様かは知らないがrandom関数は数値かANSI文字列しか受け付けない
val関数はUNICODEでも数値に変換できるので
x = x + random(val(i))
とでもすればいけるだろう
466 :名無しさん@お腹いっぱい。:2015/05/08(金) 01:18:30.50 ID:B65QIiuAJ[2/2]
あ、ごめん嘘ついた

iの先頭とjの末尾に見えない制御文字的なものがついてる
Dim a_Str = NS.GetDetailsOf(NS_Item, 31)
msgbox(vartype(a_Str, var_astr))
この制御文字はANSIに変換できないので?になって見えるようになる
msgbox(length(a_Str))
length関数でも文字数が合わないので分かるはず

どちらにしろval関数で削られるのでval関数を使えばいい

481 :名無しさん@お腹いっぱい。:2015/05/08(金) 19:05:39.45 ID:f8iSJDTU0.net
わざわざコッチに貼るな

482 :名無しさん@お腹いっぱい。:2015/05/09(土) 02:09:13.25 ID:Wj4o5nTl0.net
dim normalStr="10"
msgbox(normalStr) // 10
msgbox(random(normalStr)) // 10未満の乱数

dim charArray[]=$202a, $31, $30, $202c
dim errorStr=""
for char in charArray
 errorStr = errorStr + chr(char)
next
msgbox(errorStr) // 10のように見える
msgbox(random(errorStr)) // エラーになる

知らない人は悩むだろうな

483 :名無しさん@お腹いっぱい。:2015/05/09(土) 06:51:53.03 ID:lOeahwwg0.net
最近uwscいじり始めました
CHKIMGでALL_IMG_X[]、ALL_IMG_Y[]に格納されるのは最大6個まで?
増やせないのかな?

484 :名無しさん@お腹いっぱい。:2015/05/09(土) 09:50:39.26 ID:VKqe5NAJ0.net
>>483
最大4096個まで
6個しかないってことは6個しか画像が見つからなかったってことだ

485 :名無しさん@お腹いっぱい。:2015/05/10(日) 12:17:33.84 ID:V3eUIZ5/0.net
SCに書くアホなんているんだな…

486 :名無しさん@お腹いっぱい。:2015/05/10(日) 14:41:29.85 ID:j+Ly6pmCp
なんで?なんでも!

487 :名無しさん@お腹いっぱい。:2015/05/10(日) 15:04:14.23 ID:6YUb43Cc0.net
住み分けている人は問題ないさ

488 :名無しさん@お腹いっぱい。:2015/05/10(日) 23:28:25.09 ID:KG0xar9h0.net
これもscか
461 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/05/07(木) 23:09:44.89 ID:iddjenAQ0
>>451
これ実行してみた?
要素数1の時、LENGTHは1,RESIZEの戻り値は0
非配列の時、LENGTHは0になるのに、RESIZEの戻り値は0
要素数1なのか非配列なのかRESIZEの戻り値では判断できないってことでしょ。
あと予期せず文字列を想定した処理にSAFEARRAYが混ざってくると、
TRYでトラップ不可能なSyntaxErrorが出てキモい。


俺も同じだった。

489 :名無しさん@お腹いっぱい。:2015/05/11(月) 00:33:31.53 ID:jVchxD0Z0.net
こっちに書かないでお前もあっちに書けよ

490 :名無しさん@お腹いっぱい。:2015/05/11(月) 14:12:48.59 ID:FSQG8YaTn
質問です
コンボボックスを1行に複数個入れることは可能でしょうか
やり方あれば教えていただきたい

491 :名無しさん@お腹いっぱい。:2015/05/11(月) 20:41:08.63 ID:DhQvpn7OJ
@シェア版のフォームを使う
Auser32.dll経由させてAPIからウインドウを作る
BWin7以降ならパワーシェルから簡易.NETインタプリンタ経由してアプリをコンパイル

好きなの選べ

492 :名無しさん@お腹いっぱい。:2015/05/12(火) 08:55:17.84 ID:M6eLyl6Gb
Bでお願いします

493 :名無しさん@お腹いっぱい。:2015/05/12(火) 11:20:49.86 ID:TtfeFMrT2
メニュー表かよw

494 :名無しさん@お腹いっぱい。:2015/05/13(水) 21:24:08.38 ID:9cIxCj9O0.net
UWSCの範疇じゃないかもしれんがプログラムに疎いんで聞いてくれ。
複数の変数名ごとの処理を順繰りに変えながら使ってるんだが

ifb tabemono = "mikan"
 tabemono = "ringo"
elseif tabemono = "ringo"
 tabemono = "momo"
elseif tabemono = "ringo"
tabemono = "momo"
//実際にはelseifがまだまだある
else
 tabemono = "mikan" //←走り終わったら最初に戻してる
endif

もっとスマートな方法教えてくれ
(1個減らすとその前の行も修正が必要なんで)

495 :名無しさん@お腹いっぱい。:2015/05/13(水) 21:26:08.01 ID:7VzdG4CX0.net
for文と配列使いなさい

496 :名無しさん@お腹いっぱい。:2015/05/13(水) 21:42:08.47 ID:+c1y9vIl0.net
変数のスライド以外は共通ならコレで1ループ
繰り返すなら FOR IN NEXT を WHILE 等でループさせる

 DIM list[] = "mikan","ringo","momo"

 FOR item IN list
  print item
 NEXT

497 :名無しさん@お腹いっぱい。:2015/05/13(水) 22:39:45.77 ID:JmtHJeH10.net
>>494
DIM list[max][2]

list[0][0] = "mikan"
list[0][1] = "ringo"
list[1][0] = "ringo"
list[1][1] = "momo"
.
.

for i=0 to max
ifb tabemono=list[i][0] then
tabemono=list[i][1]
next

配列はcsvファイルにして最初に読み込めば追加修正も楽だと思うよ。

498 :名無しさん@お腹いっぱい。:2015/05/14(木) 08:31:27.96 ID:UlftZKXm0.net
それbreakでも入れないと結果が違ってくるんじゃないか?
質問者が何をやりたいかは分からないけど

499 :名無しさん@お腹いっぱい。:2015/05/14(木) 09:24:07.79 ID:yaIK/1e80.net
ループ回すより連想配列使った方がスマート

500 :名無しさん@お腹いっぱい。:2015/05/14(木) 09:43:31.94 ID:4vjcebLp0.net
配列は使い道がわからんわ

501 :名無しさん@お腹いっぱい。:2015/05/14(木) 09:46:28.32 ID:BoW7Ss/B0.net
基礎を学んでないと配列は使わない人が多そう
uwscなんて知識無しの人でも作るもんだから

502 :名無しさん@お腹いっぱい。:2015/05/15(金) 15:09:06.18 ID:uEjjwe7w0.net
ワイも全然分からんから
WHILE TRUE
WEND
でグルグル回してるわ

503 :名無しさん@お腹いっぱい。:2015/05/15(金) 18:45:08.69 ID:cO+XlT030.net
ようは、動けばいいんだよね。

理解しないで適当にコピペでも、動かせてるならそれでいい訳で

504 :名無しさん@お腹いっぱい。:2015/05/15(金) 20:48:28.13 ID:BFc4oXXZ0.net
だめだろ。冗長なコード書いてる奴は

505 :名無しさん@お腹いっぱい。:2015/05/15(金) 20:53:49.34 ID:LD79vb4o0.net
仕事なら兎も角当人の責任で私的に使っている間はどうでも良い話

506 :名無しさん@お腹いっぱい。:2015/05/15(金) 21:04:53.18 ID:/AZ0XoPh0.net
冗長なコードが駄目なのはわかるが、冗長なコード書いてる奴が駄目かと言われると一概には言えんわな
コードを書いて走らせるのはあくまで手段だ、目的を見失ってまで磨きをかけるものじゃない

507 :名無しさん@お腹いっぱい。:2015/05/15(金) 22:09:35.95 ID:kJkWORh/0.net
連想配列もいいけどハードコーディングになりやすい
配列から要素を検索しインデックスを返すsearchArray関数を自作し、
CSV配列から生成した配列から現在の要素を検索して取得した
インデックスをインクリメントすることで希望の動きが実装できる。
が、配列に同じ要素が複数あると希望通りに動かない。(IF連鎖でも同じだが)
要件としてそこをクリアしたい場合、そもそもの実装として、
現在のインデックスを保持する仕様に変更した方がいいだろう。

508 :名無しさん@お腹いっぱい。:2015/05/15(金) 23:33:00.52 ID:M6mRhlAE0.net
もう英文だな

509 :名無しさん@お腹いっぱい。:2015/05/15(金) 23:47:19.19 ID:i6wiJ6QU0.net
自分よがりなコードやトリッキーなコードよりは冗長なコードのほうがいいわ

510 :名無しさん@お腹いっぱい。:2015/05/15(金) 23:58:28.57 ID:cwpOruK/0.net
キーが一意となる事が確定している状況であれば
通常の配列を使うなんて意味ない

わざわざ配列を検索するためのループをコーディングする必要が出てくる
行数も検索時間も全部無駄

できる大人は積極的に連想配列を使いますね

511 :名無しさん@お腹いっぱい。:2015/05/16(土) 01:21:50.65 ID:kYQf2te90.net
冗長なコードはバグの原因だしメンテナンス性に欠ける

512 :名無しさん@お腹いっぱい。:2015/05/16(土) 01:58:20.22 ID:hI7/eQi30.net
自分よがりでトリッキーなコードでも速かったらそっち使うじゃん?
最速のコードってトリッキーなんだよな

513 :名無しさん@お腹いっぱい。:2015/05/16(土) 03:35:37.82 ID:5YLxrpDQ0.net
だからなぜuwscに速度を求めるのか・・・

514 :名無しさん@お腹いっぱい。:2015/05/16(土) 04:00:13.96 ID:kYQf2te90.net
UWSCはプログラミング始めるとっかかりとして悪くないと思うわ

515 :名無しさん@お腹いっぱい。:2015/05/16(土) 06:59:43.23 ID:jzBJrgnq0.net
プログラムで固定長の配列は実際使いにくいよな
連想配列か可変長配列が圧倒的に便利

516 :名無しさん@お腹いっぱい。:2015/05/16(土) 08:45:44.45 ID:RgS0dIJ+0.net
可読性を重視するか速度を重視するかなんて書く人によるだろ
自分と意見が違うからって無闇に叩く奴はハゲ

517 :名無しさん@お腹いっぱい。:2015/05/16(土) 09:55:58.16 ID:PHxUHjwY0.net
public key[1000]
public value[1000]

key[0]="apple"; value[0]="りんご";
//・・・
key[999]="banana"; value[999]="バナナ";

print searchArray("apple")
print searchArray("banana")

function searchArray(name)
 for i=0 to length(key)-1
  if name=key[i] then
   result = value[i]
   exit
  endif
 next
fend

518 :名無しさん@お腹いっぱい。:2015/05/16(土) 09:57:59.40 ID:PHxUHjwY0.net
hashtbl hash
hash["apple"]="りんご"
//・・・
hash["banana"]="バナナ"

print hash["apple"]
print hash["banana"]

519 :名無しさん@お腹いっぱい。:2015/05/16(土) 10:01:39.61 ID:PHxUHjwY0.net
searchArray?
しねばいいのに^^

520 :名無しさん@お腹いっぱい。:2015/05/16(土) 10:05:22.46 ID:QDThgf1Z0.net
グローバル変数の初期化がうまくいかず悩んでいます。
hogeの値を 1→2→3→1→2・・・としたいのですが、1→2→3→4→5・・・となってしまいます。
DO1関数内で、hogeの値を使ってIF文を動かしたりしています。
考えているような動作にするには、どういった記述をすれば良いでしょうか、
教えて頂けるとうれしいです。よろしくお願いします。

WHILE TRUE
 public hoge = 0 //関数で使う変数
 loop = 0
 WHILE (loop = 3) = FALSE
  loop = loop + 1
  hoge = hoge + 1
  print "hoge" + hoge
  print "loop" + loop
  DO1()
 WEND
WEND

総レス数 1144
361 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200