新規作成日 2018-07-02
最終更新日
テーブル・タグを効率的に作成する方法として、Excelなどの表計算アプリケーションからマクロを使って変換する方法があります。それとは別に、空白行区切りのテキスト・データをhtmlのテーブル・タグに加工できれば、かなりhtmlテキストの作成効率が上がるのでは無いかと考えました。そこで、秀丸エディタのマクロを使って変換する方法に付いて考えてみました。
加工前のテキスト
メンバー
解説
CompletionListBox()
CompletionListBoxクラスの新しいインスタンスを初期化します。
ActualHeight
この要素のレンダリングされた高さを取得します。
(FrameworkElementから継承されています)
ActualWidth
この要素のレンダリングされた幅を取得します。
(FrameworkElementから継承されています)
期待する加工後のテキスト
<table>
<tr>
<th>メンバー</th>
<th>解説</th>
</tr>
<tr>
<td>CompletionListBox()</td>
<td>CompletionListBoxクラスの新しいインスタンスを初期化します。</td>
</tr>
<tr>
<td>ActualHeight</td>
<td>この要素のレンダリングされた高さを取得します。
(FrameworkElementから継承されています)</td>
</tr>
<tr>
<td>ActualWidth</td>
<td>この要素のレンダリングされた幅を取得します。
(FrameworkElementから継承されています)</td>
</tr>
</table>
マクロを作成する
洗練されたコードではありませんが、なんとか意図した動作になりました。
/// テキストを表に変更する
/// 区切りは、空白行
/// 2列の表に変更する。1行目は、項目名
#columnCount = 2; // 作成する表の列の数
$cellString = ""; // 表のセルの内容を示す変数を初期化する
// ファイル先頭に <table>タブを挿入する
gofiletop;
insert "<table>";
insertreturn;
// <tr>タグを挿入する
golinetop; // 行頭に移動する
insert "<tr>";
insertreturn;
// 一行目を取得する
/// 空白行をスキップする
golinetop; // 行頭に移動する
while(code == 0x0D)
{
down 1; // 次の行に移動する
golinetop; // 行頭に移動する
}
/// 項目タイトルを処理する
#i = #columnCount; // 繰り返し回数を設定する
while(#i)
{
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
$workString = gettext(seltopx,seltopy,selendx,selendy); // 選択行の内容を取得する
if($workString != "" )
{
while($workString != "" )
{
// 表のセルの内容を示す変数に行を内容を格納する
$cellString = $cellString + $workString;
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
delete; // 選択範囲を削除
down 1; // 次の行に移動する
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
$workString = gettext(seltopx,seltopy,selendx,selendy); // 選択行の内容を取得する
}
insert "<th>" + $cellString + "</th>";
$cellString = ""; // 表のセルの内容を示す変数をクリアする
down 1; // 次の行に移動する
}
else
{
// 空白行をスキップする
while(code == 0x0D)
{
down 1; // 次の行に移動する
golinetop; // 行頭に移動する
}
}
#i = #i - 1;
}
golinetop; // 行頭に移動する
insert "</tr>";
insertreturn;
/// 項目を取得する
#i = #columnCount; // 繰り返し回数(表の列の数)を設定する
while(code != eof)
{
// <tr>タグを挿入する
golinetop; // 行頭に移動する
insert "<tr>";
insertreturn;
while(#i)
{
// 空白行をスキップする
while(code == 0x0D)
{
down 1; // 次の行に移動する
golinetop; // 行頭に移動する
}
// カーソル行の内容を取得する
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
$workString = gettext(seltopx,seltopy,selendx,selendy); // 選択行の内容を取得する
while($workString != "" )
{
// 表のセルの内容を示す変数に行を内容を格納する
$cellString = $cellString + $workString;
// カーソル行を削除する
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
delete; // 選択範囲を削除
down 1; // 次の行に移動する
// カーソル行の内容を取得する
golinetop; // 行頭に移動する
beginsel; // 選択を開始
golineend; // 行末に移動
$workString = gettext(seltopx,seltopy,selendx,selendy); // 選択行の内容を取得する
message $workString;
}
insert "<td>" + $cellString + "</td>";
insertreturn;
down 1;
$cellString = ""; // 表のセルの内容を示す変数をクリアする
#i = #i - 1;
}
if (code != eof)
{
up 1;
golinetop; // 行頭に移動する
insert "</tr>";
insertreturn;
}
#i = #columnCount; // 繰り返し回数(表の列の数)を設定する
}
// 末尾の</tr>タグを挿入する
insert "</tr>";
insertreturn;
// ファイル末尾に </table>タブを挿入する
gofileend;
insertreturn;
insert "</table>";
実行結果
「加工前のテキスト」を開いた状態でマクロを実行します。
<table>
<tr>
<th>メンバー</th>
<th>解説</th>
</tr>
<tr>
<td>CompletionListBox()</td>
<td>CompletionListBoxクラスの新しいインスタンスを初期化します。</td>
</tr>
<tr>
<td>ActualHeight</td>
<td>この要素のレンダリングされた高さを取得します。(FrameworkElementから継承されています)</td>
</tr>
<tr>
<td>ActualWidth</td>
<td>この要素のレンダリングされた幅を取得します。(FrameworkElementから継承されています)</td>
</tr>
</table>