はじめましてNo.00120
ISUMI さん 98/04/19 15:04
 
ISUMI と いいます。
初心者です(秀丸暦4日です)
すっごい初歩的な事で気が引けるんですが・・・・・

なんて書けばいいのか よくわかんないんですが・・・・・
ファイルから文字列を取得するにはどうすればいいですか?
たとえば・・・・
macro.mac というファイルから
macro.txt から $me="hello"と いう文字列を取得したいんです。

あと・・・・・
menuからmenuを機動する事は出来ますか?

ヘルプを読んでもよくわかりません。
おねがいします。

[ ]
RE:00120 はじめましてNo.00121
杉浦 まさき さん 98/04/19 23:54
 
ISUMI さん、はじめまして。
 杉浦 まさき と申します。

>ファイルから文字列を取得するにはどうすればいいですか?
>たとえば・・・・
>macro.mac というファイルから
>macro.txt から $me="hello"と いう文字列を取得したいんです。

??もう少し詳しく教えて下さると答えられると思うんですが。
 #macro.txt の中身がどうなってて、
  そこからどういうルールで文字列を拾ってくればいいのかetc.

>menuからmenuを機動する事は出来ますか?

menu 文の後の条件分岐の中でまた menu 文を使えばいいのでは?
 例えば以下のような感じですが。

//-----------------------------------------
_mainmenu:
menu "メニュー1", "メニュー2";
if( result == 0 ) endmacro;
else if( result == 1 ){
    menu "メニュー1の1", "メニュー1の2", "メニュー1の3";
    if( result == 0 ) goto _mainmenu;
    else if( result == 1 ){
        // メニュー1の1選択時の処理
    } else if( result == 2 ){
        // メニュー1の2選択時の処理
    } else {
        // メニュー1の3選択時の処理
    }
} else {
    // メニュー2選択時の処理
}
endmacro;
//-----------------------------------------

もしかして…メニューの項目の右側に |>(三角) を表示させて、
 そこを選ぶと横にメニューが出てくるようにしたいとかですか?
 #Windows のスタートメニューのような感じ、ということですが。
 残念ながらそれは「不可能」です(:o:)。
 #欲しいなぁ〜とは常々思ってるんですが(^^;。

[ ]
RE:00121 はじめましてNo.00122
杉浦 まさき さん 98/04/19 23:58
 
自分のコメントへのコメントですが…
 サンプルのインデントがなくなってしまって見づらいので、
 もう一度書き込みしときます。
 #理由は想像つきますが…直してもらえると有り難いです。>フォーラム管理者様

>//-----------------------------------------
>_mainmenu:
>menu "メニュー1", "メニュー2";
>if( result == 0 ) endmacro;
>else if( result == 1 ){
>    menu "メニュー1の1", "メニュー1の2", "メニュー1の3";
>    if( result == 0 ) goto _mainmenu;
>    else if( result == 1 ){
>        // メニュー1の1選択時の処理
>    } else if( result == 2 ){
>        // メニュー1の2選択時の処理
>    } else {
>        // メニュー1の3選択時の処理
>    }
>} else {
>    // メニュー2選択時の処理
>}
>endmacro;
>//-----------------------------------------

#行先頭の ">" はマクロにする時には除いて下さい。

[ ]
RE:00121 はじめましてNo.00124
ISUMI さん 98/04/20 13:42
 
杉浦 まさき さん コメントありがとうございます

>>ファイルから文字列を取得するにはどうすればいいですか?
>
>??もう少し詳しく教えて下さると答えられると思うんですが。
> #macro.txt の中身がどうなってて、
>  そこからどういうルールで文字列を拾ってくればいいのかetc.
うーーん。。。。
自分でもどうやって説明すれば良いのか、わかんないんですけど・・・・・(^^;)
Menuに使いたいので [ $m1 ="Hello" ]と ゆう文字を別のファイルから読み込むよう
に 出来ますか?( $me1 〜 $me40まで あります )
わかりにくい説明ですみません。

