オンライン小説なオリジナル小説サイト うにたなで“秀丸エディタ”タグの付いているブログ記事

 秀丸エディタで動作するマクロ「乱数マクロ」です。浮動小数点数バージョンの秀丸エディタであれば"Random"で乱数を作成できるようですが、ふつうの秀丸エディタではできないっぽいのでマクロをつくりました。

 乱数とはいってもしょせん擬似乱数です。Windowsが起動してからの経過時間から数値をひっぱってきているだけですから……。でも、それっぽくなっているはず。

 この「乱数マクロ」単体では使い道がないので、ほかのマクロから呼びだして使用します。適当な名前(random.mac等)で保存して使用してください。ほかのマクロから呼びだす場合は、あたりまえですが、不要な箇所を削除してからお使いください。

 ちなみに、秀丸エディタVer7.02で作成とテストをしています。ほかのバージョンでの動作がどうなるかは不明。Ver6.14以降の秀丸エディタなら「まあ大丈夫」だとは思いますが……。

 以下、乱数マクロでございます。


//■秀丸エディタの乱数マクロ

// 設定項目。希望する乱数の最小値と最大値へ変更してください
#min = 1; //乱数の最小値。1桁のみ対応
#max = 6; //乱数の最大値。1桁のみ対応


// 変数の定義。変更不可
#number = 0; //乱数マクロ実行結果
#rammax = #max - #min; //判定に使用する乱数の最大値
#tickcount = 0; //Windowsが起動してからの経過時間
#tc1 = #max + 1; //Windows経過時間の下一桁
#start = 0; //カウント開始時のWindows経過時間
#delay = 0; //遅延時間
#count = 0; //計算回数
#temp = 0;


// Windows経過時間が変化するまでの計算回数をカウントする処理
// ばらつきがかなりでるのでちょうどいい
#start = tickcount;
#tickcount = tickcount;

while (#start == #tickcount) {
#tickcount = tickcount;
#count = #count + 1;
}

#delay = #count * 9;


// 経過時間から数値を取得する(0~#rammax)
while (#tc1 > #rammax) {

//経過時間をすすませる
while (#temp < #delay) {
#temp = #temp + 1;
}

//経過時間の下一桁を取得
$tickcount = str(tickcount);
$tc1 = rightstr($tickcount,1);
#tc1 = val($tc1);

}

// 取得した数値が0~#rammaxのため#minをたして帳尻をあわせる
#number = #tc1 + #min;


