ddewaitadviceコマンドについてNo.00094
となりのニャンコ さん 98/11/01 21:07
 
送信を含むオートパイロットスクリプトをつくる上で

その一つ前の段階として、「テキスト送信」と言う秀タームの機能を
スクリプトで再現しなければならない、

という壁に誰しも突き当たると思うのですが、その時

wait 命令をどうすればいいのかをお聞きしたいのです。

  wait "選択して下さい"
  wait "リターンキーを押して下さい"
  wait "メッセージを編集しますか"
  wait "メッセージを登録しますか"
  wait ""    ; 「なんにもない」をwaitする

これらのwait命令のすべてを、一つのコマンドで済ませなければならない
と言う壁に突き当たったわけです。

そこで考えたのが、

ddewaitadvice 1

と言うコマンドだったのです。このコマンドを wait命令の変わりに入れたところ
全く期待どうりに動いてくれたのです。1ヶ月以上毎日使っていますが、
全く誤動作しません。もし誤動作することがあれば、
beginloopとendloopで囲まれた部分で使っていますので、
「送信エラーがループする」と言う、もっとも恐ろしいことになってしまうはず
なのですが、その症状は全く出る気配もありません。

今日質問したいことは、ddewaitadvice 1 と言うコマンドをこのまま
wait 命令として使い続けて大丈夫かと言うことです。もしごくまれに
送信エラーが発生するのであれば、スクリプトを書き換えなければなりません。
もし危険なのであれば、代わりにどんなコマンドを使うと安全なのか教えて下さい。


[ ]
RE:00094 ddewaitadviceコマンドについてNo.00095
よこしま さん 98/11/01 22:25
 
こんにちは、となりのニャンコさん。

>送信を含むオートパイロットスクリプトをつくる上で
>
>その一つ前の段階として、「テキスト送信」と言う秀タームの機能を
>スクリプトで再現しなければならない、
>
>という壁に誰しも突き当たると思うのですが、その時
>
>wait 命令をどうすればいいのかをお聞きしたいのです。
>
>  wait "選択して下さい"
>  wait "リターンキーを押して下さい"
>  wait "メッセージを編集しますか"
>  wait "メッセージを登録しますか"
>  wait ""    ; 「なんにもない」をwaitする
>
>これらのwait命令のすべてを、一つのコマンドで済ませなければならない
>と言う壁に突き当たったわけです。


「ddewaitadvice」というのは, 通常秀Termのスクリプトから
「秀まるおのマクロサーバ」を使うのに使う文です.
 (ほかにもエクセルなんかにも使えるそうです.)

ご希望の動作には「loopswitch」を使うのがいいと思います.

----------
timeout 60
loopswitch
        case "選択して下さい"
                処理
        case "リターンキーを押して下さい"
                処理
        case "メッセージを編集しますか"
                処理
        case "メッセージを登録しますか"
                処理
        case ""    ; 「なんにもない」をwaitする
                処理
        case timeout
                breakloop
endswitch

-------------

のように使います.


よこしま

Send 98/11/01


[ ]
RE:00095 ddewaitadviceコマンドについてNo.00096
よこしま さん 98/11/01 22:30
 

>timeout 60
>loopswitch
>        case "選択して下さい"
>                処理
>        case "リターンキーを押して下さい"
>                処理
>        case "メッセージを編集しますか"
>                処理
>        case "メッセージを登録しますか"
>                処理
>        case ""    ; 「なんにもない」をwaitする
>                処理
>        case timeout
>                breakloop
>endswitch
 ↑
「endloop」の誤りです.

よこしま

Send 98/11/01


[ ]
RE:00095 ddewaitadviceコマンドについてNo.00099
となりのニャンコ さん 98/11/02 13:17
 
>こんにちは、となりのニャンコさん。

>「ddewaitadvice」というのは, 通常秀Termのスクリプトから
>「秀まるおのマクロサーバ」を使うのに使う文です.
> (ほかにもエクセルなんかにも使えるそうです.)
>
>ご希望の動作には「loopswitch」を使うのがいいと思います.
>
>----------
>timeout 60
>loopswitch
>        case "選択して下さい"
>                処理
>        case "リターンキーを押して下さい"
>                処理
>        case "メッセージを編集しますか"
>                処理
>        case "メッセージを登録しますか"
>                処理
>        case ""    ; 「なんにもない」をwaitする
>                処理
>        case timeout
>                breakloop
>endswitch
>
>-------------
>
>のように使います.
>

よこしまさんありがとうございます。
せっかく教えていただいたのですが
実行してみた結果
タイトルと本文の1行が送信された後
全然動きません

  wait ""    ; 「なんにもない」をwaitする

と言う命令が実行されないでタイムアウトしてしまうだけです。


