教えてください。No.26733
IkeIkeYoshiYoshi さん 09/06/17 22:42
 
 「秀丸エディタハンドブック」107頁〜111頁にある定型句をメニューで選択
して挿入する、定型句の挿入”if(result !=0){ insert $aisatu[result - 1 ]; }
”というところが、よく分からなくて教えて欲しいのです。
 本に記載されているマクロの文を実行すると、menuarray で表示されるメニュー一
覧は出てくるのですが、そのメニューを選んでも、思うように動作せず、全て、一番
上のメニュー、つまり$aisatu[0]しか出て来ないのです。[result - 1 ]であり、res
ult は $aisatu[1]となっているのですが、それ以下([2]以下)を選択しているに
もかかわらず、選択されていません。
 そもそもmenuarrayには、if(result !=0){ insert $aisatu[result - 1 ]; } のよ
うな実行文は書けないのか?、それとも、この実行文の書き方に問題があるのか? 
それとも、機種依存と言ったものがあり、上手く実行出来ないのか? 一体、何が何
だか分からないので、教えて頂きたいのです。
 PC歴は長いのですが、出版されている本に書かれていて、そのまま実行しても上手
く行かないところで、良く分からないなぁ!で、今まで終わってしまっていたのです
が、今回は、思い切って質問してみました。
 この本の出版が2004年のことです。すでに話題になっている場合は、どこを見れば
よいかも教えてください。



 

[ ]
RE:26733 教えてください。No.26734
アルビレオ さん 09/06/17 23:05
 
ユーザーのアルビレオです。

たぶん途中で他の命令を実行して result が上書きされてしまったのでしょう。
menuarray を実行しているところから条件判定の最後までをここに書き込めば、
どこがおかしいのか、どう直せばいいのか教えてくれる人がいると思いますよ。

[ ]
RE:26733 教えてください。No.26735
Iranoan さん 09/06/17 23:19
 
 IkeIkeYoshiYoshi さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
>  「秀丸エディタハンドブック」107頁〜111頁にある定型句をメニューで選択
> して挿入する、定型句の挿入”if(result !=0){ insert $aisatu[result - 1 ]; }
> ”というところが、よく分からなくて教えて欲しいのです。
 この『秀丸エディタハンドブック』を持っていないので、一般論を書きます。
・result は menuarray 文以外の幾つかの文でも値が変化するので、
  menuarray $aisatu, #i
  #result = result;
  の要領で、menuarray 文を実行後、直ちに変数に格納したほうが無難
・ここを読んでいるけど、この本を読んでいない人はいるので、思い通りに動
  作しない部分をできるだけ短くして、マクロ自体を投稿した方が解決が早い
・マクロの質問は、
  http://www.maruo.co.jp/hidesoft/4/
  にしたほうが良いかな

[ ]
RE:26735 教えてください。No.26736
IkeIkeYoshiYoshi さん 09/06/17 23:49
 
> IkeIkeYoshiYoshi さん今日は、Iranoan です。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>  にしたほうが良いかな

 早速の返答ありがとうございます。アルビレオさんもありがとうございます。
 とは言え、分かった訳ではありません。違う所に投稿したのかも分かりませんが、
本に載っているマクロソースコードを書きますと
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// 定型句を配列に代入
$aisatsu[0] = "おはようございます。";
$aisatsu[1] = "こんにちは。";
$aisatsu[2] = "こんばんは。";
// メニューの表示
menuarray $aisatsu, 3;
// 定型句の挿入
if(result !=0) {
  insert $aisatsu[result - 1];
}
-------------------------------------------------------
というものです。109頁からのマクロ例はdatファイルからメニュー一覧を持ってくる
もので、定型句の挿入の実行文は同じです。
マクロ初心者です、分かるようで、今一、本当に納得して分かりません。すいません。
  

[ ]
RE:26736 教えてください。No.26737
Iranoan さん 09/06/18 00:08
 
 IkeIkeYoshiYoshi さん今日は、Iranoan です。
>  とは言え、分かった訳ではありません。違う所に投稿したのかも分かりませんが、
> 本に載っているマクロソースコードを書きますと
 これは仕様との事でした。
http://hidemaruo.dip.jp:81/turukame/turukame_3/x0200802.html#805

 回避方法としては、
> if(result !=0) {
>   insert $aisatsu[result - 1];
> }

//------------------------------------------------------------
#result = result;
if(#result !=0) {
  insert $aisatsu[#result - 1];
}
//------------------------------------------------------------
とすれば良いです。

[ ]
RE:26737 教えてください。No.26738
秀丸担当 さん 09/06/18 09:41
 
Iranoanさんの言われる通り、resultをいったん変数に入れておくといいと思いま
す。
insert文そのものがresultを書き換えているため、resultはいったん変数に入れ
ないとだめでした。

2004年の本ということですが、これは途中から仕様が変わったわけではなく、
2004年当時のバージョンでもこのマクロは正しく動いていなかったと思います。

過去ログによると改善を検討ということになっていましたが、現在のバージョン
でも仕様は変わらず、挙動は同じでした。
なぜそのままだったのかは当時の判断としては確かなことは分かりませんが、
insert文だけでなく、至るところの文でそのようなことがあり、仕様が変わると
互換性が確保できるかどうかの懸念があったためかもしれません。

[ ]
RE:26738 教えてください。No.26741
IkeIkeYoshiYoshi さん 09/06/18 20:25
 
>Iranoanさんの言われる通り、resultをいったん変数に入れておくといいと思いま
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>互換性が確保できるかどうかの懸念があったためかもしれません。

ありがどうございました。マクロ上でも解決しましたし、よく理解できました。

[ ]