//確認用
message "乱数マクロの結果は " + str(#number) + " です。";


endmacro;

 正直いいまして一部手抜きをしています^_^; #min と #max の値をチェックすべきなんですが、はしょっています。必ず1桁にして #min よりも #max がおおきくなるようにしてください。

 ふりがなに使う括弧記号については、今回が最後である。これっきり。もう書かない――はずである。

 ふりがなに使う括弧記号について(完結編)では、過去に書いた小説は{ }のまま残しておくと書いたが、やんごとない事情で( )に変更したくなるかもしれない。自作の小説は100以上ある。小説のファイルをひとつひとつ開いて{ }を( )に置換するのは手間がかかる。

 そこで、秀丸で動作するマクロを作成した。「ふりがな括弧記号変換マクロ」だ。「ふりがな括弧記号変換マクロ」を実行すれば、同一フォルダにあるすべての小説で括弧記号が置換される。秀丸エディタを使用しており、ふりがなをあらわす括弧記号をかえたいかたにはオススメのマクロとなろう(わたし以外にいれば、だが)。

 以下、そのマクロである。コピペして適当なファイル名で保存していただきたい。

// ■ふりがな括弧記号変換マクロ // ふりがなをあらわす記号として使用している括弧記号をかえる。カレントフォルダにあるすべてのテキストファイル(拡張子がtxt)が対象となる。

// 括弧記号の設定
$kkmae1 = "{"; //置換したい括弧記号の始(使用している括弧に適宜変更のこと)
$kktoji1 = "}"; //置換したい括弧記号の終(同上)
$kkmae2 = "("; //置換したあとの括弧記号のはじまり(適宜変更のこと)
$kktoji2 = ")"; //置換したあとの括弧記号のおわり(同上)

// ふりがなとしてあつかわれているだろう箇所の条件設定
// 1・ふりがななのだから括弧記号の直前は漢字であるはず
// 2・ふりがななのだから括弧記号内はひらがなのみであるはず
$furigana1 = "[亜-黑]\\f" + $kkmae1 + "\\f[ぁ-ん]+\\f" + $kktoji1;
$furigana2 = "\\0" + $kkmae2 + "\\2" + $kktoji2;

// 括弧記号の置換
closenew;
grepreplace $furigana1,$furigana2,"*.txt",".",regular,backup;

endmacro;

 以上、「ふりがな括弧記号変換マクロ」であった。こうしたほうがもっとよくなるぞ、というあたたかいアドバイスは常に募集中。

 何度もテストを重ねて問題はなかった。ただ、なにぶん素人がつくったものなので思わぬ動作をするかもしれない。マクロ実行前にバックアップをとることをおすすめする。

 秀丸エディタがVer7.00にバージョンアップされました。長らくVer7.00のベータ版を使っていたのですが、ようやく正式版の登場です。

 ベータ版でも不都合はなかったのですが、たまたまバグがでていないだけかもしれない。やっぱり正式版が安心できます。

 秀丸エディタVer7.00での目玉は単語補完機能です。オートコンプリートや入力補完ともよばれています。「A」と入力すると、「A」で始まる単語を一覧表示してくれる。携帯電話での入力を想像していただければ、と思います。機能的には近い。

 秀丸エディタVer7.00で真に便利なのは、しかし、grepして置換する機能ではないでしょうか。grepしたのち、置換、さらに上書き保存と、一連の動作を自動でおこなってくれます。

 Webサイトのページを大量に編集するとき、「grepして置換」が真価を発揮してくれます。何十とあるページを自動的に編集してくれるので、煩雑な操作が必要ありません。便利便利。

 秀丸エディタのダウンロードは秀まるおのホームページへ。

 小説は文章の連なりだ。ひとつひとつの文章が読みづらいと小説も読みづらくなる。では、読みやすい文章を書くためには、なにに注意しなければならないのか。

 文の長さだ。

 一文は50文字~60文字くらいが目安だといわれている。もちろん、一概には決めつけられない。60文字を超えていても、語順に気をつけてさえいれば読みやすい文章が書けるだろう。

 だが、いちおうの目安があるのだから、推敲時のチェックに利用するのも手だろう。

 そこで、秀丸エディタで使用できるマクロを作成してみた。一文の文字数をカウントするマクロだ。長すぎる文があれば別のファイルに抽出してくれる。タグジャンプを使えば元ファイルの該当箇所へジャンプできるようにもしている。活用していただきたい。

 以下、引用部分が長文発見マクロである。

//長文発見マクロ。とりあえず作ってみたバージョン //一文が50文字を超えた場合、該当箇所を抽出するマクロ

// 超えたくない文字数設定
// 行頭字下げの全角スペースをカウントしたり、文末の判定があやしかったりするので、2文字分の余裕をもたせる。
#moji = 52;

// 初期設定
#hidemaru = hidemaruhandle(0);
$hidename = basename2;

#count = 0; //文字数のカウント
#startx = 0; //カウント開始位置x
#starty = 0; //カウント開始位置y
#line= 0; //エディタ的に計算した行番号(タグジャンプ用)
#endx = 0; //カウント終了位置x
#endy = 0; //カウント終了位置y

// テンポラリファイル作成
// マクロが完成するまでは見えるようにしておく。
newfile;
#hidetemp = hidemaruhandle(0);


// 文字のカウント開始
setactivehidemaru #hidemaru;
gofiletop;

// EOFが見つかるまで処理を繰り返す
while (code != -1) {

// タブと改行(0x0dを使う。\nはNG)が続くかぎりカーソル移動。
while (code == 0x0d || code == '\t') {
right;
}

// カウント開始座標の記憶
#startx = x;
#starty = y;
#line = lineno;

// 文末まで処理を繰り返す(ただし文末の判定があやふや)
while (code != '。' && code != '?' && code != '!' && code != 0x0d && code != -1) {

// 文末でなければ文字数をカウントしてカーソル移動
#count = #count + 1;
right;

}


// カウント終了座標の記憶
right; //句点ふくめてコピーするためのカーソル移動
#endx = x;
#endy = y;

// カウントのチェック
if (#count > #moji) {

// 該当箇所をコピー
beginsel;
moveto #startx,#starty;
$text = gettext(seltopx,seltopy,selendx,selendy);

// テンポラリファイルにペースト
setactivehidemaru #hidetemp;
insert $hidename + "(" + str(#line) + "): " + $text + "\n\n";

// 元のファイルに戻りカーソル移動
setactivehidemaru #hidemaru;
moveto #endx,#endy;

}

// 文字数カウント初期化
#count = 0;

}


// 抽出したテキストの整形
setactivehidemaru #hidetemp;
replaceallfast "」\\n","」",regular;

endmacro;

 なにぶん素人の作成した秀丸マクロなので、あまりエレガントではない。
「とりあえず動く」
 という程度。実際に使っていただければ幸せだが、使用の際は自己責任でお願いします。