[ 掲示板に戻る ]

過去ログ閲覧モード

htmlfileでクラスが取得できません… / もも
以前、7月頃にPC内のhtml断片ファイルの操作についてCreateOleObj("htmlfile")を
教えて頂きまして、そのときは解決したのですが、今回、別の作業で流用しようと
したらClass名が取得できずに困っております。

uwsc本体とは微妙に違う質問で恐縮ですが、質問する場所がここしか思い当たらず…
どうか間違いの添削をお願いします。


htmlfile = CreateOleObj("htmlfile")
htmlfile.write( html文 ) // html文をオブジェクトに全文読込

// 失敗します
a = htmlfile.documentElement.document.getElementsByClassName("sub_title")

MsgBox(htmlfile.documentElement.document.getElementsByTagName("h1").item(0).outerHTML)//OK
MsgBox(htmlfile.documentElement.document.getElementsByTagName("h1").item(0).getAttribute("lank"))//OK
MsgBox(htmlfile.documentElement.document.getElementById("name").outerHTML)//OK
MsgBox(htmlfile.documentElement.document.getElementsByClassName("sub_title").item(0).outerHTML)//NG


TextBlock html文
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="profile.css">
<h1 id="main_title" lank="LL">Who</h1>
<p class="sub_detail">
<div id="name">
名前:田中

</div>
</p>
<h2 class="sub_title" id="comment">コメント</h2>
<p class="sub_detail">
不真面目
</p>
<h2 class="sub_title">base_data</h2>
<p class="sub_detail">
性別: 男

</p>
EndTextBlock

No.4724 2017/11/21(Tue) 12:58:07

Re: htmlfileでクラスが取得できません… / satocha
htmlfileオブジェクト(mshtml.dll)のデフォルト動作がIE7相当なので、getElementsByClassNameメソッドを持っていないため失敗するようです。メタタグにIE="Edge"を指定すればいいので、
textblockの中の

<meta charset="utf-8">

を次のようにしたらどうでしょう。

<meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=edge"/>

No.4725 2017/11/21(Tue) 14:05:10

Re: htmlfileでクラスが取得できません… / もも
早速ありがとうございます!

実環境でも取得できてるようです。
コレは自力ではたどり着けませんね…

幸いローカルファイルなので、htmlfile.write()の直前にテキスト置換で
http-equiv="X-UA-Compatible" content="IE=edge" を入れ込むようにして
なんとか対応しようと思います。

ありがとうございました。

No.4727 2017/11/21(Tue) 19:00:29
MMV で動かすのとマウスを手で動かすのとの違い / こがっく
WIN10 IE11 でマウスを手で動かすと、ステータスバーにリンク先 URL が表示されますが、MMV でマウスカーソルを移動してもステータスバーにリンク先 URL が表示されません。
ちなみに MMV で動かすと MUSCUR も変化してくれません。
POSACC でステータスバーに表示される URL を取り込みたいのですが、この方法でうまくステータスバーに URL を表示させる方法はありませんでしょうか。

No.4696 2017/11/12(Sun) 15:43:10

Re: MMV で動かすのとマウスを手で動かすのとの違い / satocha
MMVでリンクにマウスオーバーさせると、ステータスバーにアドレスが表示されるはずです。
そうなっていないのは、IEのウインドウがアクティブになっていないからではないでしょうか。
ctrlwinとかACW関数でIEを最前面+アクティブにして試してみてください。

※ステータスバーからの情報取得は本掲示板の「No.4343 2017/08/22(Tue) 16:36:07」で stuncloud さんが解説しています。

No.4698 2017/11/13(Mon) 07:37:50

Re: MMV で動かすのとマウスを手で動かすのとの違い / こがっく
ACW で IE がアクティブになっていても、リンク上にマウスカーソルを MMV で移動させた場合にはステータスバーにアドレスが表示されないのです。
逆に、IE がアクティブでない状態い場合でも、手でマウスを動かしてリンク上にマウスカーソルを移動するとステータスバーにアドレスが表示されます。
MMV でマウスカーソルをリンク上に動かした後、手でマウスを1ドット分でも動かすとステータスバーにアドレスが表示されます。
Microsoft Edge でも同様でした。
MUSCUR が変化しないという観点でその他のアプリでこのような現象が起きるものはものは沢山試したわけではありませんが特にみつかっておりません。

