1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

サクラエディタでマクロを使う

Posted at

1. はじめに

  • サクラエディタで簡単にマクロを記録して実行したい
  • 簡易作業をマクロを使ってまとめて実施したい

2. 開発環境

  • サクラエディタ32bit Ver. 2.4.2.6048
  • Windows 11

3. マクロの記録・実行

3.1. マクロを記録する

  • 記録開始: Ctrl + Shift + M
  • 記録終了: Ctrl + Shift + M
    image.png

3.1. マクロを実行する

  • マクロ実行: Ctrl + Shift + L
    image.png

4. よく使うマクロ

4.1. 重複行を削除する

4.1.1. ソースコード

deleteDuplication.mac
//キーボードマクロのファイル
S_SelectAll(0);
S_SortAsc(0);
S_Merge(0);

4.1.2. 実行結果

image.png

4.2. 重複行を抽出する

4.2.1. ソースコード

selectDupulication.js
// CheckRepeat.js
main();

function main(){
    var sLine1;        // 選択範囲ループの1行前を格納
    var sLine2;        // 選択範囲ループの現在行を格納
    var iCnt1 = 0;    // 選択範囲ループの行開始位置
    var iCnt2 = 0;    // 選択範囲ループの行終了位置
    var iRet = 0;    // 重複行数カウント

    // メッセージ表示用
    var WSHShell = new ActiveXObject("WScript.Shell");

    // 全選択する(Ctrl+A)
    SelectAll(0);

    // 選択範囲をバッファに格納
    var sAll = GetSelectedString(0);
    sAll = sAll.replace(/\r\n/g, '\n');
    sAll = sAll.replace(/\r/g, '\n');

    iStartRowLayout = GetSelectLineFrom();
    iEndRowLayout = GetSelectLineTo();
    bBoxSelect = (IsTextSelected() == 2);
    
    CancelMode();

    // 矩形選択時の動作範囲確認
    if (bBoxSelect){
        Jump(iStartRowLayout, 0);
        iStartRowLogical = ExpandParameter('$y');
        Jump(iEndRowLayout, 0);
        iEndRowLogical = ExpandParameter('$y');

        if ((iEndRowLayout-iStartRowLayout) != (iEndRowLogical-iStartRowLogical)){
            WSHShell.Popup("折り返し行を含む矩形選択範囲は,重複確認できません."
                            , 0, "重複確認", 64);
            return false;
        }
    }
    
    // 選択範囲の先頭に移動
    Jump(iStartRowLayout, 0);
    BookmarkReset();

    // 選択範囲のバッファを改行単位でループ
    TraceOut('■"$F"', 1);
    SearchNext('$', 0x14);
    iCnt2 = sAll.indexOf('\n', iCnt1);
    while (iCnt2 != -1) {
        sLine2 = sAll.substring(iCnt1, iCnt2);
        if (sLine1 == sLine2) {    // 前行と同じだった
            iRet++;
            sRowFm = "      ".substr(0, 6 - ExpandParameter("$y").length)
                                            + ExpandParameter("$y");
            TraceOut("・(" + sRowFm + ",1    ): " + GetLineStr(0), 2);
            BookmarkSet();
        }
        sLine1 = sLine2;
        iCnt1 = iCnt2 + 1;
        iCnt2 = sAll.indexOf('\n', iCnt1);
        SearchNext('$', 0x14);    // 改行単位で移動(指定行Jumpより速いので)
    }

    SearchClearMark();
    CancelMode();
    Jump(iStartRowLayout, 0);

    WSHShell.Popup("重複は " + iRet + " 行でした.", 0, "重複削除", 64);

}

4.2.2. 実行結果

image.png

  • ※単純に連続する行の重複を抽出するため、必要に応じて事前にソート処理を実行しておく必要がある

5. 参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?