>>menuからmenuを機動する事は出来ますか?
>menu 文の後の条件分岐の中でまた menu 文を使えばいいのでは?
できました!
ありがとうございます(^^)

>もしかして…メニューの項目の右側に |>(三角) を表示させて、
> そこを選ぶと横にメニューが出てくるようにしたいとかですか?
> #Windows のスタートメニューのような感じ、ということですが。
> 残念ながらそれは「不可能」です(:o:)。
> #欲しいなぁ〜とは常々思ってるんですが(^^;。
それ ほしいですね。(・・;)

[ ]
RE:00124 はじめましてNo.00125
番頭++ さん 98/04/20 14:53
 
>Menuに使いたいので [ $m1 ="Hello" ]と ゆう文字を別のファイルから読み込むよう
>に 出来ますか?( $me1 〜 $me40まで あります )

今日は、こうゆう事ですか ...

配列を使用する方法と、

// test1.mac
$tb[00]="data0 - halo ...";
$tb[01]="data1 - bye ...";
$tb[02]="data2 - \\";
#tb = 02 + 1;
//R mousemenuarray $tb, #tb;
menuarray $tb, #tb;
#menu1 = result -1;
if( #menu1 < 00 ){ endmacro; } // [Esc] etc.
newfile;
insert $tb[#menu1]+"\n";
endmacro;
// end of macro;

ファイルを利用して、

// test2.mac 作成 file = TEST3.INI
$INI_file = hidemarudir + "\\TEST3.INI";
openfile $INI_file;
selectall;delete;
insert "[Section1]\n";
insert "tb00=data0 - halo ...\n";
insert "tb01=data1 - bye ...\n";
insert "tb02=data2 - \\\n";
save;
endmacro;
// end of macro;

// test3.mac 読込み
$INI_file = hidemarudir + "\\TEST3.INI";
#tb = 00;
while(true){
$wk1 = "tb" + rightstr("00"+str(#tb),2);
//R message getinistr($INI_file,"Section1",$wk1);
$tb[#tb] = getinistr($INI_file,"Section1",$wk1);
if( $tb[#tb] == "" ){break;}
#tb = #tb + 1;
}
if( ! #tb ){ endmacro; }
menuarray $tb, #tb;
#menu1 = result -1;
if( #menu1 < 00 ){ endmacro; } // [Esc] etc.
newfile;
insert $tb[#menu1]+"\n";
endmacro;
// end of macro;

[ ]
RE:00124 はじめましてNo.00126
杉浦 まさき さん 98/04/22 00:57
 
ISUMI さん、こんばんは。
 杉浦 まさき です。

#既に 番頭++ さんからレスが付いてますが、
 初めにレスをつけたモンとして一応ケジメ取っときます(^^;。

>Menuに使いたいので [ $m1 ="Hello" ]と ゆう文字を別のファイルから読み込むよう
>に 出来ますか?( $me1 〜 $me40まで あります )
>わかりにくい説明ですみません。

「メニューの項目をあらかじめファイルに記憶しておいて、
 それをマクロ実行時に読み出してメニューを表示させたい」
 ということですよね?
 それなら(番頭++ さんがやられているように)マクロの
  ini ファイルの読み書きをする命令(getinistr(), writeinistr, etc.)
 を使うのが手っ取り早いです。

一方、メニューを表示する命令には、
  直接項目を引数として与える物(menu, mousemenu) と
  項目を配列変数で与える物(menuarray, mousemenuarray) の
 2種類があるんですが、ini ファイルとの連携をする時は
 後者(と while ループ)を使う方が楽です。

例えば、

;------ menu.ini ------
[Menu]
m0=Hello
m1=Good Morning
m2=Bye
;----- end of ini -----

という中身の ini ファイルを作成しておけば、
 マクロ側で以下のように使うことができます。

//-----------------------------------------------------------//
// メニューの項目を ini ファイルから取得するマクロ(サンプル)
$menufile = "c:\\myfolder\\menu.ini"; // ini ファイルの名前
#a = 0;
while( 1 ){
    $menu[#a] = getinistr($menufile,"Menu","m"+str(#a));
    if( $menu[#a] == "" ) break;
    #a = #a + 1;
}
// ループを抜けた時点で #a には(有効な)要素の数が入る。

// メニューの表示と選択された項目の番号を取得
menuarray $menu, #a; // 引数の与え方はヘルプを参照して下さい(^^;。
if( result == 0 ) endmacro; // キャンセルの場合
else #i = result - 1; // 選択された項目の番号(配列のインデックス)

// 以降は選択された項目についての処理を行う
// (ここでは単に結果を表示するだけ(^^;)。
message "選択された項目は [" + $menu[#i] + "] です。";

endmacro;
//-----------------------------------------------------------//

#そもそもデータファイルを ini ファイルの形式にすることが
 できない場合は別の方法を使うことになりますが、
 ちょっとややこしく(^^;なりますね。
 #そん時はまた聞いて下さい。

>それ ほしいですね。(・・;)

メニューに関しては他にも「これが欲しい」というのを
 いくつか要望として出してありますが、
 一向に実装される気配がないです(:o:)。
 #カスケードメニュー(前に言ってた奴)については、
  秀丸マクロの仕様上そもそも実装は無理だろ〜な〜…多分(^^;。


[ ]
RE:00126 はじめましてNo.00127
ISUMI さん 98/04/22 23:29
 
杉浦 まさき さん  番頭++ さん コメントありがとうございます。

>[Menu]
>m0=Hello
>m1=Good Morning
>m2=Bye
これを Test.ini に して

>$menufile = "c:\\myfolder\\test.ini"; // ini ファイルの名前
>#a = 0;
>while( 1 ){
>    $menu[#a] = getinistr($menufile,"Menu","m"+str(#a));
>    if( $menu[#a] == "" ) break;
>    #a = #a + 1;
>}
>menuarray $menu, #a; // 引数の与え方はヘルプを参照して下さい(^^;。
>if( result == 0 ) endmacro; // キャンセルの場合
>else #i = result - 1; // 選択された項目の番号(配列のインデックス)
>
>message "選択された項目は [" + $menu[#i] + "] です。";
>
>endmacro;
これを test.mac に して 実行してみたんですけど 動きませんでした(;_;)
なぜでしょう?(/_;)

>#そもそもデータファイルを ini ファイルの形式にすることが
> できない場合は別の方法を使うことになりますが、
> ちょっとややこしく(^^;なりますね。
複雑なのは きらいです(笑)
それ以前に理解できません(T_T)

番頭++さんの マクロは 僕にはちょっと難しいです(/_;)
でも 少しでも理解できるようにヘルプを見てがんばってますので 内容がわかれば
使いたいです。

あと・・・
>Menuに使いたいので [ $m1 ="Hello" ]と ゆう文字を別のファイルから読み込むよう
>に 出来ますか?( $me1 〜 $me40まで あります )
この説明 変でしたね(笑)
( $m1 〜 $m40 まで あります ) でした(^^;)

それでは。

[ ]
RE:00127 はじめましてNo.00129
杉浦 まさき さん 98/04/23 02:35
 
ども、杉浦 です。

>なぜでしょう?(/_;)

>>$menufile = "c:\\myfolder\\test.ini"; // ini ファイルの名前
       ^^^^^^^^^^^^^^^
      この部分も変える必要がありますが…。
      (test.ini のあるフォルダ名を入れて下さい。
       & フォルダ名を区切る円記号は2つ重ねて下さい。)

ちょっとわかり難い書き方でしたねm(_ _)m。

#テストもせずに書き込んだんで一瞬焦りましたが、
 さっき自分の所でテストしてみたらちゃんと(^^;動作してました。

[ ]