No.4699 2017/11/13(Mon) 10:41:52

Re: MMV で動かすのとマウスを手で動かすのとの違い / satocha
Windows7で問題がなかったので、先ほどのように書きましたが、今、Windows10でやってみると確かにおかしいですね。

IEの問題ではなく、そもそものMMVが効いていない感じです。

UWSC同梱のgrugru.uwsも、電卓は動くけれど、マウスカーソルは動きませんね。

No.4701 2017/11/13(Mon) 16:02:52

Re: MMV で動かすのとマウスを手で動かすのとの違い / こがっく
C で SetCursorPos() を使って簡単な EXE を作ってやってみましたが、MMV と同じ結果でした。
#この EXE を UWSC から呼び出して対策しようと思いましたが、あえなく失敗。
でも、フリーソフトの KBMouse で KB からマウスカーソルの移動をすると、マウスを手で操作するのと同じ結果になります。
IE が SetCursorPos() でのカーソル移動だけでは物足りない何かを期待しているように思います。

No.4702 2017/11/13(Mon) 18:07:57

Re: MMV で動かすのとマウスを手で動かすのとの違い / satocha
No.4701 の環境は、Linuxホスト上のVirtualBoxで構成したWindows 10 でした。

どうもこがっくさんとは症状が違うような気がして、Win10実機で再度GruGru.uwsを動かしたところ、
MMVでマウスカーソルは動きました。

現時点で、仮想環境下でMMVによるマウスカーゾル移動はできていません。

No.4703 2017/11/14(Tue) 07:31:37

Re: MMV で動かすのとマウスを手で動かすのとの違い / こがっく
//satochaさん、色々試していただきありがとうございます。
//私の場合 XP->XIN10 にしたので途中はわかりませんが少なくとも XP では使えていた方法なんですけどね。
//リンク文字が被っていてリンク先が違う場合、この方法でリンクの違いをチェックするなどの使い方もできます。
//手操作を加える以外の回避策が中々みつかりません。
//ご参考↓マウスカーソルが MMV で上端までじわじわ上がっていくテスト用スクリプト(上端で終了)。実行中の操作も可。
while G_MOUSE_Y
MMV(G_MOUSE_X,G_MOUSE_Y-1)
SLEEP(0.1)
wend

No.4704 2017/11/14(Tue) 14:33:29

Re: MMV で動かすのとマウスを手で動かすのとの違い / こがっく
自己完結ですが、対策方法をみつけましたのでご紹介します。
まずリンクの文字列上にマウスカーソルがあるとします。
POSACC で監視してリンクの文字列から外れるところまで MMV で1ドットごとマウスカーソル移動します。
上下左右どの方向でもかまいません。
MMV で1ドット戻してマウスカーソルをリンクの文字列上に戻します。
BTN(RIGHT,CLICK) で右クリックします。
(これで何故かステータスバー上にリンク先 URL が表示されます)。
念のためちょっと待ちます。
マウスカーソルは移動せずにステータス上に表示されるリンク先を POSACC で取得します。
KBD(VK_ESC,CLICK) で ESC キーを打鍵して開いているポップアップを閉じます。
以上です。

No.4710 2017/11/16(Thu) 16:13:32

Re: MMV で動かすのとマウスを手で動かすのとの違い / umiumi
>MMV でマウスカーソルを移動してもステータスバーにリンク先 URL が表示されません。
確認しました。
対処します。

No.4718 2017/11/17(Fri) 23:34:33
画像認識について / ゆーー
UWSCにはいつもお世話になっています。
画像を認識させてその画像があればクリックというスクリプトを作っています。
画像ファイルをキャプチャ(24ビットビットマップ)してCHKIMGでチェックを行い、
画像認識が正常に行われクリックしたい所がクリックされることを確認し
しばらく正常に流れるかどうかを確認し一連の動作が繰り返し動くことを確認しています。

最近ですが、この画像ファイルを変更もしていないのに認識しなくなることがあり
そのたびに再度画像をキャプチャして画像を作り変えています。

