TAB を置換

TAB を置換する。

SourceToHtml004.js


// 入力ファイル名
var inFileName = "Z:\\TEST.txt";

// 出力ファイル名
var outFileName = "Z:\\TEST.html";

// 雛形ファイル名
var tempFileName = "Z:\\TEST.temp";

// 変換対象文字
var escapeChar = "<>&()|";

// FileSystemObject を 生成
var fs = WScript.CreateObject("Scripting.FileSystemObject");

// 雛形ファイルを 読み込み専用モードで 開く
var tsTemp = fs.OpenTextFile(tempFileName, 1);

// 出力ファイルを 新規作成モードで 開く
var tsOut = fs.OpenTextFile(outFileName, 2, -1);

// 雛形ファイルの終わりまで繰り返す
while (!tsTemp.AtEndOfStream)
{
// 雛形ファイルを 1行ずつ読む
var line = tsTemp.ReadLine();

// 入力ファイル名 を 出力
if (line.indexOf("%入力ファイル名%") >= 0)
{
tsOut.WriteLine(line.replace("%入力ファイル名%", fs.GetFileName(inFileName)));
}
// 行番号 を 出力
else if (line == "%行番号%")
{
// 入力ファイルを 読み込み専用モードで 開く
var tsIn = fs.OpenTextFile(inFileName, 1);

// 行番号を初期化
var lineNo = 0;

// 入力ファイルの終わりまで繰り返す
while (!tsIn.AtEndOfStream)
{
// 入力ファイルを1行ずつ読む
tsIn.ReadLine();

// 行番号を書く
tsOut.WriteLine(FormatNum(++lineNo));
}

// 入力ファイルを 閉じる
tsIn.Close();
}
// プログラムソース を 出力
else if (line == "%プログラムソース%")
{
// 入力ファイルを 読み込み専用モードで 開く
var tsIn = fs.OpenTextFile(inFileName, 1);

// 入力ファイルの終わりまで繰り返す
while (!tsIn.AtEndOfStream)
{
// 入力ファイルを 1行ずつ読む
var lineIn = tsIn.ReadLine();

// 変換出力用文字列
var lineOut = "";

// 現在位置
var pos = 0;

// 1文字ずつ処理する
for (i=0;i<lineIn.length;i++)
{
// 1文字取り出す
var c = lineIn.substr(i, 1);

// "<", ">", "&", "(", ")", "|" のいずれかか?
if (escapeChar.indexOf(c) >= 0)
{
// 変換して出力
lineOut += escape(c).replace("%", "&#x") + ";";
// 現在位置を加算
pos++;
}
// TAB か?
else if (c == "\t")
{
// 空白何文字分に置き換えればよいか
var num = 4 - (pos % 4);
// 変換して出力
lineOut += " ".substr(0, num);
// 現在位置を加算
pos += num;
}
else
{
// そのまま出力
lineOut += c;
// 現在位置を加算
if (escape(c).length < 4)
pos++;
else
pos += 2;
}
}

// 変換した文字列を書く
tsOut.WriteLine(lineOut);
}

// 入力ファイルを 閉じる
tsIn.Close();
}
else
{
// 雛形ファイルを 1行ずつ書く
tsOut.WriteLine(line);
}
}

// 出力ファイルを 閉じる
tsOut.Close();


// 雛形ファイルを 閉じる
tsTemp.Close();

// 数値の書式化 (例: 123 → "00123")
function FormatNum(num)
{
var s = "00000" + num;

return (s.substr(s.length - 5, 5));
}