writelogについて質問No.00437
横島 忠夫 さん 98/01/28 10:27
 
こんにちは, 秀まるおさん.

スクリプトの writelog なんですが,
仕様変わりました?

以前は writelog #x とやると 0a0d なしでの
書き込みだったと思うんですけど,

なんか v4.28 でやると 0a0d つきになって
いるように思います.

これまで writelog を使うときは

writelog #x + "^M^J"

ってやっていたんですが, 突然余計な
空行が入るようになってしまいました.

writelog #x

に直さないといけないですか?


詳しくいうと,

ログを作成するときに行をチェックしたい場合があって

         getline #x
         if(条件成立) writelog #x + "^M^J"

ってやっていたんですが, ログに余計な空行がはいるようになってしまいました.

         getline #x
         if(条件成立) writelog #x

ってやると空行は入りません.
どうしたらよいでしょう?

よこしま

98/01/28 (水)


[ ]
RE:00437 writelogについて質問No.00442
秀まるお さん 98/01/28 14:01
 
 スクリプトのwritelog文ですが、まったくいじってないです。そのかわり、
ログの出力関係の処理をいじってしまいました。

 それで何か影響が出たのかもしれないです。ちょっと調べてみます。

 それからそれから、よこしまさん作の「まうすで秀Term」がスクリプトエラーを
起こしてしまったそうですが、もしかしてこれは秀Term側で何か非互換になるよう
な仕様変更が入ってしまったのでしょうか?。FWINCOMからダウンロードして調べ
ようとしたら新しい版が出ていたようなので、もしよろしければ教えてください。


[ ]
RE:00442 writelogについて質問No.00443
秀まるお さん 98/01/28 14:02
 
 ちとON書きしたら「マウス」が「まうす」になってしまいました。失礼

[ ]
RE:00437 writelogについて質問No.00444
秀まるお さん 98/01/28 14:40
 
 えっと、結論から先に書くと、V4.28で従来の版と非互換が発生していました。具
体的には、従来の版では^Mが連続した場合に^Mを1つだけにしてログに出力するよう
になってしたのですが、V4.28からその処理が無くなったためにおかしくなったよう
です。

 そもそもgetline文があんまりうまく作られてなかったみたいです。

 getline文ですが、それによって得られた文字列の最後に必ず^Mがつきてきてしま
います。これは昔からそうなっていて今のバージョンでも同じなので、いまから変更
するのはかえって危険そうなのでそのままにしておきます。

 んでもって、ログの出力方法ですが、V4.28から「受信時 制御コードの除去」がon
かoffかによって動作が変わるようになっています。ついでなんで説明させていただ
きます。

 「受信時 制御コードの除去」がoffの場合には、従来通り機能します。
 「受信時 制御コードの除去」がonの場合には、以下のようになります。

 まず、^M  (0x0D) を受信した場合、その文字は無視されます。
       ~J  (0x0A) を受信した場合、^M^Jに変換してログに出力します。

 したがって、例えば   ^M^J^M という文字列をログに出力しようとすると、^M^Jに
変換されて出力されます。「受信時制御コードの除去」がoffの場合には、そのまま^
M^J^Mとして出力されます。

 今回の

   getline #line
   writelog #line + "^M^J"

 ですが、こうすると、改行コードは ^M^M^J という風になりますが、昔の秀Termで
は^M^Mが連続していても1つに変換されるので問題無かったのでした。

[ ]
RE:00444 writelogについて質問No.00449
ま神51号 さん 98/01/28 15:45
 

> getline文ですが、それによって得られた文字列の最後に必ず^Mがつきてきてしま
>います。これは昔からそうなっていて今のバージョンでも同じなので、いまから変更
>するのはかえって危険そうなのでそのままにしておきます。

