LOGファイル作成で質問No.00477
gun さん 98/02/02 15:05
 
こんにちはgunです。

初歩的な質問ばかりでもうしわけありませんが、
どなたかわかる方教えてください!

現在PATOLISにtelnet接続をして調査後のLOGを機械的に処理しています。
調査内容はファイルから読み取って1行ずつ送信しています。

そこで下記のスクリプトでこちらから送信する部分のLOGを省きたいのですが、
(要はPATOLISからの受信部分のみLOGに記載したい)
log pauseとlog resumeを下記の位置に入れてもうまくいきません。
(送信部分のLOGも書き込まれてしまいます)
使い方が悪いんでしょうか?

TestStart:
#file = "\\test\test\test.txt"
getdate #date
log "\\test\test\" + part( #date, 0, 4 ) + "test.log", create, nocontrolcod
e
openfile #file
while(1)
readfile #file,#str
log pause
if(no) breakloop
send #str + "^M"
log resume
wait "?"
endwhile
closefile #file

send "LOGOFF^M"


[ ]
RE:00477 LOGファイル作成で質問No.00480
秀まるお さん 98/02/03 12:02
 
 sendした文字列を受信している最中にlogをpauseしてないといけないです。

 この場合、スクリプトをこういう風に直せば直るんじゃないかと思います。

    log pause
    if(no) breakloop
    send #str + "^M"
    log resume

 この部分を、

    log pause
    if(no) breakloop
    send #str + "^M"
    wait "^M^J"
    log resume

 にすればいいと思います。


[ ]
RE:00480 LOGファイル作成で質問No.00488
gun さん 98/02/04 10:15
 

> sendした文字列を受信している最中にlogをpauseしてないといけないです。
>
> この場合、スクリプトをこういう風に直せば直るんじゃないかと思います。
>
>    log pause
>    if(no) breakloop
>    send #str + "^M"
>    log resume
>
> この部分を、
>
>    log pause
>    if(no) breakloop
>    send #str + "^M"
>    wait "^M^J"
>    log resume
>
> にすればいいと思います。
>

gunです。
早速の御回答ありがとうございます。
しかし残念なことに上記の

wait "^M^J"

をいれてもやはり送信内容までLOGに記載されてしまいます。
スクリプトの状態を表示させていても(早すぎてよく分かりませんが...)
log resumeの次の行(wait "?")まで進んでしまっているようなかんじです。

そもそも wait "^M^J" の意味をしっかり理解していないんですが、
”Enterキーと改行”を待つ...?
^Mと^Jの区別もよく分かっていません。
まとめて教えていただけないでしょうか?



[ ]
RE:00488 LOGファイル作成で質問No.00493
秀まるお さん 98/02/04 11:20
 
 んでは、send #str + "^M" をする前にもWAIT文が必要みたいです。

 send #str + "^M"する前に画面に現れる内容がどうなっているのかなんかも教えて
欲しいです。

 ちなみにどうしてこういうことになるかというと、つまり、送信と受信とスクリプ
トの実行はまったく独立して同期せずに動作しているということが原因です。

 例えば、スクリプトで send "ABC"とやって送信したとしても、その文字列は即座
に送信される訳じゃなくて、送信用のバッファに溜まるだけで、スクリプトは勝手に
次の処理を実行します。

 だから、

    log pause
    send #str + "^M"
    log resume

 という処理は、ほんの一瞬だけlogがpauseされるだけで、まったく意味がありませ
ん。

 したがって、sendで送った文字列を受信するまでログをポーズしたいということで
あれば、その間スクリプトを待機させるために、wait文が必要になります。

 さらに、実はsend文を実行する前に何か文字列を送っているとすると、その文字列
のせいで同期がずれてしまうことがあります。

 その辺の同期を取るためにもたぶんsend文の前に何か同期を取る処理が必要なんじ
ゃないかと思う訳です。


[ ]
RE:00493 LOGファイル作成で質問No.00495
gun さん 98/02/04 16:30
 

> んでは、send #str + "^M" をする前にもWAIT文が必要みたいです。
>
> send #str + "^M"する前に画面に現れる内容がどうなっているのかなんかも教えて
>欲しいです。
>
<略>
> その辺の同期を取るためにもたぶんsend文の前に何か同期を取る処理が必要なんじ
>ゃないかと思う訳です。
>

PATOLISの画面内容です。
?マークをwaitで待って1行ずつ送信しています。
送信後すぐにPATOLIS側から返事がありますが
送信部分のみをLOGからカットできるんでしょうか?

?FILE P                  ←送信部分
 特許ファイルに接続しました。    98/02/04  14:43:39
?F PN=(H09000001+H09000002)   ←送信部分

 PN=(H09000001+H09000002)

 S1   P             2  
?SORT KEY=PN             ←送信部分

 O2   P             2  KEY=PN
