「可変長を固定長に変換」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
コピーライトの除去(作者が著作権を放棄しているため)、ディレクティブの追加
MSY-07 (トーク | 投稿記録)
スペースからタブに変更
6行目: 6行目:


with (document.selection) {
with (document.selection) {
    // カーソル位置を保存
// カーソル位置を保存
    var x = GetActivePointX(mePosLogical);
var x = GetActivePointX(mePosLogical);
    var y = GetActivePointY(mePosLogical);
var y = GetActivePointY(mePosLogical);
}
}
// 最大長格納配列
// 最大長格納配列
15行目: 15行目:
var a1 = document.Text.split("\n");
var a1 = document.Text.split("\n");
if (a1.length > 0) {
if (a1.length > 0) {
    // 最大長を取得
// 最大長を取得
    for (var i = 0; i < a1.length; i++) {
for (var i = 0; i < a1.length; i++) {
        // カンマで配列に分割
// カンマで配列に分割
        var a2 = a1[i].split(",");
var a2 = a1[i].split(",");
        for (var j = 0; j < a2.length; j++) {
for (var j = 0; j < a2.length; j++) {
            var l = getByteCount(a2[j]);
var l = getByteCount(a2[j]);
            if (i == 0 || a[j] < l) {
if (i == 0 || a[j] < l) {
                a[j] = l;
a[j] = l;
            }
}
        }
}
    }
}
    // 最大長を設定
// 最大長を設定
    for (var i = 0; i < a1.length; i++) {
for (var i = 0; i < a1.length; i++) {
        // カンマで配列に分割
// カンマで配列に分割
        var a2 = a1[i].split(",");
var a2 = a1[i].split(",");
        for (var j = 0; j < a2.length; j++) {
for (var j = 0; j < a2.length; j++) {
            a2[j] = a2[j] + (new Array(a[j] - getByteCount(a2[j]) + 1).join(" "));
a2[j] = a2[j] + (new Array(a[j] - getByteCount(a2[j]) + 1).join(" "));
        }
}
        // カンマ区切りで結合
// カンマ区切りで結合
        a1[i] = a2.join(",");
a1[i] = a2.join(",");
    }
}
    // 改行コード区切りで結合
// 改行コード区切りで結合
    document.Text = a1.join("\n");
document.Text = a1.join("\n");
    // カーソル位置を復元
// カーソル位置を復元
    document.selection.SetActivePoint(mePosLogical, x, y, false);
document.selection.SetActivePoint(mePosLogical, x, y, false);
}
}


// バイト数取得
// バイト数取得
function getByteCount(arg1) {
function getByteCount(arg1) {
    var temp = 0;
var temp = 0;
    var length = arg1.length;
var length = arg1.length;
    for (var i = 0; i < length; i++) {
for (var i = 0; i < length; i++) {
        var c = arg1.charCodeAt(i);
var c = arg1.charCodeAt(i);
        if ((c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
if ((c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
            temp += 1;
temp += 1;
        } else {
} else {
            temp += 2;
temp += 2;
        }
}
    }
}
    return temp;
return temp;
}
}
</syntaxhighlight>
</syntaxhighlight>

2024年12月29日 (日) 05:45時点における版

可変長の CSV の各項目を半角スペースで埋めて固定長にします。

#title = "可変長を固定長に変換"
#tooltip = "可変長のCSVの各項目を半角スペースで埋めて固定長にします。"

with (document.selection) {
	// カーソル位置を保存
	var x = GetActivePointX(mePosLogical);
	var y = GetActivePointY(mePosLogical);
}
// 最大長格納配列
var a = new Array();
// 改行コードで配列に分割
var a1 = document.Text.split("\n");
if (a1.length > 0) {
	// 最大長を取得
	for (var i = 0; i < a1.length; i++) {
		// カンマで配列に分割
		var a2 = a1[i].split(",");
		for (var j = 0; j < a2.length; j++) {
			var l = getByteCount(a2[j]);
			if (i == 0 || a[j] < l) {
				a[j] = l;
			}
		}
	}
	// 最大長を設定
	for (var i = 0; i < a1.length; i++) {
		// カンマで配列に分割
		var a2 = a1[i].split(",");
		for (var j = 0; j < a2.length; j++) {
			a2[j] = a2[j] + (new Array(a[j] - getByteCount(a2[j]) + 1).join(" "));
		}
		// カンマ区切りで結合
		a1[i] = a2.join(",");
	}
	// 改行コード区切りで結合
	document.Text = a1.join("\n");
	// カーソル位置を復元
	document.selection.SetActivePoint(mePosLogical, x, y, false);
}

// バイト数取得
function getByteCount(arg1) {
	var temp = 0;
	var length = arg1.length;
	for (var i = 0; i < length; i++) {
		var c = arg1.charCodeAt(i);
		if ((c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
			temp += 1;
		} else {
			temp += 2;
		}
	}
	return temp;
}
スポンサーリンク