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

 あらすじ自動作成マクロの試作版ができました。
 と1ヶ月前にいいましたが、いやあ、あくまで試作版ですからいろいろと不備があるというか、できそこないここにきわまれりというか。非常に残念なできでした。公開していないのでなんのこっちゃと思われてるでしょうから、できたあらすじの一部を公開してみます。

 ダメさ加減がはっきりとわかるように同じエピソードから作られたあらすじをチョイスしています。あらすじ自動作成マクロがどういったものかイメージできるかと思います。


■自動あらすじ・例1

浜・小百合(はま・さゆり)は身長170センチで体重50キロの大学生です。夜はファミレスの給仕係をするのが日課です。
ファミレスの給仕係を終えて一息ついていると白いネコがあらわれました。白いネコがいいました。
「明日、砂浜で待っている」
白いネコはひらりと身をひるがえして去っていきました。


■自動あらすじ・例2

長塩・啓太(ながしお・けいた)は身長172センチで体重52キロの中学生です。夜は英会話教室へいき講師をするのが日課です。
英会話教室へいき講師を終えてコーラを飲んでいると木蓮の妖精があらわれました。木蓮の妖精がいいました。
「3時間後、ショッピングモールで待っている」
木蓮の妖精はマントをひるがえして去っていきました。


 ダメさ加減がおわかりいただけたかと思います^_^;

 あらすじ自動作成マクロの試作版ができました。妥協しまくったすえに大枠だけの完成です^_^; エピソードだけ集めたファイルを作り、そのなかから各エピソードをランダムに抽出、並べかえてあらすじファイルを作成。あらすじ自動作成マクロの動作をおおまかに説明するとこうなります。

 自動作成マクロで出力されたあらすじは、パッと見に同じような話にならないように小細工をしています。つまり、ちゃんと読むとエピソードをならべかえてるのがバレバレになるということでもあります^_^; いまの段階ではとても公開できるような代物じゃありません。元になる文章の量を増やすという力技もありますし、最終的にはエピソードを量産する方向にいくのは確実なんですが、いまの段階ではもうちょっと工夫をしたいんですよね。工夫の余地はまだまだあると思うんだ。

 あらすじ自動作成マクロを作っていたのですが、もう三ヶ月くらい頓挫しています。マクロ作成に時間をとれなくなって、それっきりになってしまっているのです。

 あらすじ自動作成マクロっていっても、そんな大それたものじゃないんですよ。あらかじめ短い文章をいくつか用意してランダムにつなぎあわせるだけ。冒頭とラストだけは特別なテキストを差し込みますので、パッと見にはランダムに作成されたようには見えないようになっています。自動作成のあらすじですから小説を書くときには使えませんが、お遊びとしてはおもしろいかなと思ってたんです。

 秀丸で動作する秀丸マクロでつくってたんですが、三ヶ月もほったらかしにしてますと、もうすっかり忘れてしまってます。また、いちからですわい。いろいろ試しながら完成させることにします。

 いつまで続くかわかりませんが、あらすじ自動作成マクロについて、可能な限り記事にしたいと思います。たぶん、とちゅうで妥協しそうな気がしますが……。

 秀丸エディタで動作するマクロ「乱数マクロ」です。浮動小数点数バージョンの秀丸エディタであれば"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;

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

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

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

 文の長さだ。

 一文は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;

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