結構頻繁に起こるのですが何か解決策はないでしょうか?

No.4711 2017/11/16(Thu) 16:23:18

Re: 画像認識について / ゆーー
環境はWin10 64bit
Chromeブラウザを使ってゲームの画像を認識させています。

No.4712 2017/11/16(Thu) 16:24:40
uwscによる音声合成について / マロン
uwscの音声合成においでSPEAKを使っているのですが、SPEAKで
スピーチエンジンがMicrosoft Speech Platform(優先)が使用されて
SAPI5を使うことができません。
今は、棒読みちゃんを使ってさとうささらを使いたいと思っているのですが
優しいお方がいましたらやり方を教えていただきたいです。
よろしくおねがいします

No.4709 2017/11/16(Thu) 10:48:33
入れ子になった table からのテキストデータ取り出し方法 / リキュール
以下の方法でAAA、BBB、CCC は取り出せますが DDDの取り出し方法が分かりません。

table = IE.document.all.tags("TABLE").item(0)
data = table.rows.item(0).cells.item(0).innerText //AAA
print data
table1 = IE.document.all.tags("TABLE").item(1)
data = table1.rows.item(0).cells.item(0).innerText //BBB
print data
data = table1.rows.item(0).cells.item(1).innerText //CCC
print data

htmlソースの部分
<table class="oDrListGrid">
<tr>
<td>
<a>AAA</a>
</td>
<table class="itemDetailTbl">
<tr>
<td>
<a>BBB</a>
</td>
<td>
<a>CCC</a>
</td>
</tr>
</table>
<td>
<a>DDD</a>
</td>
</tr>
</table>

No.4633 2017/10/31(Tue) 22:23:36

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
そのまま保存しHTMLに表示させると下記のように修正されます。
 <table class="oDrListGrid"><tbody>
  <tr>
   <td><a>AAA</a></td>
  </tr>
 </tbody></table>
 <table class="itemDetailTbl"><tbody>
  <tr>
   <td><a>BBB</a></td>
   <td><a>CCC</a></td>
  </tr>
 </tbody></table>
 <a>DDD</a>

要はテーブル構造がおかしいのでDDDがテーブルから弾かれているのです。
テーブル内にテーブルを収めたいのであれば、TDに内包する必要があります。

No.4635 2017/11/01(Wed) 08:58:14

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しろまさ さん、お世話になります。

>要はテーブル構造がおかしいのでDDDがテーブルから弾かれているのです。
そうですね。記載を間違えてしまいました。
別の質問をしたいのですが、全体のtable数の取得は
table = IE.document.all.tags("TABLE").length
で取れるのですが入れ子になっている内側のtable数が複数有り、その個数が変動する場合、内側のtable数の取得は無理でしょうか。

No.4645 2017/11/01(Wed) 19:24:27

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
上のTABLEエレメントから.getElementsByTagNameで下っていけば取れますし、
.all.tagsからでも大抵はIDやNAMEやClassなどで判断できません?

親テーブルにall.tagsしても取れます。
table = IE.document.all.tags("TABLE").item(0)
MsgBox(table.all.tags("TABLE").item(0).innerText)

 <table class="oDrListGrid"><tbody>
  <tr><td><a>AAA</a></td></tr>
  <tr><td>
   <table class="itemDetailTbl"><tbody>
    <tr><td><a>BBB</a></td></td></tr>
   </table>
  </td></tr>
 </table>

No.4646 2017/11/02(Thu) 08:24:09

Re: 入れ子になった table からのテキストデータ取り出し方法 / stuncloud
なんかDOMの理解が足りない感じしますね
コード書く前に開発者ツール(F12)のコンソールで色々試す習慣をつけることをオススメします
あともうこういった階層構造がどうとかいうのはgetElementsByXXX()使うの止めましょう

tables = ie.document.querySelectorAll("table.oDrListGrid table.itemDetailTbl")

いまはもうquerySelectorAll()が使えないIEなんて存在しないはずなので

> table1.rows.item(0).cells.item(1)
1行目の2つ目の要素がほしいならこんな書き方もアリ
td = ie.document.querySelector("table.oDrListGrid table.itemDetailTbl tr:nth-child(1) td:nth-child(2)")