?L FREE=PN,/,TI,/,APN,/,RED,/,FDK,/,/  CONTINUE ←送信部分
 O2       (P   ) 98/02/04        1/2
  公開番号  平09-     1
  発明等の名称  手動農具
  出願人  浅香工業 (株)
  請求日  平 8. 4. 5
  審査最終処分


 O2       (P   ) 98/02/04        2/2
  公開番号  平09-     2
  発明等の名称  草取り用具
  出願人  浅野 克己
  請求日  平 7. 6.23
  審査最終処分

[ ]
RE:00495 LOGファイル作成で質問No.00496
gun さん 98/02/04 17:08
 

先ほどのPATOLIS画面はLOGをコピーしたもので
実際の秀Termの画面と少し違っていたので
再度御連絡します。
log resume
の前に
wait "^M^J"
が入っているとLOG作成時に?の後の改行がなくなるみたいです。

FILE P                ←送信部分
 特許ファイルに接続しました。    98/02/04  14:43:39
?                    ←ここに改行が入る
F PN=(H09000001+H09000002) ←送信部分

 PN=(H09000001+H09000002)

 S1   P             2  
?                    ←ここに改行が入る
SORT KEY=PN           ←送信部分

 O2   P             2  KEY=PN
?                    ←ここに改行が入る
L FREE=PN,/,TI,/,APN,/,RED,/,FDK,/,/  CONTINUE   ←送信部分
 O2       (P   ) 98/02/04        1/2
  公開番号  平09-     1
  発明等の名称  手動農具
  出願人  浅香工業 (株)
  請求日  平 8. 4. 5
  審査最終処分


 O2       (P   ) 98/02/04        2/2
  公開番号  平09-     2
  発明等の名称  草取り用具
  出願人  浅野 克己
  請求日  平 7. 6.23
  審査最終処分

[ ]
RE:00495 LOGファイル作成で質問No.00500
秀まるお さん 98/02/05 11:52
 
 まいどどうも。

 そういえば1つ説明し忘れていたことがありました。

 ^Mというのはキャリッジリターンの制御コードで、リターンキーを押した時に秀
Term側から送信されます。

 んでもって、秀Term側が^Mを受信すると、カーソルを行頭に移動するという意味に
なりまして、それだけでは改行しません。

 んでもって、普通のホスト局というのは改行コードとして^M^Jというのを送ってき
ます。^Jというのでカーソルが下に移動してスクロールアップします。

 「改行」というのは、送信の時は^Mで、受信の時は^M^Jとなります。sendの時は^M
で、waitの時は^M^Jです。これはそういう物なんだとご理解ください。

 それで、本題に戻りますけど、"?"を受信して、その次に#strを送信する訳ですよ
ね。

 そうするとスクリプトは

    wait "?"
    send #str + "^M"

 ってなる訳ですが、このときの#strの文字列だけをログから除去したいとするなら
ば、スクリプトは以下のような処理でいいと思います。

    wait "?"
    log pause
    send #str + "^M"
    wait #str
    log resume

 こうすれば"?"の後ろの改行がログにちゃんと入ってくれると思います。またはこ
のような書き方もあります。

    wait "?"
    log pause
    send #str + "^M"
    wait "^M^J"
    log resume
    writelog "^M^J"


[ ]
RE:00500 LOGファイル作成で質問No.00503
gun さん 98/02/05 13:20
 
丁寧な解説をありがとうございます。

> ってなる訳ですが、このときの#strの文字列だけをログから除去したいとするなら
>ば、スクリプトは以下のような処理でいいと思います。
>
>    wait "?"
>    log pause
>    send #str + "^M"
>    wait #str
>    log resume
>

 send #str + "^M"の後にwait #strをいれることによって
問題は解決しました。
ありがとうございます。
ただし、

> こうすれば"?"の後ろの改行がログにちゃんと入ってくれると思います。またはこ
>のような書き方もあります。
>
>    wait "?"
>    log pause
>    send #str + "^M"
>    wait "^M^J"
>    log resume
>    writelog "^M^J"
>

 send #str + "^M"の後に wait "^M^J"を使用した場合は
やっぱり送信部分の#strがLOGに入ってしまいます。
送信側の文字列をwaitで同期をとる場合は
だめなのかもしれませんね。

ちょっと気がついたんですが、今回のような内容の場合、
わたしみたいなスクリプト作成初心者の投稿でも
スクリプト作者会議室の方へ投稿したほうがよかったですか?

[ ]
RE:00503 LOGファイル作成で質問No.00505
秀まるお さん 98/02/06 10:21
 
>  send #str + "^M"の後に wait "^M^J"を使用した場合は
> やっぱり送信部分の#strがLOGに入ってしまいます。

 あれ、そうですか。原因はなんだか?。まぁいいか。

> スクリプト作者会議室の方へ投稿したほうがよかったですか?

 そうですね。なるべくならそっちの方かいいかも。

[ ]