1 名前:名無しさん@お腹いっぱい。 [2009/12/09(水) 05:27:33 ID:J1DL1P1U0] Windowsを自動化させるツールUWSC。 www.uwsc.info/ uwsc使いのみなさま、マターリ己のスクリプトを晒しましょ。
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:54:23 ID:sezMof5L0] 了解
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 19:15:57 ID:wo2Kl350P] メモは非表示にしたいので名前は「うんこメモ」でよろしく
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 20:15:15 ID:sezMof5L0] // 待ちループなしのIE制御スクリプト STOPFORM(true) PUBLIC gIE2 gIE2 = CreateOLEObj("InternetExplorer.Application") gIE2.visible = True gIE = CreateOLEObj("InternetExplorer.Application") gIE.visible = True ID = HNDToID(gIE.HWND) OLEEvent( gIE, "DWebBrowserEvents2", "TitleChange", "TitleChange" ) OLEEvent( gIE, "DWebBrowserEvents2", "BeforeNavigate2", "BeforeNavigate2" ) OLEEvent( gIE, "DWebBrowserEvents2", "NewWindow2", "NewWindow2" ) OLEEvent( gIE, "DWebBrowserEvents2", "OnQuit", "OnQuit" ) sleep(60) CtrlWin(ID, CLOSE) Procedure OnQuit() exitexit FEND Procedure TitleChange() // キャッシュに入ってない場合に2回呼ばれる。そして1回目はページ受信前のタイトル。 Title = EVENT_PRM[0] print "TC " + Title FEND Procedure BeforeNavigate2() // 1回のページ操作につき1回呼ばれる。 IE = EVENT_PRM[0] // IEオブジェクト URL = EVENT_PRM[1] // 開くURL print "BN " + IEGetData( IE, "TAG=title" ) + " " + URL FEND Procedure NewWindow2() EVENT_PRM[0] = gIE2 // 新しく指定するブラウザオブジェクト(自分自身は指定できない) EVENT_PRM[1] = True // Cancel flag print "NW" Fend
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 12:37:44 ID:9pLp31HK0] >> ID:sezMof5L0 >>74 のスレにそんなに顔真っ赤になったのか? 一生懸命メモ貼らなくていいよ。
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 15:31:16 ID:1MBjkeY90] XPでIE6使ってるけど、”ファイルのダウンロード”ダイアログではバックグラウンドで保存ボタンをクリックできないんだけど これってダイアログが裏で動くのを却下してるってことなのかな。 いまさらだけど、たまにしか作らないとそういうところで引っかかる。 最初から表にいてもなんかクリックできなくて一旦裏にもって行かないといけなかったり。 結局AACで指定しないといけない。 ”名前を付けて保存”ではそんなことなさそうなんだけど。 ”名前を付けて保存”の上書き確認とかのメッセージボックスなら自作のGetChldID()ですばやく確実にIDをゲットしてクリックできるんだけどなあ。 > Until !ClkItem( DlgID, "保存", CLK_BTN or CLK_SHORT or CLK_BACK ) > Result = !CancelIfOverWrite(DlgID, 20) > // ID: 名前を付けて保存ダイアログのID > // false: キャンセルしてない true: キャンセルした > Function CancelIfOverWrite(ID, TLimit) > Result = false > print "called CancelIfOverWrite()" > Repeat > sleep(0.1); TLimit = TLimit - 0.1; if TLimit < 0 then exit > if !IDToHnd(ID) then exit > CID = GetChldID( ID ) > Until 0 < CID > // 上書き確認メッセージ処理 > Result = true > while true > ifb 0 < CID then > ClkItem( CID, "いいえ" ) > Else > ClkItem( ID, "キャンセル" ) > Endif > sleep(0.3); TLimit = TLimit - 0.3; if TLimit < 0 then exit > if !IDToHnd(ID) then exit > CID = GetChldID( ID ) > wend > FEND
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 15:44:52 ID:1MBjkeY90] あと、>>77 のBeforeNavigate2でIEオブジェクトをスレッドに渡して処理しようとしても、 IEオブジェクトを使うときにエラーになる。 グローバル変数を使ったりvarで渡したりしてみたけどどーしてもエラーになる。 普通にスレッド実行するときにはvar引数でIEオブジェクトを渡して使えてたんだけど、 BeforeNavigate2でスレッド呼び出ししたらなぜか駄目だ。 結局BeforeNavigate2では開始フラグをセットして、関数呼び出しは普通に待ちループでやった。 まあBeforeNavigate2も何度か呼ばれたりするみたいだしそのほうが2重起動とかなくてよかったみたい。 もしかして2重起動されるのが原因・・なわけないな。ちゃんと選別してたから。
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 16:01:58 ID:GyHfCZ1l0] 独り言お疲れ様です
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 22:51:55 ID:qrX4Zb5TP] 質問ならまだしも独り言口調ってマジムカつく もっと読んでる人の事を考えてほしい
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/22(火) 09:25:16 ID:/egSySEF0] >>82 質問ならまだしも独り言口調ってマジむかつきませんか? もっと読んでる人のことを考えて欲しいと思っているのですが、貴方の考えはどうでしょう?
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/22(火) 11:16:08 ID:Y5j4vTTi0] >>82 は釣りだろ。
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 22:12:23 ID:QQjADlGN0] DOSコマンドの pushd X:\Temp del /q *.* for /D %%f in ( * ) do rmdir /s /q "%%f" というのをUWSCでやろうとして DOSCMD("pushd X:\Temp<#CR>del /q *.*<#CR>for /D %%f in ( * ) do rmdir /s /q <#dbl>%%f<#dbl>", false, true) と書いたけど、ちゃんと動いてくれない どこが間違ってるの?
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 22:22:33 ID:PGzvFXxt0] <#CR>で繋げないんだろう。 |使うかバッチファイル作るかすればいいんじゃないかな?
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/25(金) 23:15:19 ID:QQjADlGN0] だめだ、俺の知識じゃどうやってもできない おとなしくバッチファイルにしとくわ
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 08:32:23 ID:scMOjuw20] >>85 複数のコマンドを連続で実行するなら丸括弧と改行で区切ればいいよ。 普通にコマンドラインで > ( dir とだけ入力すれば、More?って聞いてくる。 > ) で閉じるまで実行待ち状態。 パイプも連続実行だけど後のやつが受け取ったものをどう処理するか分からないからね。 しかしなんでループ処理でrmdirしちゃうのかねえ。
89 名前:85 mailto:sage [2009/12/26(土) 09:25:34 ID:MKs2n1Uw0] 動かなかった原因がわかった UWSCスクリプトでやるときは%が一つ余分になるんだ >>88 okwave.jp/qa4178416.html 俺はここから丸写ししただけ
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 19:25:42 ID:Y9u003Cq0] UWSCではっていうか、 VIDタグに流し込まれたHTMLって普通にDOMアクセスできないですよね。 だけどHTMLソースコードをテキストで構造解析するのはちょっと大変。 そこで、DIVタグのIDさえ取れればその配下のエレメントを処理できる関数を書いてみました。 判定関数をEVALでCALLすることで汎用的に使えます。 まだ動かしてはいないんだけど、一応EVALが関数を実行してオブジェクトを返せることは確認しました。 >// DOMアクセスで再帰的に配下のエレメントをたどる。 >// EVALの結果がemptyでなくなったらやめて結果として返す。 >Function SrchDomTree( elm, func ) > result = empty > // 先に直接の子ノードを調べる > for i = 0 to elm.childNodes.length > ret = eval(func) > ifb ret then > result = ret > exit > endif > next > // 孫ノードに入っていく > for i = 0 to elm.childNodes.length - 1 > ifb elm.childNodes[i].childNodes.length then > ret = SrchDomTree( elm.childNodes[i], func ) > ifb ret then > result = ret > exit > endif > endif > next >Fend
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 19:42:39 ID:Y9u003Cq0] おっと。引数を追加する仕組みを忘れてました。 eval(func)のところは eval( func + "(" + elm.childNodes[i] + env +")" ) 呼び出しは SrchDomTree( elm, "func", ", 引数2, 引数3" ) って感じになるかな? 判定関数はこんな感じ。 >// エレメントのouterHTMLを取ってAタグならIMG srcに"video_download.gif"があるか調べ、 >// あればouterHTMLからリンクアドレスを取得 >Function GetFLVLink(elm) > result = empty > str = elm.outerHTML > ifb 1 = Pos( "<A", str ) then > ifb Pos( "video_download.gif", BetweenStr( str, "src=<#DBL>", "<#DBL>" ) ) then > result = BetweenStr( str, "href=<#DBL>", "<#DBL>" ) > endif > endif >Fend > >// 指定されたリンク文字を持つリンクアドレスを取得 >Function GetKWDLink( elm, keyword ) > result = empty > str = elm.outerHTML > ifb 1 = Pos( "<A", str ) then > ifb Pos( keyword, elm.innerHTML ) then > result = BetweenStr( str, "href=<#DBL>", "<#DBL>" ) > endif > endif >Fend
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 23:50:29 ID:KdIVRt980] ieをアクティブにした状態で以下を実行してみたのですがcom_error例外が発生しました となってしまします というか2行目以降でieを使うとエラーになります 解説サイトなど探してもあっさり進んでしまうのですが…何か足りませんか? よろしくお願いします ie = CreateOLEObj("InternetExplorer.Application") SENDSTR(0, IE.document.title)
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/28(月) 00:21:27 ID:GHkoEhmr0] >>92 変数や関数は大文字小文字を区別します。 ieはオブジェクトを受け取ってるけど、IEはオブジェクトを持ってないからエラーになります。 あと、document.titleのtitleもTitleと、大文字小文字を区別するのでエラーになるでしょう。 documentの方は割りと融通が利くようですが。 あと、IEオブジェクトなどはユーザーが閉じると無効になり、使えばエラーになります。 そういうのはそういうものとして使うか、終了を検知してスクリプトを適切に処理するかのどっちかになります。 ID = HNDToID(IE.HWND) と、IDを取っておいて ifb ! IDToHnd(ID) then // IDと元のIEオブジェクトは無効 exit endif とやれば、com_error例外にならずに終了を判定できます。 IDToHnd()は終了検知に便利なのでお勧めです。 ちなみにウィンドウハンドルのゼロはデスクトップを意味するので、本来は数値で有効無効を判定できるものではないと思います。
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/28(月) 01:24:44 ID:8NfAzOMC0] win7では使用できますか?
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:24:56 ID:3SgEgPry0] >>94 多分使えますよ。 でもいろいろ気をつけることはあるようです。 ttp://www.uwsc.info/faq.html
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:45:30 ID:3SgEgPry0] OLEEVENTを使っていてどーもクラッシュしまくるので、前後にsleep()を入れてみたら少し改善したようだ。 右クリックメニューをポップアップウィンドウとして検出しようとしたけど、 GetWindow( IDToHnd(ID), GW_ENABLEDPOPUP ) で取得できるのはダイアログ・ツールチップのほか、サブメニューだけっぽいね。 1個目のメニューは右クリックメニューですらポップアップじゃないらしい。 GetID( "", "#32768" )でいけるって本家の過去ログに書いてあったんだけど、やっぱそれが現実的だった。 メニューは簡単に閉じるから名前なし親子関係なしでも案外正しく取れるもんだ。 ただ、クリックできない病気のためにうまくいかない。 しかし、サブメニューの操作が必要なときはその方法ではIDが取得できないだろう。 サブメニュー用のID取得関数がたまたまできたので次レスに投稿する。 ちなみに、親子関係はメインウィンドウの子ということになる。 間違っても親メニューの子ではないので注意が必要。 いや、もしかすると親メニューの子であり、メインメニューの孫だったりするかもしれないが。 GetIDでやっているような、タイマーと永久ループの指定可能な関数にしてみたんだが、 それをfor文でやれるかなと思ったけど、回数を決定できる条件じゃないとだめだった。 具体的には、step0で永久ループにしようと思ったんですが、実行時に警告が出ました。 浮動小数点演算ではやってはいけない、ちょうど0になったときだけ終了という条件にすることでシンプルにできました。 ちゃんと動くかは試してないけど、まあ大丈夫でしょう。 ちなみに、動作確認などのテストコードに番号を振ってるんですが、そのfor文が108番でした。 間は結構飛び飛びだけど、年末にその番号にあたったんでなんだか縁起がいいかもです。
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 11:57:01 ID:3SgEgPry0] // サブメニューのIDを取得する。 // TLimit=-1 : 永久待ち // TLimit=0 : 1回のみ // 戻り値 0 : 該当なし -1:ダイアログ表示 その他:サブメニューのID Function WaitSubMenuPopup( ID, TLimit = -1 ) def_dll GetWindow(hWnd,long):long:user32.dll Public GW_ENABLEDPOPUP = 6 // ポップアップウィンドウ result = 0 H = IDToHnd(ID) Repeat sleep(0.01) if 0 < TLimit then TLimit = TLimit - 0.01 retH = GetWindow( H, GW_ENABLEDPOPUP ) if ! retH then continue retID = HndToID(retH) Select Status(retID, ST_CLASS) case "#32768" // メニュー result = retID exit case "#32770" // ダイアログが表示されたらエラー中断 result = -1 exit Selend Until ! TLimit Fend
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 18:28:22 ID:Z8Iw0iCS0] FOR文の使い方について教えてください。 以下のように書くと10から20までの数字が画面に表示されます。 FOR i = 10 TO 20 STEP 1 FUKIDASI( i) SLEEP( 1) NEXT ところが各数字を10分の1にすると1から1.9までの数字しか表示されません。 FOR i = 1.0 TO 2.0 STEP 0.1 FUKIDASI( i) SLEEP( 1) NEXT これはどうしてなのでしょうか?
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/31(木) 19:15:53 ID:8NQ2XvCh0] STEP 0.2だと2が表示されるな。 挙動がようわからん… 何か0.124と0.125の間あたりで切り替わるようだが… とりあえず FOR i = 10 TO 20 // 多用するならj = i / 10とかして使う FUKIDASI( i/10) SLEEP( 1) NEXT とかするのが無難そうね。
100 名前:名無しさん@お腹いっぱい。 [2009/12/31(木) 22:41:43 ID:WvG0KKdQP] >>98 誤差の影響です。 コンピュータはすべて2進法で計算していますが、 この2進法では0.1という数字を「正確に」扱う事が出来ないのが原因です。 これは私たちの身の回りにもよくある話です。 私たちが普段使っている10進法では「1/9」を小数で表現すると 0.1111・・・ですよね。 1/9を9個足せばもちろん1です。 しかし 0.111111111111111111と途中で数字を切り捨てて計算を続けたらどうでしょうか? これを9個足しても 0.999999999999999999にしかならず、決して1にはなりませんね。 もちろん工夫をする事によってこの問題を回避する方法を持っている 計算プログラムも存在していますが、難しい処理が必要になるため プログラムの価格が高価であったり計算する時間が長くなったりします。 uwscのようなプログラムでは一般的に誤差を持っています。 誤差を極力減らすためには>>99 さんがおっしゃるように なるべく整数のまま計算をするのが最も効果的な方法といえます。
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 00:05:54 ID:zRjPwPJp0] >>100 お前、頭いいな。 どこ大学出よ?
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 01:08:17 ID:SeLmUNNh0] この場合は誤差はないと思いますけど。 原因は多分、0.0を0と計算できないこと・・・ いや、やっぱり誤差かな? 回数を計算するときにUWSC内部で (2.0-1.0)/0.1とかやってるんだろう。 10進数の0.1は、2進数で・・・ ttp://www.infonet.co.jp/ueyama/ip/semi_cnd/abacus.html > ところで、10進数の 0.1 は、2進数では正確に表すことができず、 その近似値は 0.00011001100110011001100 … になります。 てことは・・やべ>>97 は無限ループだ。 全て100倍して整数値で計算しないと。 んでもって確実に整数値にするためにINT()とか使わないと。
103 名前: 【末吉】 【1885円】 mailto:sage [2010/01/01(金) 01:51:39 ID:SeLmUNNh0] !omikuji !dama
104 名前: 【ぴょん吉】 【605円】 mailto:sage [2010/01/01(金) 01:56:44 ID:JMt2GOx60] てすと
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/01(金) 10:05:06 ID:SeLmUNNh0] > Until !CEIL(TLimit) >>97 は判定をこーするだけでいいな。 複数条件だと論理演算がふつーにはできんからややこしくなるし。 !!(条件1) and !!(条件2)でも通るかもしれんけど。
106 名前:98 mailto:sage [2010/01/01(金) 11:48:35 ID:pAk0r2E30] >>99-100 回答ありがとう。なるほど。 小数点以下を多めに表示させるとこうなりました。 FOR i = 1.0 TO 2.1 STEP 0.1 FUKIDASI( FORMAT( i, 19, 17)) SLEEP( 1) NEXT 1.00000000000000000 1.10000000000000009 1.19999999999999996 1.30000000000000004 1.39999999999999991 1.50000000000000000 1.60000000000000009 1.69999999999999996 1.80000000000000004 1.89999999999999991 2.00000000000000000 0.1を正確に表せないとはいえ、誤差が拡大しないように調整されてるのかな。 回数が狂うのは>>102 の言うように実行回数計算を別途やっていてその時点で誤差が出てるんですかね。
107 名前:98 mailto:sage [2010/01/01(金) 16:45:33 ID:wjuaj82V0] 小数の問題っていろんなところに出るんだなぁ。 ROUND関数って小数点以下を四捨五入する関数なんだと思うけど 入れる数字によってはおかしくなる。 FUKIDASI( ROUND( 12.5)) SLEEP( 1)
108 名前: 【大吉】 【313円】 mailto:sage [2010/01/01(金) 18:36:08 ID:h6GpVGPr0] FUKIDASI( hoge(12.5)) SLEEP(1) Function hoge(num) num = num + 0.5 num = int(num) Result = num Fend これだとまともに動くなw 中でどんなことやってるんだろうか…
109 名前:名無しさん@お腹いっぱい。 [2010/01/01(金) 21:30:04 ID:RTODHS/O0 BE:4155991698-2BP(0)] 恐らくヘルプにも四捨五入とは書かれておらず「丸める」とあるはずです。 >>107 の挙動を見る限り一般的に使用されている「偶数丸め」をそのまま採用しているかと。 偶数丸めというのは12.5のように12と13の中間の値を取る場合は 偶数側の値に切り捨てを行う処理方法です。13.5であれば切り上げて14とします。 round(14.5)も14になるはずですよ。
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/03(日) 10:53:27 ID:r0VUyURQ0] >>90 の修正 文字列をEVALに渡す場合、ダブルクォーテーションを付加しないと変数扱いになる。 数値を渡す場合は不要なので、SrchDomTreeを呼ぶときに付加しておいたほうがいいっぽい。 // SrchDomTree( "func", IE.document.getElementById("my_footer"), "<#DBL>文字列<#DBL>", "123" ) // Function SrchDomTree( func, elm, env1 = 0, env2 = 0, env3 = 0, env4 = 0 ) // result = empty // // 先に直接の子ノードを調べる // for i = 0 to elm.childNodes.length - 1 // ret = eval( func + "(" + "elm.childNodes[i]" + "," + env1 + "," + env2 + "," + env3 + "," + env4 +")" ) // ifb !IsEmpty(ret) then // result = ret // exit // endif // next // // 孫ノードに入っていく // for i = 0 to elm.childNodes.length - 1 // ret = SrchDomTree( func, elm.childNodes[i], env1, env2, env3, env4 ) // ifb !IsEmpty(ret) then // result = ret // exit // endif // next // Fend おまけ // ifb 3 = elm.childNodes[i].nodeType then // テキスト // elm.childNodes[i].nodeValue // テキストデータ
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 14:59:27 ID:WsNY715b0] softalk使って日本語しゃべらせたいんだけど、素人過ぎてショートカット乱立させてクリックさせるのが限界です・・・。 上品な立ち振る舞いで話させるには、どうプログラムしたら良いですかね?
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 16:22:04 ID:deSK2IBq0] >>111 doscmd or exec と softalk の引数指定
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 20:02:55 ID:idKMoxPT0] ヘルプすべて印刷して一読すると良いよ それが面倒臭いならテンプレの本買え
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/05(火) 23:22:45 ID:WsNY715b0] >>112-113 ありがとよ。かなりスマートになった。 exe名入れるときにメモ帳は"notepad"でいいのに、 softalk指定するときはアドレス入れないといけないのは何でなんだ? プログラムの基礎の質問なんだと思うが...
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 00:07:16 ID:12AIG4f80] そのディレクトリにパスが通っているかという話。 環境変数のPATHにそのディレクトリを登録すれば(=パスを通せば)行ける。 詳しくはググるよろし。
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:48:14 ID:j0L+SVeO0] ECMAScript みたいに 関数自体を変数に代入する方法ないかな? 変数を () 付きで実行することで その変数に代入された関数を実行するようにしたい
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 03:57:32 ID:j0L+SVeO0] あ、evalあるのね これでできそうです お騒がせしました
118 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 07:29:33 ID:EasGK5JXP] 少しだけ相手してやんよww 若いだろ?至りってやつだな
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:00:09 ID:jv+N909k0] >>118 じゃあこれデバッグしてください。 ttp://karimofu.org/dlp/mofu1_7789.zip.php ダウンロードパス:saymove
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/06(水) 10:01:35 ID:jv+N909k0] ていうか1月6日に閉鎖ですか。 これから先自作スクリプトはどこにうpすればいいのか。
121 名前: ◆fdAnbU5Z6U mailto:sage [2010/01/06(水) 11:44:36 ID:EasGK5JXP] キモイホモだなぁ!おまえブサメンでキモブサだろ?少しだけ相手してやんよww 若いだろ?至りってやつだな
122 名前:98 mailto:sage [2010/01/08(金) 14:59:40 ID:VCRefa1D0] >>109 その通りですね・・・偶数丸めというのを知らなかったので。 お騒がせしてすみませんでした。
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 20:16:22 ID:3e5Ape4g0] 長文で失礼します。 最近uwscを勉強しはじめました。 uwsc本を参考に連番のIDでサイトにログインするように作ってみました。 一応出来たのですが、ID001からID030までを連続で入れることが出来ないため() 1〜9用マクロと10〜30用マクロに分けて使っています。 もっとシンプルにしたり、1〜30までの連番を1つのマクロに統一する方法はありますでしょうか? おそらく初歩的なことなのでしょうが質問お願いします。 _________________________________________ 例)ログインIDは "id001"〜"id030" パスワードは ps >SUUJI = 1 >FOR A = 1 TO 30 >KBD(VK_i) >KBD(VK_d) >KBD(VK_0) >SENDSTR(,SUUJI) >SUUJI = SUUJI +1 >KBD(VK_TAB) >KBD(VK_p) >KBD(VK_s) >KBD(VK_TAB) >KBD(VK_ENTER) id入力の所を、 1〜9用マクロは、KBD(VK_i) KBD(VK_d) KBD(VK_0) KBD(VK_0) 10〜30用マクロはKBD(VK_i) KBD(VK_d) KBD(VK_0) にして使っています。 一本化するにはどのように直せば良いでしょうか?
124 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:54:28 ID:zUTDSHGw0] >>123 IESetDataを使おう。 Formatで0埋めは出来ないようだから、 z = "0" zz = "00" とかして、 for i = 1 to 30 ifb i < 10 hoge = zz + i //数値と文字列足すと文字列として足してくれる else hoge = z + i endif IESetData(IEID,hoge,"ID") IESetData(IEID,"ps","PASS") 〜〜 next とか、そんな感じ。 RecIEで出力させて見れば解ると思うよ。
125 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 22:55:55 ID:zUTDSHGw0] インデント入らなかった、スマソ for i = 1 to 30 ifb i < 10 hoge = zz + i //数値と文字列足すと文字列として足してくれる else hoge = z + i endif IESetData(IEID,hoge,"ID") IESetData(IEID,"ps","PASS") 〜〜 next
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 13:15:51 ID:ZYqbg1Ld0] 自動ログインスクリプトを作成してみたのだが、サーバーエラーが出た場合の回避方がわかりません。 ifを使う事はわかったのだが、ピッタシに来る例文が探しても見つからないのです。 自力で色々試すもうまく行かず・・・どなたかご教授下さいませ。 以下スクリプト //IEを開いてページ表示 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("http://×××××") //5秒停止 sleep(5) //接続表示待ち while True if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend id = GETID("Internet Explorer") //ログインID入力 IESETDATA( IE, "●●●●", "id" ) IESETDATA( IE, "※※※※", "pass" ) CLKITEM(id,"ログイン", CLK_ACC or CLK_MUSMOVE) //5秒停止 sleep(5) //接続表示待ち while True if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend この下にもし「サーバーエラー」が出た場合は再度http://×××××に戻って 再度ログインID入力を再実行したいのだが・・・
127 名前:名無しさん@お腹いっぱい。 [2010/01/16(土) 16:16:24 ID:hORuBIiX0] >>126 ttp://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=2800 IE = CREATEOLEOBJ("InternetExplorer.Application") ←これはループの外 IE.visible = True > while true > 受信処理(>>126 のスクリプトのうち最初の2行を除く部分) > if 0 = Pos("サーバーが混み合っています", str) then break > // 受信エラー > sleep(60) > wend > // 正常に受信
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:08:00 ID:L+sAYtsZQ] わたくし初心者でちょっと困っているのですが FAQにある 「負荷が高い時に ウィンドウのオープンをスクリプトが待ち切れず・・・」 の答えとしての↓ スクリプト内のGETID関数に第3引数(待ち時間指定)を付けて下さい。 GETID("xxxx", "xxxx", -1) // -1:画面が出るまで待つ 同様に括弧内に-1をつけても思うように実行されません(待ってくれないのですが) どなたかご教授お願いしますorz
129 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:20:02 ID:hORuBIiX0] >>128 ウィンドウが出現しても、そのコントロールの配置に時間がかかる場合があります。 その場合、ウィンドウは存在しているからIDは取得できますが、コントロールがないので操作に失敗します。 コントロールを利用可能になっているか確かめる必要があります。 ウィンドウが出現していることを確認するには、Statusでタイトル名などを取得したらいいですよ。 本当にGetIDに失敗していたら取得したIDは-1になっているはずなので、その時点ではじくこともできるでしょう。
130 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 20:21:01 ID:U6EzK14SP] 待ってくれないって事は戻り値は-1なの? 別ウィンドウのを取得してるんじゃね?
131 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 01:11:03 ID:SVOvo/dN0] 数字を文字列として扱うにはどうすればいいでしょうか? intA = 10 intB = intA * 2 //20 Print intA + intB //"1020"と表示したい 文字列結合子と演算子が同じ"+"なので、不可能なのでしょうか?
132 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 02:22:14 ID:2D/YPlQ90] >>131 // フォーマット 戻値 = FORMAT( 数値, 幅, [小数点桁 or 16進指定] ) 引数 数値: 数値 もしくは文字 幅: 出力される文字数 (数値より指定幅が大きい時は左側をスペースにて補完) 数値ではなく文字が指定された場合は その文字で幅分を埋める 小数点桁 or 16進指定: 表示する小数点桁数、 また -1が指定された場合は16進数表記にする 戻値 フォーマットされた文字列
133 名前:123 mailto:sage [2010/01/17(日) 06:07:26 ID:rLsFwGWi0] >>124 様 数字の所はIFで処理するといいのですね、なるほどです。 昨日から直す作業をしてるのですがまだ動いてないので(IESetData関数がない、と言われてしまう…)もう少し練習をしてみます^^ 試しに使っていたのでフリー版を利用していたのですが、RecIEの機能を調べていたらとても便利そうですね。 とても参考になりました。 ありがとうございました。
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:06:50 ID:mb/jokyZ0] >>131 print "" + intA + intB もしくは print intA + "" + intB print intA + intB + "" はNG
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 10:26:16 ID:gXklMUNy0] //スペースにて補完→0にて補完へ変更…それだけ(^^; for i = 1 to 30 hoge = ChgMoj( Format( i, 3 ), " ", 0 ) next
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/17(日) 13:01:39 ID:SVOvo/dN0] >>132 ,134,135 レスありです。 >>132 その関数は知っているのですが、実は16進数で合体させるため、Formatを多用する以外に方法があるかどうかの確認でした。 説明不足でわざわざコピペしていただいてありがとうございました。 >>134 この方法がスクリプトを後で見返したときに一番単純で理解しやすそうですね。 昔VBでVal関数を知らなかったときに文字列に+0して数列に変換していた方法を思い出しましたw
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 20:29:01 ID:E18f84ud0] UWSCProを使用しています。 一度exe化したものを、再び.uwsに戻す事は可能でしょうか? 戻せないにしても、exeの物の中のスクリプトを表示する事は出来るのでしょうか?
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:29:37 ID:dm9R5tz30] >>137 たぶんバイナリエディタで開くと最後にくっついてるんじゃね?
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/19(火) 21:37:14 ID:/h2JRfae0] >>137 Pro版のEXE化について質問です。 まだ購入していないのですが、EXE化時にスクリプトをコンパイルしていないとの書き込みがありました。 www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=617 この時には、生のスクリプトがEXEに連結されるだけですか? そうである場合、暗号化後のスクリプトをEXE化の元に指定することもできますか? EXE化後に、EXEをエディタで見たらそのままスクリプトが見えてしまわないかと気になったもので。。。 宜しくお願いします。 DATE:2007/3/25(Sun) 15:04 No.628 RE:EXE化時のスクリプト内容 umiumi 暗号化して取り込んでいますので、自分で変換作業をしておく必要はありません。
140 名前:137 mailto:sage [2010/01/20(水) 01:35:54 ID:+aeXo+8F0] >>138139 バイナリエディタで見てみましたが私には分かりませんでした。 掲示板のQ&Aの回答を見る感じだと、一度exe化してしまったら戻すことは出来ないということで合ってますでしょうか? 暗号化を解く方法があるのであれば別でしょうが…
141 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 22:41:47 ID:ip1Zjd0h0] WINDOWS 7でIE8を使用しております。 とある図書館にログインして自分の借りている図書および予約の図書を確認するスクリプトを作っております。 しかし、IDとパスワードは入力さるのですが、「ログイン」のボタンがど〜〜〜しても押してくれません。 大変すみませんが、教えていただけないでしょうか? 次のように実装しております。 ie = CreateOLEObj("InternetExplorer.Application") ie.Visible = True id = GETID("Internet Explorer") ie.navigate("https://lib.city.shinagawa.tokyo.jp/cgi-bin/Sopcsryc.sh?p_mode=1&proc=kyj") while True // 接続表示待ち if (! ie.busy) and (ie.readyState=4) then Break sleep(0.1) wend id = GETID("Internet Explorer") //ログインID入力 IESETDATA( IE, "123456789", "ryno" ) IESETDATA( IE, "9876", "passwd" ) CLKITEM(id,"ログイン", CLK_ACC)
142 名前:名無しさん@お腹いっぱい。 [2010/01/20(水) 23:02:51 ID:8bN4FDNJ0] >>141 本家掲示板にIDとパスワードが書いてあるんでログインスクリプト動かしてみたけど 被害者が襲撃に来た(マジで) うちの地元の警察は個人情報をリークして権力者等に直接襲撃許可を出す悪い癖があるんだ。 親切に教えてやろうと思った奴を罠にかけるのが狙いかもしれないので触らずに削除依頼出すべし。
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:13:48 ID:9xULNIKf0] >>141 ie.navigate("javascript:onClick(this.execCGI(1));")
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/20(水) 23:32:14 ID:8bN4FDNJ0] >>141 ソース見ると<input type="button" value="ログイン" onClick="execCGI(1)"> 名前もIDもないので"ログイン"の文字をクリックするか、itemsを順番に見ていくしかないな。 execCGI(1)って関数実行してるからこれを呼び出せればそれでもいいかも。 ClkItemを使う場合、IDのとり方が悪い。 × id = GETID("Internet Explorer") ○ ID = HNDToID(IE.HWND) そして、「ログイン」という文字はタイトルバーにもあるので、もしかするとこちらをクリックするかもしれない。 番号に2を入れてみるとうまくいくかも。 > CLKITEM(id,"ログイン", CLK_ACC, true, 2) >>143 おお。その手があったか。 しかしOnClickは余計じゃないか? > ie.navigate("javascript:this.execCGI(1);")
145 名前:141 [2010/01/21(木) 00:41:19 ID:BYisD/DI0] >>143 様、 >>144 様、 う、動いたぁ!ログインボタンが押せたよぉ! こんなに早いレスがもらえるなんて、感謝感激です。 >>142 何を言ってるんだかよくわからんかった。
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 04:34:42 ID:el+zjomK0] IESetData(IE,True,"","ログイン") この場合↑を使うとすると引数入れる方法ある?
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 09:17:09 ID:prTvVb6F0] >>141 いまさらだけど、 ie.document.forms(0).elements(6).value = "ryno" //利用ナンバー ie.document.forms(0).elements(7).value = "passwd" //パスワード ie.document.forms(0).elements(8).click //ログインボタンを押す こっちのほうが安定してるよ。たぶん。 こいつを使って調べた↓ nem.symphonic-net.com/uwsct/HTMLStarkNaked.uws.txt
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 10:50:10 ID:qBCWT2U/0] >>147 141じゃないけど親切な人や
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:50:21 ID:UbXqB2Oa0] >>147 おーすげー でもItemsはころころ変わる可能性があるからな。 やっぱり名前が使えるところは名前を使って ログインボタンだけループでまわすべきだろう。 まあログインページの変更はあまり頻繁には起きないけども。
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/21(木) 12:54:41 ID:UbXqB2Oa0] >>146 // Web上(IE)に値を設定 戻値 = IESETDATA( IE, 値, Name, [Value, 番号] ) IE, IE, 値, True, Name, "", [Value, "ログイン" 番号] ) ほらここ空いてる
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/22(金) 23:14:18 ID:5GAs0GCP0] >>149 名前を使いたいなら ie.document.all.tags("input").ryno.value = "なんたらかんたら" ie.document.all.tags("input").passwd.value = "うんたらかんがら" または ie.document.forms(0).elements("ryno").value = "なんたら" ie.document.forms(0).elements("passwd").value = "うんたら" でおk。
152 名前:141 [2010/01/23(土) 00:13:09 ID:ER0elP5I0] 再度質問に来たんですけど、さらなるレスが付いていてビックリでございます。 いただいたレスを再度学習してから、また質問に来ることにします。 本当に、ありがとうございます。
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:06:38 ID:bTNIzlWA0] UWSCで、関数の中で他の関数を使用することって可能ですか?
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 09:19:46 ID:bTNIzlWA0] すいません、ちょっと勘違いしてました ↑は忘れてください・・・
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:46:50 ID:vVvESZ+G0] シェア版を試しにインスコしようとすると、トロイとしてはじかれる。なにこれ?
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:53:42 ID:khCmP7150] >>155 なんだろうね。 OSとかウィルスソフトとか現象とかを本家掲示板に報告した方がいいんじゃね?
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 11:44:21 ID:PN5QGmYZ0] IEのイベント使ってたらUWSCがメモリ不足やらランダムに型が違うとか DLLでアクセス違反とかでまくりで訳が分からんかったけど、 BeforeNavigate2をNavigateComplete2に変更したらぱったりエラーも出なくなったよ。 以前NewWindow2でキャンセルフラグ立ててなくて同様にエラーが出まくってたんだけど、 BeforeNavigate2も同様にキャンセルフラグを処理しなきゃいけなくて、 もしかしたらフラグを間違ってセットしてたのかもしれない。 NavigateComplete2ならフラグがないからどっちセットするかで悩まなくて言いし、 なによりBeforeNavigate2のイベント発生時点ではIEオブジェクトとかプロパティが無効になってて 待ちループですらエラーになる状態で、回避するのに苦労したんだけど、そういう処理も必要なくなった。 っていうか、イベントの使い方を間違っていたのかも。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 21:49:27 ID:QYiiO/FR0] んでスクリプトは一応完成したけどどーも無用の物を作っちゃったらしくて評判が悪かった。 だからこんなのつくりました的なものを紹介だけしときますね。 自動ダウンロードスクリプト公開中 ttp://www1.axfc.net/uploader/Sc/so/77860 7-zip32.dllで圧縮メソッドがBzip2で圧縮してたから Windows標準では解凍できないようです。 動画ページに直リンがあったりするけど、てきとーな日本語入れてあったりするので使える保証がなく、 直リンにnavigateするとなぜかバイナリファイルをブラウザで開いたりするサイトが多くてやっぱり使える保証がなく、 かといってftpでダウンロードするAPIではいつ終わるとも知れず、 結局自分でリンク貼って右クリでダウンロードするしかなくて、 だけど万が一もあるので入力禁止措置も取ってないのでちょっとマウス持ってるとすぐ止まる。 スレッドで5秒後に確実に解除すればよさそうなんだけど メインループが終了したときはスレッドも巻き添え食っちゃうから確実ではないし。 いや、スクリプトが終われば復帰できるのかな? んで、動画サイトが2次サイトだから画質が悪くなっちゃってるのが多くて ダウンロードしてももったいなかったりする。
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 23:47:43 ID:Q/Gu8X0B0] >>158 っ国語力とプログラミング力の関係 解説編 ttp://jibun.atmarkit.co.jp/ljibun01/rensai/genius/04/01.html
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:52:02 ID:2o/R36uY0] RecIEを起動させて 記録→アドレス入力→ok でサイトに飛ぼうとすると Racie L20が存在しません ってダイアログが出てきて先に進めないんだけど同じ症状出たことある人いる? 4.4cからだったと思うけどアップデートしたら途端に動かなくなった
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 00:55:45 ID:Zow1+JjM0] >>159 ああ、日本語って難しいね。 短く区切って書くと、悪口で埋め尽くされてしまっていたから 無理やりでもつないでしまう癖がついちゃったんだ。 これでも学生時代は国語はほぼ満点でやってきたんだけどね。 敬語だけはいまいち理解できんかったけど。 敬語ってややこしいのに授業時間が少なすぎ。 正しい敬語を使う環境が身近にないから、練習すればするほどおかしくなっていく。(福岡県の筑豊出身) これでも親は地元企業の課長〜次長だったりする。 今度は短く区切りすぎ?
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:03:42 ID:Zow1+JjM0] >>160 有料の機能だし本家で聞いたほうがいいと思うよ。 OSとIEと、UWSCの問題なかったバージョンとかも必要だと思う。 差し支えなければそのアドレスもね。 ところで、RacieじゃなくてRecieだよね?
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:26:10 ID:Zow1+JjM0] >>159 そういえば俺の後輩のやる気のないプログラマは 「俺文系なのにプログラマやらされてるんです。 文系だからさっぱり分かりません。」ってゆってた。 「ああそう。」としか答えようがないっつーの。
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 18:20:46 ID:WMRBoQc30] 頭悪そうだなお前
165 名前:名無しさん@お腹いっぱい。 [2010/02/05(金) 18:13:12 ID:hEkLWXs20] HTMLソースを取得して差異があればmsgboxが出る程度の 簡易webチェッカーのようなものを作ろうと思ってるのですが 窓を非アクティブのままwebを更新する(戻るとか進むとかも)方法を教えて下さい IE.Navigate(IE.LocationURL) や IE.Navigate(URL) も試したのですが ↓のようなサイトでは思うように更新後のソースが取得できませんでした ttp://www7.big.or.jp/~fujiko/php/time_get.php 仕方ないので今は窓を開いて CTRLWIN(id, ACTIVATE) KBD(VK_F5) とか CLKITEM(id, "更新", CLK_ACC) で更新してるのですが、非アクティブで実行する方法を教えて下さい
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:04:44 ID:MmS/cyj/0] winhttpかmsxml2を使う
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:09:56 ID:vxp7+xcP0] >>165 navigateしたあとちゃんと待ちループまわさないと駄目です。 また、nabigateが動き出す前に待ちループに入ってしまうと素通りしてしまうので、 それまでは待ちループに入らないようにする必要もあります。 例1) IE.Navigate(url) sleep(3) REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4 例2) timeout = 3 IE.Navigate(url) while !IE.busy AND IE.readystate = 4 sleep(0.1); timeout = timeout - 0.1 if timeout < 0 then break wend REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4 例2の場合はtimeoutがないと、一瞬で表示が完了した場合に永久ループになります。 navigateの他にRefreshがあり、こちらは引数がいらないので手軽です。 中止 Stop 更新 Refresh 前に進む GoForward 戻る GoBack Stopはページが不完全になるので、DOMアクセスでCOMエラーが発生します。 これはStop→Refreshとした場合でも起こるので注意が必要。 WebBrowserコントロールでタブブラウザを作る(.netですが一部ソースは参考になると思います。) ttp://codezine.jp/article/detail/659?p=3
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/05(金) 20:57:44 ID:hEkLWXs20] >>166 レスありがとうございます 一応 CreateOLEObj("MSXML2.XMLhttp") も試していたのですが 思うような結果が得られず四苦八苦していたのでした >>167 レス感謝です >nabigateが動き出す前に待ちループに入ってしまうと素通り になっていたようでした 結果的には IE.Refresh() で期待通りの結果が得られました 今から進む、戻るも試してきます ありがとうございました
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:30:56 ID:bC6Cwg/o0] 文字列A xxxxx 文字列B ある文章の中で、特定の文字列AとBに挟まれた「xxxxx」という文字列を抜き出すにはどうするのが スマートですかね? アドバイスください。
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:50:08 ID:IY8b0Hns0] >>169 文字列にもよるけど、 とりあえずBETWEENSTRていうのがある。 戻値 = BETWEENSTR( 文字列, 文字列A, 文字列B, [n個目, 数え方フラグ] ) ところで、 ;っていうのはどういう理由で入れてたんですか?
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 14:52:23 ID:IY8b0Hns0] 訂正 ;の部分は & # 1 6 0 ;
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:20:55 ID:MuLbdSUi0] >>168 追記 GoForward も GoBack も順調に動きました 改めまして感謝です >>171 自分(PC専ブラ)には見えませんが、&#160はhtmlの半角空白みたいです BetweenStrの話題があったので自分も更に質問です HTMLソースの 111~ 222~ 333yyy のような文字列から 333 を抜きたい場合 BetweenStr(略, "xxx", "yyy", n) //yyyの前の文字を抜きたい xxxとnの部分に何を入れれば良いのかが分かりません 宜しければ参考までに教えて下さい
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:30:15 ID:MuLbdSUi0] 説明が不十分だと思ったので>>172 追記 正確には 111~~<br> 222~~<br> 333yyy という文字列で、"<br>", "yyy", 1 とか設定しても 222〜333まで抜き出してしまってうまくいかないのです 今は 変数1=(略, "<br>", "yy", 1) 変数2=(変数1, "<br>", "y", 1) と複数段階に分けて書いてるのですが、これが簡潔に書けるなら知りたいな、と 宜しくお願い致します
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 15:47:36 ID:IY8b0Hns0] >>173 ( マイナス値で指定すると後ろからサーチ) BetweenStr(略, "<br>", "yy", -1) これは試してみました? > これが簡潔に書けるなら 手順が複雑にはなりますが、正規表現ライブラリを使えば 行頭(^)+不特定文字列(.*)+”yyy”で表現できる場合があります。 <br>のあとに改行コードが入っているならですが。 スクリプトをすっきりさせたいと言うことなら、自作関数に置き換えるとかでもいいと思います。
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/06(土) 17:07:22 ID:MuLbdSUi0] >>174 マイナス値を使っても一発で目的の文字列に到着しないんです 一行で簡単に書ければ....と思ったのですが、諦めます 正規表現は、自分にはまだ早すぎる(理解できてない)ので もう少し勉強してから挑戦してみようと思います ありがとうございました