querySelector/querySelectorAllに渡す引数については「CSSセレクタ」を調べてみてください

No.4647 2017/11/02(Thu) 10:07:09

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
最近目に余るので、お言葉を返しておきます。

> なんかDOMの理解が足りない感じしますね
こういう嫌味をわざわざ書くのはやめません?
質問しにくい雰囲気を作るだけです。

> getElementsByXXX()使うの止めましょう
否定をするなら明確な理由を書くべきでは?
理解してないから質問するわけで、なぜこれがダメで、なぜこれが良いのか。
相手を納得させられなければ、ただ好みを押し付けられただけと受け取られます。

No.4649 2017/11/02(Thu) 11:13:53

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
stuncloud さん、お世話になります。

おっしゃるとおりです。
当方は高齢なため、今まで使用いていた方法にこだわっていました。
DOMの根本的理解も不足しています。
もう少し勉強してみます。

No.4650 2017/11/02(Thu) 12:06:14

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しろまさ さん、いつもお世話になります。

もう少しのところで行き詰まっています。
私の理解できるのはHTML,VBA,昔のBASICくらいです。
DOMの根本的理解はできなくても「こうすれば動作する」という方法が知りたいです。
すばらしいUWSCを、もう少し利用拡大したいです。

No.4651 2017/11/02(Thu) 12:21:23

Re: 入れ子になった table からのテキストデータ取り出し方法 / stuncloud
> こういう嫌味をわざわざ書くのはやめません?
嫌味のつもりで言ったわけではなかったのですが、もうしわけないです

ここに訪れる方はUWSCがDOMの入り口になっていると思いますが、そのせいかDOMの学習もすべてUWSC経由になっている節があります
正直UWSCでDOMの学習というのはそれだけでコスト上がりますし、あまり良い方法ではありません
今は優秀な管理ツールがありブラウザだけでDOMがいじり放題なので、それで目一杯いろいろ試してもらうのが一番手っ取り早いです
なのでUWSCであたふたするくらいなら速やかに管理ツールに誘導してあげたいという気持ちがあります

> 明確な理由
最近はマークアップも複雑怪奇になってきていますよね、無数のdivがネストしてたりとか
そういった構造に対するコードを書くとgetElementsByXXX()を繰り返す多重ループになったりするわけです
コードを書くコストが嵩み疲弊してしまいます
それがquerySelectorAll()の1ループで済むのですから、かなりのコストダウンになります

querySelector/querySelectorAllならgetElementsByXXXでできることが全部できてしまいます
同じ学習コストをかけるならquerySelector/querySelectorAllをやったほうが断然いいです
ぜひやってほしい

# しかしUWSCだとセレクタを書く際の<#DBL>問題が付きまとうのでそこが面倒ではある

> ただ好みを押し付けられただけ
僕は同じことを言われたら良いとされているものがどのように秀でているかを調べ、自分で試し、その上で使うかどうかの判断をします
理由が書かれていないとしても、発言者は経験に基づいてそういう発言をしているだろうからだいたい信じる方向に行きますが
知らなかったものを知れるきっかけになるなら文脈もどうでもいいです

…という考えなので、無意識に受け手にもそれを求めしまっていたんですね
それでまた気分を害される方がいるなら重ねて申し訳ない

書き込みの際は熟考するようにします

> こうすれば動作する
今回の件に関しては
最初の質問はDDDがどこにあるべきなのかわからないので回答ができません
あるテーブルの中のテーブルの数がほしいのであれば

tables = ie.document.querySelectorAll("table.oDrListGrid table")
print tables.length

となります
これは、oDrListGridというclassを持つtableの配下のtableのコレクションを得て、lengthでその個数を取得しています

No.4657 2017/11/02(Thu) 15:31:03

Re: 入れ子になった table からのテキストデータ取り出し方法 / しゅん
横ですが、、、
嫌味には見えませんでした。ただ、「理解が足りない」といった否定的な表現は避けた方が良いかな、とは思いました。
「DOMについて理解を深めた方が、結局のところ早道ですよ」とか「理解を深めた方が良さそうですね」とか。