ちなみにddewaitadviceを使ったサンプルを載せておきます。
gethidetermdir %hideterm
@hide = %hideterm + "\UPLOAD"
   openfile @hide + "\FEO.txt"
Soshin:
            #b=#a
            #a = ""
      readfile @hide + "\FEO.txt", #a       ;1行読み込む
           if( #a == "" )
               if( #b == "" )
                         closefile @hide + "\FEO.txt"
                             exit
               endif
                     send "^M"
                     goto Soshin
           endif
           send #a +"^M"
 beginloop
          #a = ""
      readfile @hide + "\FEO.txt", #a       ;1行読み込む
   ddewaitadvice 1
        send #a +"^M"
 if( part( #a, 0, 2 )=="/E" or part( #a, 0, 2 )=="/e" )
        wait "編集を行いますか? (y/N)"
              send "N"+"^M"
               wait "メッセージを登録しますか。(Y/n)>"
                            send "Y" + "^M"
            breakloop
  endif
 endloop
                     goto Soshin
これなら正常に送信されるのですが

[ ]
RE:00095 ddewaitadviceコマンドについてNo.00100
となりのニャンコ さん 98/11/03 04:09
 
>timeout 60
>loopswitch
> case "選択して下さい"
> 処理
> case "リターンキーを押して下さい"
> 処理
> case "メッセージを編集しますか"
> 処理
> case "メッセージを登録しますか"
> 処理
> case ""    ; 「なんにもない」をwaitする
> 処理
> case timeout
> breakloop
>endloop

よこしまさんへ
このスクリプト間違ってるんじゃないですか
そもそもcaseやwait命令で
case ""    ; 「なんにもない」をwaitする
なんてこと自体最初から無理なんじゃないですか。
だって
case "選択して下さい"
っていう命令は、全部を書かなくてもいいんでしょ
case "選"    でもいいし
case "択"    でもいいし
case "して下さい"  でもいいわけでしょ

1文字でさえいいんだからもし0もじでもいいんだったら
case ""
と言うところにすべてのcaseが反応してしまうんじゃないですか。
コンピューターってそう言うもんじゃないんですか。

送信スクリプトって言うものは
まず、wait"選択して下さい"  で、
             wを入力して
次に、wait"タイトル"  で、
             タイトルを入力して
次に、wait"本文"      で、
             本文1行目を送信する
ここまでは、ホストから文字が送られてくるから、
  よこしまさんのスクリプトでも動きますよ。
その次の本文2行目以降は、
   ホストから文字が送られてこないんだから
よこしまさんのスクリプトが動くわけ無いじゃないですか。
loopswitch-case-endloop
   のコマンドでは最初から無理だったんじゃないですか

[ ]
RE:00100 ddewaitadviceコマンドについてNo.00101
かずや さん 98/11/03 05:49
 
>このスクリプト間違ってるんじゃないですか
その通りです(笑)これは明らかに説明不足ですね(^-^;

>case ""
>と言うところにすべてのcaseが反応してしまうんじゃないですか。
>コンピューターってそう言うもんじゃないんですか。
そういうことですね。
だから、postidleなどがあるわけですが、これについては後述します。

>loopswitch-case-endloop
>   のコマンドでは最初から無理だったんじゃないですか
使い方によっては、そうとも言い切れません。
いろいろなコマンドがあって、いろいろと工夫できるので
その中で、1番自分にあった使い方をすればいいと思います。

σ(^-^)個人の意見では、パスワード変数を
send系文で隠す必要はないと思います。
なぜかと言うと「テストしやいから(^-^;」これだけですが(笑)
それに、わざわざ、メッセージ文などを使って、自分が登録した
パスワード変数を、スクリプトを改編して覗き見する人がいますか?(^-^;
送信したパスワード変数を隠したければ、catalystさんに
RESしたように、display文を使えばいいことだし・・・(^-^;

本文に戻って・・・(^-^;
よこしまさんの言った通り、ddewaitadvice文のその使い方は
正しい使い方だとは思えません。
斉藤さんからのRESがないので、断言はできませんが(^-^;

何も受信しないことを待つには wait文やcaseと postidleなどを
組み合わせると良いでしょう。
postidleやpostmilliidleについては ヘルプのwait文のページに
記載されています。
分からないことがあれば、またRESしてください(^-^;

<< おせっかい(^-^; >>
その1です(笑)
>gethidetermdir %hideterm
>@hide = %hideterm + "\UPLOAD"
>openfile @hide + "\FEO.txt"
chdir文を使って、確実にアップロード用フォルダを取得することもできますよ
---------- 参照 ----------
chdir upload
getcurrentdir @updir
restoredir
--------------------------
ちなみに、レジストリを直接読みに行っても
取得可能です。

PS.忙しくて、更新に気付くのが今になってしまいました(T-T)

[ ]
RE:00101 ddewaitadviceコマンドについてNo.00102
となりのニャンコ さん 98/11/03 10:19
 
かずやさんわかりやすい説明をありがとうございました。
そして、よこしまさんにお詫び申し上げます。
>timeout 60
>loopswitch
> case "選択して下さい"
> 処理
> case "リターンキーを押して下さい"
> 処理
> case "メッセージを編集しますか"
> 処理
> case "メッセージを登録しますか"
> 処理
> case postmilliidle(1) ""    ; ここを書き換えた
> 処理
> case timeout
> breakloop
>endloop
これで無事に送信できました。
postmilliidle(1)が抜けていただけでした。

さてここで不思議なことになってしまったんですが、
postmilliidle(1) タイムアウトまで1000分の1秒
と言う時間なのにどうして大丈夫なんでしょうか。

postidle(1) でやると、1行送信するごとに1秒ずつ
  無駄な時間が発生するので遅くてだめです。
postmilliidle(1) を使うと流れるような速さで送信されました。

振り出しに戻って、私が ddewaitadvice 1
  を使っても大丈夫なのかと、質問した理由は
  本当は、1ミリ秒と言う
  タイムアウト時間が心配だったからなんですよ。
loopswitch-case-endloop文を使っても
ddewaitadvice  コマンドを使っても
  結局タイムアウト時間はどちらも、同じなのだから
  送信エラーが、ループするという危険性については同じこと
  になりますよね。結局どちらもそんなことにならないようですが
わざわざこれから、手間をかけてスクリプトを書き換えることまで
しなくていいんじゃないかな。っていう感じがしてきたのですが。

[ ]
RE:00101 ddewaitadviceコマンドについてNo.00103
となりのニャンコ さん 98/11/03 17:59
 
> << おせっかい(^-^; >>
> その1です(笑)
> >gethidetermdir %hideterm
> >@hide = %hideterm + "\UPLOAD"
> >openfile @hide + "\FEO.txt"
> chdir文を使って、確実にアップロード用フォルダを取得することもできますよ
> ---------- 参照 ----------
> chdir upload
> getcurrentdir @updir
> restoredir
> --------------------------

これがお節介じゃないんですよね。
最初からこれがわかっていれば、難しいことはなかったんですよ。
実は別ドライブを使っている人からクレームが来たんですよ。
それで、仕方なく手動で (input命令)
 C:\hideterm\upload
というように、ユーザーに打ち込んでもらって別のドライブやフォルダーを
設定してもらうと言うスクリプトにしたんですよ。
 かずやさんのスクリプトだと、別ドライブを指定しているユーザーでも
設定しなくていいんですもんね。
 いまさら、変更できないと言うところまで来てしまったんで、
今回はもとのままですけど


> σ(^-^)個人の意見では、パスワード変数を

やはり反対意見が出ましたね。
  第3者が、コンピューター使用者の留守の間に、ちょっといじれば
 パスワードを盗み出すことが出来る。と言うことが気になったのです。

[ ]
RE:00095 ddewaitadviceコマンドについてNo.00106
となりのニャンコ さん 98/11/04 18:41
 
よこしまさんへ
いろいろ実験してみました。

>timeout 60
>loopswitch
> case "選択して下さい"
> 処理
> case "リターンキーを押して下さい"
> 処理
> case "メッセージを編集しますか"
> 処理
> case "メッセージを登録しますか"
> 処理
> case postmilliidle(1) ""    ; ここを書き換えた
> 処理
> case timeout
> breakloop
>endloop

上のスクリプトで、case postmilliidle(1) ""のところにすべてが
集中するのではないかと心配したのですがその心配はないことが
確認できました。
 しかし、テキスト送信の再現という目的であれば
「処理」はすべて breakloop になりますので、
:選択して下さい
:リターンキーを押して下さい
:メッセージを編集しますか
:メッセージを登録しますか
のcaseはすべて不要と言うことになります。
それらがなければ、case postmilliidle(1) ""のところへ行きますから
それでエラーのcaseだけ書いておけばいいのではないでしょうか


timeout 6
       #lb = "true"
loopswitch
 case "コマンドが違います"
       #lb = "false"
 breakloop
 case postmilliidle(1)""    ; 「なんにもない」をwaitする
 breakloop
 case timeout
       #lb = "false"
 breakloop
endloop
if( #lb == "false" )
send"^M"
goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
endif


もっと簡単なスクリプトにすると
wait postmilliidle(1)""    ; 「なんにもない」をwaitする
この1行だけですべてOKということになりますね。

[ ]
RE:00100 ddewaitadviceコマンドについてNo.00107
よこしま さん 98/11/04 22:07
 

こんにちは、となりのニャンコさん。
月曜日から出かけておりまして, 今日かえって
きました. コメントが遅くなりどうもすみません.


>このスクリプト間違ってるんじゃないですか
>そもそもcaseやwait命令で
>case ""    ; 「なんにもない」をwaitする
>なんてこと自体最初から無理なんじゃないですか。


もうほかの方からコメントがついていますが,
確かに postimiliidle(n) がないとだめみたいですね.

いいわけをさせていただくと, 「loopswitch 文は
こんな風に使う」というつもりでかいたのであって
「この書き方がいい」というつもりで
かいたのではなかったのです.

「case timeout -> breakloop」
というのを入れておいたのも,
「case には timeout を入れられるし, loopswitch を
ぬけるときは breakloop を使う」という程度のつもりで
書いていました.

誤解を与えてしまったようでどうもすみません.

(かずやさんフォローありがとうございました.)

よこしま

Send 98/11/04


[ ]
RE:00106 ddewaitadviceコマンドについてNo.00108
よこしま さん 98/11/04 22:27
 
こんにちは、となりのニャンコさん。
ふたたびよこしまです.

>timeout 6
>       #lb = "true"
>loopswitch
> case "コマンドが違います"
>       #lb = "false"
> breakloop
> case postmilliidle(1)""    ; 「なんにもない」をwaitする
> breakloop
> case timeout
>       #lb = "false"
> breakloop
>endloop
>if( #lb == "false" )
>send"^M"
>goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
>endif

場合が2つかないのであれば, switch 文で十分です.

---------------

timeout 6
switch
        case "コマンドが違います", timeout
                send"^M"
                goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
        case postmilliidle(100) ""
                ; 何もしない
endswitch

----------------

loopswitch は受信する文字列がそのときに
よって違う場合に使います.

ちなみに文字列変数は処理が遅くなる場合があるので
可能な限り数値を使うのがいいと思います.




------------

##init = 0
timeout 6
switch
        case "コマンドが違います"
                ##init = -1
        case timeout
                send"^M"
        case postmilliidle(100) ""
                ##init = 1
endswitch

if(##init = -1)
        message "処理がおかしいです."
elseif(##init = 1)
        message "あなたの処理は正しいです."
else
        question "次の操作を処理をしますか?"
        if(no)
                exit
        ensif
endif

次の処理
----------

よこしま

Send 98/11/04


[ ]
RE:00102 ddewaitadviceコマンドについてNo.00109
かずや さん 98/11/05 07:01
 
>postmilliidle(1) タイムアウトまで1000分の1秒
>と言う時間なのにどうして大丈夫なんでしょうか。
さあ?(笑)言語プログラムのことはσ(^-^)には分かりません(笑)
(・・・だったらRES付けるなよ(^-^;)
σ(^-^)も 1000/1秒という早さは確かに不安ですね(笑)
混み具合で、ホストからの受信が送れる場合だってあるだろうし。

だから、σ(^-^)は10/1秒にしていますよ
→ postmilliidle(100)
postidle/postmiliiidle関数は、1じゃないとダメってことはないんです(*^-^*)こ
れも工夫の1つです・・・と、偉そうなことを言っても、これは☆нαтснさんの
スクリプトを参考にしただけですが(^-^;(笑)

>ddewaitadvice  コマンドを使っても・・・(中略)
>わざわざこれから、手間をかけてスクリプトを書き換えることまで
>しなくていいんじゃないかな。っていう感じがしてきたのですが。
せっかくですが、やはり、正しい使い方だとは思えないので書き換えた方が良いので
はないでしょうか?
はっきりとした理由が言えないので、機嫌を悪くするかも知れませんが(^-^;

DDEを利用する場合は、開始(ddeinitiate)と終了(ddeterminate)が必要だと思い
ます。
(終了(ddeterminate)については、一部アプリ依存のものもあるようですが)
さらに、ddewaitadviceコマンドは ddestartadviceコマンドとddestopコマンドが必
要だと思います。
となりのニャンコさんのスクリプトでは、これらの処理をしていますか?

これらの処理が必ず必要なのかどうかは分かりませんが
間違った使い方をすると、パソコンやDDEサーバ(DDEML.DLL)に負担をかけること
になりかねません。

ただ待つだけの処理ならば、やはり wait文やswitch文を使ったほうが良いでしょう。
その方が見た目もすっきりしますよ(笑)

☆補足☆
postidle/postmilliidle関数について、1つ忘れてました(^-^;
上記2つの関数では、制御コードが使えないので注意してください。
たとえば、待つ対象の文字列に 行頭や行末などを含めて指定することはできません。
→ × wait postmilliidle(100) "行の最後^M"

☆パスワード変数☆
>%%%変数なら出来ると言うことですが
できるんなら、してもらいましょうよ(笑)
使うか使わないかは別にして(^-^;
進化することは良いことです(*^-^*)

さらに進化して 秀TermEvoEvoにしますか?(笑)
(「たんすにゴン○ン」には負けたくない(笑))

ついでに提案ですが、*とか**はどうですか?>新パス変数

[ ]
RE:00108 ddewaitadviceコマンドについてNo.00110
かずや さん 98/11/05 07:07
 
>(かずやさんフォローありがとうございました.)
ども(*^-^*)

>場合が2つかないのであれば, switch 文で十分です.
ちょっと間違ってませんか?(^-^;
正しくは、条件分岐の処理内容がすべて breakloop で終わっているなら
switch文の方が良いということです

どちらにしても、あの例では switch文の方が良いですね

>ちなみに文字列変数は処理が遅くなる場合があるので
>可能な限り数値を使うのがいいと思います.
それは知らなかった(^-^;
そう言えばなんとなくそんな気がする

[ ]
RE:00109 ddewaitadviceコマンドについてNo.00114
となりのニャンコ さん 98/11/05 18:44
 
108番のよこしまさんと109番のかずやさんへ
まとめレスにて失礼します。

よこしまさん、スクリプトをありがとうございます。
ちょっと理解するのに時間がかかると思いますので
じっくり読んでから、使わせていただきます。

かずやさんの発言から
>さらに、ddewaitadviceコマンドは ddestartadviceコマンドとddestopコマンドが必
>要だと思います。
>となりのニャンコさんのスクリプトでは、これらの処理をしていますか?

なんにもしてませんよ。入れてみたら動いた。ただそれだけです。
      readfile @hide + "\ABC.txt", #a
   ddewaitadvice 1
        send #a +"^M"
要するにこれだけなんです。
 あのーひとこと申し上げておきますが、パソコン歴10ヶ月の初心者ですから
ましてパソ通歴は4ヶ月。スクリプト歴に関しては2ヶ月未満
あんまり追求しないで下さい。
「なんにもないをwaitする」という命令をヘルプから探して、使えるものを
見つけただけでもほめて下さいよ。


>せっかくですが、やはり、正しい使い方だとは思えないので書き換えた方が良いので
>はないでしょうか?
>はっきりとした理由が言えないので、機嫌を悪くするかも知れませんが(^-^;

 かずやさんと、よこしまさんのおかげでスクリプトを書き換えるためのデータはす
べてそろいました。
 3日後には、できあがっていると思います。
問題は、スクリプトのユーザーの皆さんにどう報告するかです。
 それより、スクリプトのすべての権限をお任せしたシスオペの方にどう報告するか。
「直しましたので再配布して下さい。」これでは理由になりません。
postmilliidle(1)と同じ速度をユーザーの方に味合わせてしまったんですから
postmilliidle(100)に書き換えて再配布すれば「遅くなったような気がする」
と言う苦情が出るはず。
 100行くらい毎日送信している人もいますから。これだと10秒遅くなる

一つ決定的な、新機能を搭載しないことには、説明が付きません。

どうしても動かせない命令があって、新機能搭載につまずいています。
新規発言とさせていただきたいので、またよろしくお願いします。

[ ]
RE:00114 ddewaitadviceコマンドについてNo.00115
よこしま さん 98/11/05 21:09
 
こんにちは、となりのニャンコさん。

>問題は、スクリプトのユーザーの皆さんにどう報告するかです。
> それより、スクリプトのすべての権限をお任せしたシスオペの方にどう報告するか。
>「直しましたので再配布して下さい。」これでは理由になりません。
>postmilliidle(1)と同じ速度をユーザーの方に味合わせてしまったんですから
>postmilliidle(100)に書き換えて再配布すれば「遅くなったような気がする」
>と言う苦情が出るはず。
> 100行くらい毎日送信している人もいますから。これだと10秒遅くなる
>
>一つ決定的な、新機能を搭載しないことには、説明が付きません。
>
>どうしても動かせない命令があって、新機能搭載につまずいています。
>新規発言とさせていただきたいので、またよろしくお願いします。


もともとの発言がコマンドへの質問だったので
それなりに答えていたのですが, そもそも, となりのニャンコさんが
何をしたいのかいまいちよくわかっていません. (^^;

実際のアップロードの画面をここにアップされては
いかがでしょう?

もっと的確なアドバイスができるかと思いますが.....



>postmilliidle(1)と同じ速度をユーザーの方に味合わせてしまったんですから
>postmilliidle(100)に書き換えて再配布すれば「遅くなったような気がする」
>と言う苦情が出るはず。

というようなことがなぜおこるのか少し理解に苦しみます.

もともと postmilliidle というのはプロンプトの「>」と
引用符の「>」を区別するために導入されたもので,

「何にもない」は「""をwaitする」のではなく
「直前の行+ 0D0A をwaitする」などの方法で代用できるのでは
ないかと思います.



あと, アップロードするときに sendwrap をつかったり,
「upload, none」を使ったりとテキストの送信方法も
いろいろあります.


よこしま

Send 98/11/05


[ ]
RE:00115 ddewaitadviceコマンドについてNo.00116
となりのニャンコ さん 98/11/06 01:06
 
>もともとの発言がコマンドへの質問だったので
>それなりに答えていたのですが, そもそも, となりのニャンコさんが
>何をしたいのかいまいちよくわかっていません. (^^;

あれだけすばらしい回答をいただけたんだから十分に理解してくれてると思ってます。
 何をしたいのかと言うことですが
なんにもしたいわけじゃないです。オートパイロットスクリプトはもう完成していて、
配布もされてるんです。使っている方からは、「テキスト送信」に比べて接続時間が
半分以下になったと喜びの声も頂いてます。スクリプトを使いたいために「秀ター
ム」を買った人も増えてるんです。
 スクリプトの機能についても今のままで十分だと思ってるんです。
 ただ一つの問題はddewaitadvice 1というコマンドが使われていることだけです。
それも誤動作するわけでもなんでもないし、だけど間違った使い方と言われたらやは
り書き換えなければいけないだろうと思います。
 その時に、今度はこういう新しい機能を加えたので便利になりましたよ。っていっ
て再配布したいじゃないですか。ただそれだけです。
 そのことでまた質問をしたいのですが、どういう風に質問したらよいのかがわかっ
ていない。質問する一つ前の段階なんです。もう何日か質問する内容を考えさせて下
さい。
そしてその時はぜひよろしくお願いします。

>実際のアップロードの画面をここにアップされては
>いかがでしょう?

申し訳ありませんが。私は、オンラインの会社のものでもありませんし、スクリプト
の制作を依頼されたわけでもありません。そう言う立場のものがアップすることには
非常に抵抗を感じるわけです。ご容赦下さい。

>>postmilliidle(1)と同じ速度をユーザーの方に味合わせてしまったんですから
>>postmilliidle(100)に書き換えて再配布すれば「遅くなったような気がする」
>>と言う苦情が出るはず。

>というようなことがなぜおこるのか少し理解に苦しみます.

beginloop
#a = ""
readfile @hide + "\FEO.txt", #a           ;1行読み込む
wait postmilliidle(1)""
send #a +"^M"
if( part( #a, 0, 2 )=="/E" or part( #a, 0, 2 )=="/e" )
wait "編集を行いますか? (y/N)"
send "N"+"^M"
wait "メッセージを登録しますか。(Y/n)>"
send "Y" + "^M"
breakloop
endif
endloop

送信スクリプトの中心がここです。ごらんのように
3行目でreadfileを使って1行ずつ変数 #a に読み込んで
4行目でホストからの応答を待って
5行目で、変数 #a を送信する
この作業を無限ループで繰り返すスクリプトです。

postという言葉は、○○の後って言う意味でしょうか。あんまり英語に詳しくないの
でわかりませんが、ミリアイドルの後で "" をwaitするわけでしょ
アイドリングしてるわけだからそれだけの時間が無駄時間ですよね。
postmilliidle(100)にすると1行送信するごとに0.1秒ずつ遅れて行くわけだから
当然遅くなりますよね。10くらいならわからないけど
           100にするとはっきり遅いのがわかります。
           1行ずつ丁寧に送信されてる感じがします。

[ ]
RE:00116 ddewaitadviceコマンドについてNo.00117
かずや さん 98/11/06 08:30
 
>その時に、今度はこういう新しい機能を加えたので便利になりましたよ。
>っていって再配布したいじゃないですか。ただそれだけです。
σ(^-^)もそうです(笑)
バグ修正だけで公開するのは、ダウンロードしてくれた人に
もうしわけないような気がして(笑)
でも、重度なバグなら、バグ修正だけでも公開しますが(笑)

>そのことでまた質問をしたいのですが、どういう風に質問したらよいのかがわかっ
>ていない。質問する一つ前の段階なんです。もう何日か
>質問する内容を考えさせて下さい。
>そしてその時はぜひよろしくお願いします。
もちろんです(*^-^*)
ただし、σ(^-^)に分かる範囲じゃないとサポートできませんが(笑)
新しい質問を楽しみ(?)に待っています(*^-^*)

>私は、オンラインの会社のものでもありませんし、スクリプト
>の制作を依頼されたわけでもありません。
σ(^-^)は学生で、趣味でスクリプトを作成してます(笑)
経験は約1年半で、まだまだ初心者です(^-^;

>そう言う立場のものがアップすることには
>非常に抵抗を感じるわけです。ご容赦下さい。
たしかに、パワーユーザが何人もいる中に
自分が作成したスクリプトを公開するのは
ちょっとつらいですね(笑)

>postmilliidle(100)にすると1行送信するごとに0.1秒ずつ遅れて行くわけだから
>当然遅くなりますよね。10くらいならわからないけど
>100にするとはっきり遅いのがわかります。
そうでしょうか?実際にはかってみましたか?(^-^;
ホストから受信して、秀TermEvoの画面に表示されるまで
少し時間があります。そして、通常、受信された文字を
処理して次に進むには、画面に表示するか、しないかの
タイミングでおこなわれます。(と思います(^-^;)
しかし、スクリプトの処理の方は、画面に表示されないうちに
処理が終わることもあります。
従って、実際に、それほどの誤差が生じるかどうかは疑問ですね
(display off やアイコン化しているなら、話は別ですが)

それに、この前も言った通り、もし、DDEサーバに
負担をかけているならば、環境によっては、それだけで
動作を鈍らせている可能性もあります。
(秀TermEvoだけでなく、システム全体に)

[ ]
RE:00116 ddewaitadviceコマンドについてNo.00118
よこしま さん 98/11/06 18:08
 
こんにちは、となりのニャンコさん。


>申し訳ありませんが。私は、オンラインの会社のものでもありませんし、スクリプト
>の制作を依頼されたわけでもありません。そう言う立場のものがアップすることには
>非常に抵抗を感じるわけです。ご容赦下さい。

そうですか......

>beginloop
>#a = ""
>readfile @hide + "\FEO.txt", #a           ;1行読み込む
>wait postmilliidle(1)""
>send #a +"^M"
>if( part( #a, 0, 2 )=="/E" or part( #a, 0, 2 )=="/e" )
>wait "編集を行いますか? (y/N)"
>send "N"+"^M"
>wait "メッセージを登録しますか。(Y/n)>"
>send "Y" + "^M"
>breakloop
>endif
>endloop


本当は, 「ここをこう直した方がいい」という
ような部分もたくさんあるような気もしますが,
実際の通信画面がわからないのでは正確には言えないと
思うので, もうやめておきますね.


がんばってください.

よこしま

Send 98/11/06


[ ]
RE:00095 ddewaitadviceコマンドについてNo.00119
とほほ さん 98/11/06 20:54
 

‖> 「ddewaitadvice」というのは, 通常秀Termのスクリプトから
‖> 「秀まるおのマクロサーバ」を使うのに使う文です.
‖>  (ほかにもエクセルなんかにも使えるそうです.)

どうも、こんにちはm(__)m

ところで、このマクロサーバーと言うのは将来的に秀term自体に
装備する計画はあるのでしょうか?
それとも何らかの事情か技術的な理由で別ソフトになっているの
でしょうか?

素人質問ですみません(^^;
もしこれが秀termに同梱されていたらより便利なスクリプト公開
が期待できるかな、と思ったものですから(^^ゞ


[ ]
RE:00119 ddewaitadviceコマンドについてNo.00120
かずや さん 98/11/07 07:14
 
こんちわ(*^-^)/

>ところで、このマクロサーバーと言うのは将来的に秀term自体に
>装備する計画はあるのでしょうか?
ないでしょう(笑)
(・・・と、斉藤さんが返事を出す前に口出ししてしまった(^-^;)

>それとも何らかの事情か技術的な理由で別ソフトになっているの
>でしょうか?
マクロサーバはもともと、秀Term用に作られたものではありません。
秀丸エディタでの、マクロ処理でできない部分を補うために作成されたものだと聞い
ています。
従って、マクロサーバを作成したのは斉藤さんではなく、秀丸エディタを作成した人
です。(名前忘れちゃった(^-^;)

(昔に聞いたことなので、確かでないことがあるかも知れません。)

>もしこれが秀termに同梱されていたらより便利なスクリプト公開
>が期待できるかな、と思ったものですから(^^ゞ
それはσ(^-^)もかなり思います(笑)
しかし、作成したので斉藤さんでない以上、それ以上追求することは無理でしょ
う・・・(^-^;

[ ]
RE:00109 ddewaitadviceコマンドについてNo.00121
範子 さん 98/11/07 23:37
 

> ☆補足☆
> postidle/postmilliidle関数について、1つ忘れてました(^-^;
> 上記2つの関数では、制御コードが使えないので注意してください。
> たとえば、待つ対象の文字列に 行頭や行末などを含めて指定することはできません。
> → × wait postmilliidle(100) "行の最後^M"

このツリーに参加するつもりはないんですが、これは勘違いでしょうということで。

NIF.HSCにも、wait postmilliidle(500) "^M^J>" な行はあります。
わたしも、そういうのを何年も使ってます。

[ ]
RE:00121 ddewaitadviceコマンドについてNo.00123
かずや さん 98/11/08 05:18
 
>NIF.HSCにも、wait postmilliidle(500) "^M^J>" な行はあります。
>わたしも、そういうのを何年も使ってます。
え!?ホント?(^-^;
σ(^-^)がテストしたときには、うまくいかなくて
タイムアウトになったけどなあ・・・(^-^;

[ ]
RE:00120 ddewaitadviceコマンドについてNo.00124
とほほ さん 98/11/09 15:02
 

‖> マクロサーバはもともと、秀Term用に作られたものではありません。
‖> 秀丸エディタでの、マクロ処理でできない部分を補うために作成されたも
‖> のだと聞いています。
‖> 従って、マクロサーバを作成したのは斉藤さんではなく、秀丸エディタを
‖> 作成した人です。(名前忘れちゃった(^-^;)

あ、なるほど、そうですかわかりました。ありがとうございます。m(__)m

まだ、スクリプトの勉強を始めたばかりで人の作ったスクリプトを見てDDEの
コマンドを使ったダイアログは非常に便利だな、とは思ったのですが、いざ
自分で作ってみようと思うと中々理解が進みません(^^;

また一連のお話の中で、DDE コマンドを間違って使うとシステム全体にも負
担をかけてしまう、と言うお話があったように見うけられましたが具体的に
こう言う事には注意した方が良い、と言う事はありますか?

なんか、ついでの質問の様で恐縮です。(^^;

とほほ


[ ]
RE:00115 ddewaitadviceコマンドについてNo.00125
となりのニャンコ さん 98/11/09 16:22
 
postmilliidleについて私なりの結論

よこしまさんの108から
##init = 0
timeout 6
switch
case "コマンドが違います"
##init = -1
case timeout
send"^M"
case postmilliidle(100) ""
##init = 1
endswitch
 上のスクリプトの場合だと、postmilliidle(10)ではだめです。
やっぱり100ミリ秒必要です。(10)だと、コマンドが違いますなのに、
なんにもないの方へいってしまう可能性があるんです。

かずやさんの117から
>>100にするとはっきり遅いのがわかります。
>そうでしょうか?実際にはかってみましたか?(^-^;
正確に計ることは出来ませんが、1000にすると1秒ずつ遅れていくのがはっきり
わかるので、100だったら0.1秒遅れるのだろうと言うことです。
 だから私なりの解釈をして100行送信すると10秒の損、と言うことです。

それで10秒のタイムロスはどうしても我慢できなかったので、結局
wait postmilliidle(10) ""
これ1行で全部を済ませてしまったんです。
よこしまさん かずやさん ごめんなさい

[ ]
RE:00124 ddewaitadviceコマンドについてNo.00128
かずや さん 98/11/10 08:14
 
>自分で作ってみようと思うと中々理解が進みません(^^;
σ(^-^)も初めはそうでした(笑)
て言うか、今でも新しいのを覚えようと思ったときは
なかなか難しいものです(^-^;

>また一連のお話の中で、DDE コマンドを間違って使うとシステム全体にも負
>担をかけてしまう、と言うお話があったように見うけられましたが具体的に
>こう言う事には注意した方が良い、と言う事はありますか?
アプリ自体のことは知りません(笑)
しかし、DDEを使うと言うことは起動ソフトをもう1つ増やすと言うことです。
(正確に言うと間違っているかもしれませんが(^-^;)
どのソフトでもそうですが、起動したまま放っておくと
ただ無駄にメモりを食うだけです。DDEも同じことで
使ったらちゃんと終了させてあげましょう

あと、マクロサーバのファイル操作を使うときは十分注意したほうがいいです(^-^;
一部、メモりリークがあるようです
はっきりとした証拠があるわけでもないし
アクセス元が原因かも知れないので断言はできませんが(^-^;

>なんか、ついでの質問の様で恐縮です。(^^;
どんどん質問しましょう(笑)

[ ]
RE:00125 ddewaitadviceコマンドについてNo.00130
かずや さん 98/11/10 08:46
 
>正確に計ることは出来ませんが、1000にすると1秒ずつ遅れていくのがはっきり
>わかるので、100だったら0.1秒遅れるのだろうと言うことです。
だから、1秒だと、秀TermEvoの画面出力の処理も
スクリプトの処理も終わってるだろうけど
0.1秒だと、画面出力の処理が、つまり
次に進むためのすべての処理が終わってない可能性もありますよね?
(・・・ないかな(^-^;)
そうすると、1ミリ秒で処理して、誤動作する可能性があるより
0.1秒で確実に処理したほうが良いでしょう?

>だから私なりの解釈をして100行送信すると10秒の損、と言うことです。
σ(^-^)としては一般に公開するのだから、処理速度より
安全性を重視しています。
これは強制するつもりはありませんから
10秒損するから変更しないのであれば、それでいいと思います。
それぞれ個性があって、それが大切だと思いますから(^-^;
↑の説明も不用だったかな(笑)

>よこしまさん かずやさん ごめんなさい
いえいえ(*^-^*)

[ ]