マクロの概要(入門用) 見本 1(Ver9.34対応版)
見本1
ファイルの上書き保存、名前をつけて保存、文字列変数の文字列操作、テキスト文書への行・文字・タブ挿入、確認メッセージの表示、エラー処理の仕方などを本物のマクロファイルで確認できる見本を用意しました。
秀丸エディタを起動し、新規作成の状態にし、このヘルプファイルのマクロ部分(破線で囲まれた部分)をコピーしたものをペーストして、マクロファイルとして、名前(SaveHTML.mac)をつけてマクロファイル用のフォルダに保存してください。
保存するファイルの種類は「秀丸マクロファイル(*.mac)」です。
わかりにくい場合は、当ヘルプの「
マクロの登録と実行について」を参照してください。
「マクロ」→「マクロ実行」を選択すると、保存したファイルが、以下の経緯をたどってHTML形式になるようなマクロが実行されるサンプルになっています。
順を追って、その動作と、そう動作させるには、どのような記述が必要かをじっくりご確認ください。では、適当なテキスト文書を開いて、「マクロ」→「マクロ実行」→「SaveHTML.mac」で動かせてみてください。
詳しい説明はマクロ部分以下にあります。
以下がマクロ部分です。 |
//タイトルバーにマクロが実行中であることを表示
title "マクロ実行中です";
//作成したHTMLファイルの保存場所をフルパスで指定
$file_path = "";
//名前のついていない新規テキストファイルかどうかをチェック
$file_name = filetype;
if( $file_name == "new" ){
message "新規ファイルです \nファイル名をつけて新規保存してください \nマクロを終了します";
goto Doendmacro;
}
//最初に現在のテキスト文書を上書き保存
question "現在の文書をHTML化に先立って上書き保存しますか? \n 「いいえ」でマクロを終了します";
if( result == yes ){
save; //上書き保存実行
if ( !result ){ //エラー処理
message "ファイルの保存に失敗しました \nマクロを終了します";
goto Doendmacro;
}
}
else goto Doendmacro;
//文章にタブと「<br>」などを挿入するので確認メッセージを表示
question "現在の文書の上書き保存が終了しました \n現在の文書をHTML化しますか? \n「いいえ」でマクロを終了します";
if( result == no ) goto Doendmacro; //「いいえ」でマクロ終了処理に飛ぶ
//現在のファイル名を取得
$file_name = basename2;
//ファイル名はそのままで拡張子を「txt」から「html」に変更
#f_len = strlen( $file_name ); //ファイル名の文字数を取得
#cnt = #f_len - 1; //カウンター変数の初期化
while(#cnt > 0 ){
$str = midstr( $file_name,#cnt,1 );
//右側から一文字ずつ抜き出し「$str」に代入
if( $str == "." )break;
//もし拡張子の前に付く「.」だったらwhile文を抜ける
#cnt = #cnt - 1;
//万が一「.」が無くてもカウター変数が0になるとwhile文を抜ける
}
//ファイル名から拡張子のない名前を抜き出し
//そして、HTML形式を表す拡張子「.html」を付加
$file_name = leftstr( $file_name,#cnt ) + ".html";
//ここからテキスト文書にタブと「<br>」などを挿入開始
disabledraw; //画面の書き換えを禁止
movetolineno 1,1; //カーソルを最初の文字に移動
//ヘッダー部分を挿入
insert "<html>\n\t";
insert "<head>\n\t\t";
insert "<meta http-equiv = \"content-type \"content= \"text/html;charset=Shift_JIS \"> \n\t\t";
insert "<title>" + $file_name + "</title>\n\t";
insert "</head>\n\t";
insert "<body bgcolor=\"#ffffff\">\n";
//行頭にタブふたつと改行部分に<br>を挿入
while( code != eof ){ //ファイルの終わりまで以下の処理を実行
if( x == 0 ) insert "\t\t";
//行頭なら「x」は0なのでタブを二つ挿入
if( code == 0x0D ) insert "<br>";
//もし改行だったらcodeは「0x0D」なので「<br>」を挿入
right;
}
//フッター部分を挿入
insert "\n\t</body>\n";
insert "</html>\n";
enabledraw; //画面書き換えを許可
$file_name = $file_path + $file_name; //パスとファイル名を結合
//ファイルを保存すかどうかのメッセージを表示
//最初に「$str」変数にデフォルトのメッセージを代入
$str = "HTML化が終了しました。以下のファイル名で保存しますか?";
//同名のファイルが存在するかどうかをチェック
//存在する場合は上書き確認メッセージに変更
if( existfile($file_name) ){
$str = "HTML化が終了しました。同名のファイルが存在します。 \n以下のファイル名で上書き保存しますか?";
}
question $str + "\n" + $file_name + "\n「いいえ」でマクロを終了します";
if( result == no ) goto Doendmacro;
//HTML化したファイルを指定されたパスに保存
saveas $file_name,sjis; //文字コードをSHIFT-JISに指定
if( !result ) message "HTMLファイルの保存に失敗しました \nマクロを終了します";
//エラー処理(メセージのみ表示)
Doendmacro:
title 0; //タイトルバーの表示を元に戻す
endmacro; //マクロを終了
|
マクロを組む際には、作者がそのマクロにはどういうことをさせたらいいのかをまず決める必要があります。このサンプルでは、
ブラウザのタイトルバー部分にファイル名を表示させる・HTML形式のヘッダーを文頭に挿入する・行頭にタブを2つ入れる・改行位置に<br>を挿入する・HTML形式のフッターを文末に挿入させるなどといった動きを命令させています。
具体的なHTML形式への変更点です。 |
文頭に以下のヘッダー部分を挿入
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>「現在のファイル名.html」</title>
</head>
<body bgcolor="#ffffff">
文章の行頭にタブを二つ挿入
改行位置に「<br>」を挿入
文末に以下のフッター部分を挿入
</body>
</html>
|
マクロの大まかな動作説明です。
タイトルバーにマクロが実行中であることを表示させます。
作成したHTMLファイルの保存場所をフルパスで指定します。
現在編集中の文章は名前のついていない新規テキストファイルかどうかをチェックします。新規テキストなら先に名前を付けて保存してもらうメッセージを表示してマクロを終了します。
最初に現在表示中のテキスト文書を上書き保存します。
※エラー処理あり
文章にタブと「<br>」などを挿入するので確認メッセージを表示します。
「いいえ」を選択するとマクロを終了ます。
ヘッダー部分にHTML化したファイルを挿入するので、現在のファイル名を取得します。
ファイル名はそのままで拡張子を「txt」から「html」に変更します。
ここからテキスト文書にタブと「<br>」などを挿入開始します
文書の先頭にヘッダーを挿入します。
while文を使いファイルの終わりまでカーソルをひとつずつ移動させます。
もし、行頭ならばタブふたつを挿入します。
もし、改行なら<br>を挿入します。
HTML化の処理が終了したので、名前をつけて保存するかどうかの確認メッセージを表示します。
「いいえ」を選択するとマクロを終了ます。
名前を付けて新規保存します。
※エラー処理あり
終了処理をする共通goto文の部分で、タイトルバーの表示を元に戻し、マクロを終了します。
次にマクロの詳しい動作説明です。
コメント(説明)が多くて見にくいですが、処理の流れと内容を読み取ってください。
例 |
//タイトルバーにマクロが実行中であることを表示させます
title "マクロ実行中です";
//作成したHTMLファイルの保存場所をフルパスで指定します
//例 C:\\Folder\\Documents\\"
//ディレクトリ記号「\」はエスケープシーケンスで「\\」と記述します
$file_path = "";
//名前のついていない新規テキストファイルかどうかをチェックします
$file_name = filetype; //現在編集中のファイルのファイルタイプを表します
if( $file_name == "new" ){
//キーワード「filetype」の戻り値が「new」の場合「無題」ですので、
//先に名前を付けて保存してもらうメッセージを表示します
message "新規ファイルです \nファイル名をつけて新規保存してください \nマクロを終了します";
goto Doendmacro; //マクロを終了します
}
//最初に現在のテキスト文書を上書き保存します
question "現在の文書をHTML化に先立って上書き保存しますか? \n「いいえ」でマクロを終了します";
if( result == yes ){ //「はい」で以下の処理を実行
save; //上書き保存実行
if ( !result ){ //エラー処理
message "ファイルの保存に失敗しました \nマクロを終了します";
goto Doendmacro; //マクロを終了します
}
}
else goto Doendmacro; //「いいえ」でマクロを終了します
//文章にタブと「<br>」などを挿入するので確認メッセージを表示します
question "現在の文書の上書き保存が終了しました \n現在の文書をHTML化しますか? \n「いいえ」でマクロを終了します";
if( result == no ) goto Doendmacro; //「いいえ」でマクロを終了します
//現在のファイル名を取得します
//「basename2」はファイル名のパスを含まないベース名だけを取得します
$file_name = basename2;
//ファイル名はそのままで拡張子を「txt」から「html」に変更します
#f_len = strlen( $file_name );
//ファイル名の文字数を取得します
#cnt = #f_len - 1;
//カウンター変数を初期化します
//以下で使用する「midstr」関数は文字位置の指定が0から数えるために
//文字数から「1」を引きます
while(#cnt > 0 ){
//カウンター変数が0より大きい場合以下の処理を繰り返します
$str = midstr( $file_name,#cnt,1 );
//カウンター変数を利用してファイル名の
//右側から一文字ずつ抜き出し「$str」に代入します
if( $str == "." )break;
//もし拡張子の前に付く「.」だったらwhile文を抜けます
#cnt = #cnt - 1;
//次の文字を抜き出すためにカウンター変数をひとつ減らします
//万が一「.」が無くてもカウター変数が0になるとwhile文を抜けます
}
//カウンター変数は、ファイル名の左から拡張子の前に付く「.」までの
//ファイル名の文字数になっていますので、
//「leftstr」関数を利用してファイル名から拡張子のない名前を抜き出します
//そして、HTML形式を表す拡張子「.html」を付加します
$file_name = leftstr( $file_name,#cnt ) + ".html";
//ここで「$file_name」はHTML文書として保存する
//ファイル名と拡張子になっています
//例 test.txt → test.html
//ここからテキスト文書にタブと「<br>」などを挿入開始します
//画面の書き換えを禁止します
//行頭にタブを二つと改行部分に「<br>」を挿入します
//そのため画面更新をせずにマクロの実行速度を上げます
disabledraw;
//文書の先頭にカーソル移動
movetolineno 1,1; //カーソルを最初の文字に移動する
//ヘッダー部分を挿入
insert "<html>\n\t"; //「<html>」と改行とタブを挿入します
insert "<head>\n\t\t"; //「<head>」と改行とタブをふたつ挿入します
//以下は同様の処理です
insert "<meta http-equiv= \"content-type \" content= \"text/html;charset=Shift_JIS \"> \n\t\t";
//ダブルクォーテンションマークはエスケープシーケンスで「\"」です
insert "<title>" + $file_name + "</title>\n\t";
insert "</head>\n\t";
insert "<body bgcolor=\"#ffffff\">\n";
//行頭にタブふたつと改行部分に<br>を挿入します
while( code != eof ){ //ファイルの終わりでないならば以下の処理を実行します
if( x == 0 ) insert "\t\t";
//カーソルのキーワード「x」を利用して行頭を検出します
//行頭なら「x」は0なのでタブを二つ挿入します
if( code == 0x0D ) insert "<br>";
//カーソル位置の16進コードで改行を検出します
//もし改行だったらcodeは「0x0D」になりますので「<br>」を挿入します
right; //次の文字に移動します
}
//ここまでの処理でカーソルはファイルの最後にきています
//フッター部分を挿入します
insert "\n\t</body>\n";
//最初に改行とタブを挿入し「</body>」と改行を続けて挿入します
insert "</html>\n"; //「</html>」と改行を挿入します
//画面書き換えを許可します
//マクロで挿入したヘッダー部分、タブや改行部分の<br>などが表示されます
enabledraw;
$file_name = $file_path + $file_name;
//パスとファイル名を結合します
//HTML化が終了しましたので、
//ファイルを保存すかどうかのメッセージを表示します
//最初に「$str」変数にデフォルトのメッセージを代入します
$str = "HTML化が終了しました。以下のファイル名で保存しますか?";
//「existfile」関数を使って
//同名のファイルが存在するかどうかをチェックします
//同名のファイルが存在する場合は
//「$str」変数を上書き確認メッセージに変更します
if( existfile($file_name) ){
//同名のファイルを検索 ファイルが存在すれば戻り値は「true」です
$str = "HTML化が終了しました。同名のファイルが存在します。 \n以下のファイル名で上書き保存しますか?";
}
question $str + "\n" + $file_name + "\n「いいえ」でマクロを終了します";
if( result == no ) goto Doendmacro; //「いいえ」でマクロを終了します
//HTML化したファイルを指定されたパスに保存します
saveas $file_name,sjis;
//名前をつけて保存します「sjis」文字コードをSHIFT-JISに指定します
if( !result ) message "HTMLファイルの保存に失敗しました \nマクロを終了します";
//エラー処理です
//エラーが発生しても発生しなくとも、
//これ以下は終了処理しかありませんのでエラー発生時はメッセージのみ表示します
//終了処理をする部分です
//明示的に文「endmacro」でマクロを終了しない限り、
//上から下へと処理が進行します
//「Doendmacro:」は単なるラベル(名札)なので、
//マクロはラベルを無視してラベルの次の行の処理を実行します
//上から下に処理が進む場合はラベルはコメントと同じ扱いになります
//goto文でラベルに飛んだ場合はラベルの次の行から実行されます
Doendmacro: //ラベル名
title 0; //タイトルバーの表示を元に戻します
endmacro; //マクロを終了します
|