まー、明確な理由を一々書くのは面倒ですし、そこは省略しても良い気がします。

No.4659 2017/11/02(Thu) 15:49:36

Re: 入れ子になった table からのテキストデータ取り出し方法 / しろまさ
> stunさん
嫌味かどうかは受け手の問題ですね。私も心が狭いようで失礼しました。

> 明確な理由
詳しい説明ありがとうございます。何を隠そう、私が一番知りたいだけだったり。。

> しゅんさん
Google検索のみで模索してると情報過多で目的に対する方法が複数見つかります。
プログラムの常識を知らない私としてはどれが効率いいのか一番知りたいとこだったりします。
当然、試行錯誤は怠りませんが経験上、検索では出てこない情報もプロの方はなぜか知ってたりします。
簡単でいいんです。ダメな理由は特に知りたい!

No.4661 2017/11/02(Thu) 16:13:03

Re: 入れ子になった table からのテキストデータ取り出し方法 / 10年来のファン
未だにここの掲示板が正常に機能していることに驚きました。
特にボランティアチューターの方々のなんと親切なこと。
stuncloud様の博識には目から鱗です。しろまさ様には過去に数度お世話になりました。

UWSCと出会い約10年立ちます。
VBAとUWSC(たまにはVBS)を組み合わせて色んな事を可能性を試してきました。
現在ではHPをwordpressで自分で作ったり、JAVA,C#,C++もどうにか理解し簡単なコードなら書けるようになりました。(TCP/IP関係だけは未だに苦手です)

質問者側は、よく調べて熟考し、場合によっては書籍にて独学すべきでしょう。
それでも分からないとき、核心に触れる部分だけ聞くようにすべきです。
「高齢者だから」という免罪符のは老害の何物でもありません。
小学生であろうが70歳であろうが関係ないと思います。
我々質問者側にもある程度のマナーが必要で、それがないと親切に対応してくださるひとがいなくなりますよ。

No.4682 2017/11/08(Wed) 13:46:38

Re: 入れ子になった table からのテキストデータ取り出し方法 / satocha
リキュールさんはこれまでたくさんの初心者の質問に回答なさっていて、掲示板への貢献は少なくないと思います。
また、リキュールさんの質問がきっかけとなり、当掲示板の師匠衆の引き出しの中身を多々勉強させてもらっています。個人的にはこちらもありがたかったりします。

今回、やや気になったとすれば、
>DOMの根本的理解はできなくても「こうすれば動作する」という方法が知りたい
あたりに反応されたのかなという気がします。字面だけみると、理屈はいいから答えだけほしいと読めなくもないですから。

さて、

HTMLは知っているけれどDOMの根本理解はなしにして、力技でどこまでできるか考えてみると、
allstr=IE.Document.body.parentNode.outerHTML
でHTMLをごっそり変数allstrに取り込むことは簡単です。

次に、allstrをタグごとに分解するわけですが、少し考えただけだと正規表現で「<」と英数字を弁別すればなんとかなるような気がします。

でも、注釈や引用符、閉じタグがない場合などを考えていくとそれでは足らずYaccだのBisonだの構文解析プログラムというのが世の中にはあるらしい…みたいな感じで、結局挫折する(私なら)ことになります。

なぜなら、HTMLの構文解析をきちんとやるということは、Webブラウザの機能の何分の一か(何十分の一ではありません)を独力で実装することとイコールだからです。

個人でブラウザを開発された方もいらっしゃいますが、そのブラウザのエンジンはGekkoだったりWebKitだったりと既製品であることがほとんどです。核心部分を独力で開発するのはたぶん、無理です。

でも、ブラウザってHTMLが読めるじゃないですか。じゃ、HTMLの解析、つまり、タグの名前で求める部分を引っ張ってくることはブラウザにお願いしようじゃないか、と。

その方法をブラウザの種類やOSに関係なく共通の手順にまとめたのがDOMです。
もともと、「手抜き」のための手法なので、基本的な考え方は難しくありません。子には必ず親が居る…程度のものです。覚えることは多いけど「根本的理解」は難しくありません。そういうわけで、ぜひ、入門サイトなどをご覧になってください。