>   getline #line
>   writelog #line + "^M^J"

 ということは、

  getline #line
  #line = dropback( #line, "^M" )
  writelog #line + "^M^J"

 と書いておけば以前のでも大丈夫になるんでしょうか。(^^ゞ

[ ]
RE:00444 writelogについて質問No.00450
横島 忠夫 さん 98/01/28 22:32
 

> それからそれから、よこしまさん作の「まうすで秀Term」がスクリプトエラー
>を起こしてしまったそうですが、もしかしてこれは秀Term側で何か非互換になる
>よう>な仕様変更が入ってしまったのでしょうか?。

お恥ずかしい話なんですが, 単なるバグでして
文字列を格納するときに

#a === "XYZ"

みたいに, 「=」 が3つ書いてある場所あったのでした.
ところが, v4.25までは, なぜか全く問題なく動作して
いまして, 「v4.27をインストールしたら動かなくなった」
というのをメールで教えてもらって判明し, 急遽バージョンアップ
することになってしまいました. (^^;


> 「受信時 制御コードの除去」がoffの場合には、従来通り機能します。
> 「受信時 制御コードの除去」がonの場合には、以下のようになります。
>
> まず、^M  (0x0D) を受信した場合、その文字は無視されます。
>       ^J  (0x0A) を受信した場合、^M^Jに変換してログに出力します。


とうことは, ま神51号さんがおっしゃるように

getline #line
writelog dropback(#line, "^M") + "^M^J"

って直せば「受信時 制御コードの除去」が onでもoffでも
前の秀Termでも正常にログが作成されるっていうことですね?


ところで, 一応なんでこんな tricky なことをしているかって
いうことを説明させて頂くと, メールの受信処理なんかに使っています.
具体的には以下のように処理しています.

==============================

         send "READ NEW^M"
         wait "^M^J"
         getline #line

         #a == search(#line, "メールはありません")
         #b == search(#line, "バイナリーのため、表示出来ません◆")

         if(#a == "")
                 log "NifMail.Log", 1024
                 writelog "^M^J"
                 writelog dropback(#line,"^M") + "^M^J"
                 ;こうしたらいいんですよね?
         else
                 return
         endif

         if(#b != "")
                  ##existbinary = 1
         else
                  ##existbinary = 0
         endif

;##existbinary = 1 ならダウンロード処理をする

====================================

送信日時 98/01/28 (水) 22:30


[ ]
RE:00450 writelogについて質問No.00451
横島 忠夫 さん 98/01/28 22:55
 

>getline #line
>writelog dropback(#line, "^M") + "^M^J"

あれ? 単に

getline #line
writelog #line + "^J"

ってやれば全然問題ないんですよね?
(見直したら殆どこうなっていました.)

writereg を 89箇所も使っていた よこしま

(秀丸のグレップによる)



[ ]
RE:00451 writelogについて質問No.00455
ま神51号 さん 98/01/29 11:11
 

>あれ? 単に
>
>getline #line
>writelog #line + "^J"
>
>ってやれば全然問題ないんですよね?

 あ、その通りですね。(^^ゞ

 とんだ横槍入れてしまってすみません。m(_ _)m

[ ]
RE:00450 writelogについて質問No.00459
秀まるお さん 98/01/29 11:29
 
    getline #line
    writelog #line + "^J"

 でもいいです(と書こうとしたら既にレスが付いていた)。

 とりあえずの対処としてはそういう風に直していただけるとありがたいです。

> #a === "XYZ"
>
> みたいに, 「=」 が3つ書いてある場所あったのでした.

 たしかにこの辺いじってしまいました。んではせっかくなので元に戻しておきます
(^^;

[ ]
RE:00459 writelogについて質問No.00467
横島 忠夫 さん 98/01/30 23:27
 
こんにちは, 秀まるおさん.

> とりあえずの対処としてはそういう風に直していただけるとありがたいです。

ちゅうことなので, 「マウスで秀Term」の方を
バージョンアップしておきました.

今回は久し振りの「24時間以内の公開」がされた
みたいです.

しかし.. 「今度の版は最終版です。」と宣言してから
2回目のバージョンアップだども。。。
(深い意味はないです.)


ついでに宣伝モード(^^;

NIFTYエクスプローラv0.82公開中ですぅぅ>all
(秀ネットも対応してるです.)

よこしま


[ ]