「CSV/TSVでアクティブ列選択」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Yuko (トーク | 投稿記録)
Yuko (トーク | 投稿記録)
67行目: 67行目:
         // 検索パターン
         // 検索パターン
         if (fieldCount == 0) {
         if (fieldCount == 0) {
             pattern = '^([^\\t]*)';
             pattern = '^[^\\t]*';
         } else {
         } else {
             pattern = '(?<=^([^\\t]*\\t){' + fieldCount + '})([^\\t]*")';
             pattern = '(?<=^([^\\t]*\\t){' + fieldCount + '})[^\\t]*';
         }
         }


    }
    // アクティブ列を選択
    var pattern = "";
    if (menuTrack === CSV_ID) {
        // CSVの場合
        if (fieldCount == 0) {
            pattern = '^([^,]*|"[^",]*")';
        } else {
            pattern = '(?<=^([^,]*,|"[^",]*",){' + fieldCount + '})([^,]*|"[^",]*")';
        }
    } else {
        // TSVの場合
        if (fieldCount == 0) {
            pattern = '^([^\\t]*|"[^\\t"]*")';
        } else {
            pattern = '(?<=^([^\\t]*\\t|"[^\\t"]*\\t){' + fieldCount + '})([^\\t]*|"[^\\t"]*")';
        }
     }
     }



2024年12月27日 (金) 09:36時点における版

概要

このマクロは、CSVファイル内でアクティブな列を選択するためのものです。現在のカーソル位置を基準に、対応する列を自動的に全て選択します。

注意事項

  • Mery Ver 3.7.9 で動作確認しています。

使い方

1. MeryでCSVファイルを開く。 2. 選択したい列にカーソルを移動させる。 3. このマクロを実行すると、カーソル位置に対応する列が全て選択される。

ソースコード

#title = "CSV/TSVでアクティブ列選択"

var CSV_ID = 1;
var TSV_ID = 2;

var doc = document;
var sel = doc.selection;

main();

function main() {
    // 現在の列位置を取得
    var actX = sel.GetActivePointX(mePosLogical);
    var actY = sel.GetActivePointY(mePosLogical);
    var line = doc.GetLine(actY);
    var lineArray = line.split("");
    var leftString = lineArray.slice(0, actX - 1).join("");

    // CSVかTSVか判定
    var menu = createContextMenu();
    menuTrack = menu.Track(0);
    // メニュー選択がキャンセルされた場合は終了
    if (menuTrack === 0) return;

    var fieldCount = 0;
    var pattern = "";
    if (menuTrack === CSV_ID) {
        // CSVの場合
        // フィールド数を計上
        // ダブルクォート囲みも考慮する
        var inDoubleQuote = false;
        for (var i = 0; i < leftString.length; i++) {
            if (leftString[i] == '"') {
                inDoubleQuote = !inDoubleQuote;
            }
            if (!inDoubleQuote && leftString[i] == ',') {
                fieldCount++;
            }
        }
        // 検索パターン
        if (fieldCount == 0) {
            pattern = '^([^,]*|"[^",]*")';
        } else {
            pattern = '(?<=^([^,]*,|"[^",]*",){' + fieldCount + '})([^,]*|"[^",]*")';
        }
    } else {
        // TSVの場合
        // フィールド数を計上
        fieldCount = leftString.split("\t").length - 1;
        // 検索パターン
        if (fieldCount == 0) {
            pattern = '^[^\\t]*';
        } else {
            pattern = '(?<=^([^\\t]*\\t){' + fieldCount + '})[^\\t]*';
        }

    }

    sel.Find(pattern, meFindReplaceRegExp + meFindAll + meFindKeepOptions);
}

function createContextMenu() {
    const menu = CreatePopupMenu();
    menu.Add("CSVでアクティブ列選択", CSV_ID);
    menu.Add("TSVでアクティブ列選択", TSV_ID);
    return menu;
}
スポンサーリンク