No.4684 2017/11/08(Wed) 19:51:30

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
投稿のご忠告を戴いたので、今後の投稿に躊躇してしまいました。
しかし、安易に質問している訳ではなく、長い時間をかけて調べておりますが、理解できないことがあります。
若い時比べて記憶力や理解力がすごく衰えていますが、これ以上悪化しないよう努力しているつもりです。

stuncloudさんには、たびたびお世話になります。
取得したいデータは以下のようなものです。
111AAA
222BBB
222CCC
222DDD
222EEE

以下の(X,Y,Z)を変化させて取得はできました。
table1 = ie.document.querySelectorall("table.oDrListGrid")
data1 = table1.item(X).rows.item(0).cells.item(0).innerText
table2 = ie.document.querySelectorall("table.itemDetailTbl")
data2 = table2.item(Y).rows.item(Z).cells.item(0).innerText
data = data1+data2
print data

しかし、親tableの配下にある子tableの個数取得方法が分からないため整列した取り出しが出来ません。
table2 = ie.document.querySelectorall("table.itemDetailTbl")
では、すべての子table個数が取得されてしまいます。

参考HTML
<table class="oDrListGrid"><!-- 1番目の親テーブル -->
<tr><td><a>111</a></td></tr>
<table class="itemDetailTbl"><!-- 1番目の子テーブル -->
<tr><td><a>AAA</a></td></tr>
</table>
</table>
<table class="oDrListGrid"><!-- 2番目の親テーブル -->
<tr><td><a>222</a></td></tr>
<table class="itemDetailTbl"><!-- 2番目の子テーブル -->
<tr><td><a>BBB</a></td></tr>
<tr><td><a>CCC</a></td></tr>
</table>
<table class="itemDetailTbl"><!-- 3番目の子テーブル -->
<tr><td><a>DDD</a></td></tr>
<tr><td><a>EEE</a></td></tr>
</table>
</table>

No.4705 2017/11/14(Tue) 19:15:08

Re: 入れ子になった table からのテキストデータ取り出し方法 / しゅん
// これ、DOMとしては階層になってませんね。全tableが兄弟関係です。
// ということで、こうなります。
// コレクションっぽいものはlengthプロパティに長さがあるのです。(この辺は経験則)

ie = createoleobj("InternetExplorer.Application")
ie.navigate(GET_CUR_DIR + "\temp.html")
//ie.visible = true
tables = ie.document.querySelectorAll("table")
FOR i = 0 TO tables.length - 1
  SELECT tables.item(i).className
  CASE "oDrListGrid"
    data = TRIM(tables.item(i).innerText)
  CASE "itemDetailTbl"
    FOR j = 0 TO tables.item(i).rows.length - 1
      MSGBOX(data + TRIM(tables.item(i).rows.item(j).innerText))
    NEXT
  SELEND
NEXT
ie.quit()


// 親子関係がちゃんとあるなら、table.oDrListGridからchildNodesで手繰るか、
// いっそtable.itemDetailTblからparentNodeで手繰るのが良いかな
// この辺はパズルを解く訓練による

No.4707 2017/11/15(Wed) 12:04:52

Re: 入れ子になった table からのテキストデータ取り出し方法 / リキュール
しゅん さん、お世話になります。

希望通りのデータが取り出せました。
全体のtable数を取得し、SELECTで"oDrListGrid"、"itemDetailTbl"を振り分ける方法は思いつきませんでした。
これからも理解を深めて行きたいとおもいます。
ありがとうございました。

No.4708 2017/11/15(Wed) 14:52:19
IElink javascriptクリック方法 / Merry
こんにちは

下記のように空欄に文字を入れて、リンクを押すというUWSCスクリプトがあります。
しかし、IELink(IE,"id=check-domain") というRECIEで記録した場所がリンクを押してくれないのです。

IESetData(IE,domainall,"domain") // TEXT
IESetData(IE,domainall,"path") // TEXT
IELink(IE,"id=check-domain") // javascript:checkDomain();  //→ここが動かない


こちらを動かすにはどのようにしたらいいのでしょうか?

No.4700 2017/11/13(Mon) 11:13:18

Re: IElink javascriptクリック方法 / 88
変数名(check-domain)に含まれるハイフンが原因な気がします。
そもそもjavascript自体が正常動作していない可能性もあり。

No.4706 2017/11/15(Wed) 09:37:28
翌月1日まで集計したい / sen
いつもお世話になっております。
集計をしていまして、翌月1日まで集計したいのですが、1日が無い場合は月末まででよく、
うまくいきません。
愚直に1日があるなしで分岐でしょうか?
ご教授頂けましたら、幸いです。

dim 1日のある場合[]="17/11/29","17/11/30","17/11/31","17/12/01","17/12/02"
dim 1日のない場合[]="17/11/29","17/11/30","17/11/31","17/12/02","17/12/03"

GETTIME()
GETTIME(-1, val(G_TIME_YY4 + G_TIME_MM2 + "01") + 100 + (G_TIME_MM = 12) * 8800)
今月 = "/" + G_TIME_MM2 + "/"

i = 0
WHILE pos(今月,1日のある場合[i]) > 0
i=i+1
wend
msgbox(1日のある場合[i])

i = 0
WHILE pos(今月,1日のない場合[i]) > 0
i=i+1
wend
msgbox(1日のない場合[i])

No.4687 2017/11/09(Thu) 22:23:47

Re: 翌月1日まで集計したい / しゅん
// こんな感じでしょうか
dim 1日のある場合[]="17/10/29","17/11/29","17/11/30","17/12/01","17/12/02"
dim 1日のない場合[]="17/10/29","17/11/29","17/11/30","17/12/02","17/12/03"


GETTIME()
翌月1日 = GETTIME(0, val(G_TIME_YY4 + G_TIME_MM2 + "01") + 100 + (G_TIME_MM = 12) * 8800)

i = 0
WHILE GETTIME(0, "20"+1日のある場合[i]) <= 翌月1日
  i=i+1
wend
msgbox(1日のある場合[i])

i = 0
WHILE GETTIME(0, "20"+1日のない場合[i]) <= 翌月1日
  i=i+1
wend
msgbox(1日のない場合[i])



// 当月も見るなら
GETTIME()
当月1日 = GETTIME(0, G_TIME_YY4 + G_TIME_MM2 + "01")

FOR i = 0 TO RESIZE(1日のある場合)
  対象日 = GETTIME(0, "20"+1日のある場合[i])
  IFB 対象日 < 当月1日 THEN
    MSGBOX("skip " + 1日のある場合[i])
  ELSEIF 対象日 > 翌月1日 THEN
    MSGBOX("処理終了 " + 1日のある場合[i])
    BREAK
  ELSE
    MSGBOX("処理対象 " + 1日のある場合[i])
  ENDIF
NEXT

No.4690 2017/11/10(Fri) 12:08:02

Re: 翌月1日まで集計したい / しろまさ
// 正規表現にて(集計の意味を取り違えてるかもしれない。。)
dim ar1[]="17/11/29","17/11/30","17/11/31","17/12/01","17/12/02"
dim ar0[]="17/11/29","17/11/30","17/11/31","17/12/02","17/12/03"

GETTIME(); Dim YMto = G_TIME_YY2+"\/"+G_TIME_MM2+"\/"
GETTIME(31,G_TIME_YY4+G_TIME_MM2+"01"); Dim YMnx = G_TIME_YY2+"\/"+G_TIME_MM2+"\/"

Dim ptn = "(" + YMto + ".*?(" + YMnx + "01 )?)" + YMnx + ".*"
Dim sa1, st1 = Join(ar1); st1 = regReplace(st1, ptn, "$1"); sa1 = Split(st1," ",TRUE)
Dim sa0, st0 = Join(ar0); st0 = regReplace(st0, ptn, "$1"); sa0 = Split(st0," ",TRUE)

MsgBox("ar1=" + Length(sa1) + " " + st1 + "<#CR>ar0=" + Length(sa0) + " " + st0)

Function  regReplace(a_text, a_ptn, a_after)
  Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after)
FEnd

No.4692 2017/11/10(Fri) 13:31:54

Re: 翌月1日まで集計したい / sen
うまくできました。

しゅん様、バッチリです。
GETTIMEは、何度教えて頂いても、こんがらがります。

しろまさ様、
これはこれで、貴重なものをおしえて頂いたようです。
なにか、仕事に使えそうなのを探してみます。

ありがとうございました。

No.4697 2017/11/12(Sun) 23:03:03
getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / 荒鷲
getkeystateでaltを押すとテストと入力を1回だけしたいのですが、altを1回軽く押しただけで
10回ほど"テスト"が入力されます。これを1回だけ入力させる方法ないでしょうか?

while true

if getkeystate(VK_ALT) then
print "テスト"
endif

wend

No.4691 2017/11/10(Fri) 13:08:09

Re: getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / しろまさ
// 少し待機して解除
while true
 if getkeystate(VK_ALT) then
  print "テスト"
 endif
 Sleep(0.5)
 getkeystate(VK_ALT)
wend
Exit

// 押してる間待機
while true
 if getkeystate(VK_ALT) then
  print "テスト"
  while getkeystate(VK_ALT)
   Sleep(0.1)
  wend
 endif
 Sleep(0.1)
wend
Exit

No.4693 2017/11/10(Fri) 13:56:20

Re: getkeystateで指定キーを1回押したつもりが複数回認識させずに1回だけに認識させる方法 / 荒鷲
しろまさ様、回答ありがとうございます。
期待通りの処理ができました。

No.4695 2017/11/11(Sat) 14:21:50
CLKITEMで項目選択後、制御が戻らない / sarasara
初歩的な質問で大変恐縮なのですが、

画面に表示されているリストから"AAA"を選択すると、

CLKITEM(id, "AAA", CLK_TREEVEW or CLK_LEFTCLK)

"Yes"、"No"のボタンが表示された小さいウィンドウが表示されます。

"Yes"ボタンを押すために、

 id = GETID("Yes_or_No", , -1)
SLEEP(1)
CLKITEM(id, "Yes", CLK_BTN)
SLEEP(1)

としてみましたが反応がなく、
カーソルの"←"を押して"Yes"を選択してから"Enter"を押そうと、

KBD(VK_LEFT,CLICK,100)
SLEEP(1)
KBD(VK_RETURN,CLICK,100)
SLEEP(1)

を試してみたり、この小さいウィンドウを画像として認識させたり
しようとしましたがやはり反応がないままでした。

FAQの
”CLKITEM関数のCLK_ACC指定にてダイアログを出すと閉じるまで制御が戻らない”  #N15

と同じ状況なのかと思いましたが、既に"CLK_LEFTCLK" を付加しており、
どうしてよいかわからなくなってしまいました。

解決策がお分かりになりましたら教えていただけないでしょうか?
よろしくお願いいたします。

No.4694 2017/11/10(Fri) 22:06:22
a.uwsの処理が終わったらb.uwsを処理させる方法 / さやか
2つのuwsファイルがあり、a.uwsの処理が終わったらb.uwsを処理させる方法が分かりません。
今の所はMSGBOX("1")を挟んで手動でやっています。考えたのは、最初に印=false
で宣言して置いて、a.uwsのファイル内の最後に印=trueにさせて何かしたらできそうな感じがするのですが、そもそもa.uwsのファイルの処理した後の印がfalseままです。a.uwsをcallで呼び出しても同じですし。何か良い方法ないでしょうか?

印=false
tes="a.uws"
tes2="b.uws"

exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes + "<#DBL>")
print 印 //falseのままになる
exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes2 + "<#DBL>")

-------------------------------------------
a.uws内

処理
印=true
-------------------------------------------

No.4674 2017/11/07(Tue) 12:21:08

Re: a.uwsの処理が終わったらb.uwsを処理させる方法 / しろまさ
exec(path, TRUE) で。(uwsc.chm参照)

execは別プロセス起動なので同じ変数名にしても書き換わりません。

No.4678 2017/11/07(Tue) 15:06:12

Re: a.uwsの処理が終わったらb.uwsを処理させる方法 / さやか
しろまさ様、いつも返信ありがとうございます。
execの引数にそのような便利なものあるとは知りませんでした。
ヘルプを見るようにします。

No.4689 2017/11/10(Fri) 09:49:24
全1170件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 117 >> ]