Macro/投稿/166

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F166


Top > Macro > 投稿 > 166

選択行を反転(リバース)

  • ページ: Macro/投稿
  • 作者:
  • カテゴリー: その他
  • 投稿日: 2007-02-12 (月) 18:43:02

メッセージ

ふぁんくらぶ8からのお題です.

219 :名無しさん@お腹いっぱい。:2007/02/04(日) 12:27:48 ID:2v5d4Hca0

 選択行を逆順に並べ替え(ソートではなくリバース)スクリプトはどこかにありますか

 BBSと検索したけど見つからないです

キーマクロ

  • >>Part8#241
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
    
    // reverse.mac 
    // 選択範囲をリバースするキーマクロ 
    // 
    S_CopyLinesWithLineNumber(0);// 選択範囲内全行行番号付きコピー 
    S_Paste(0);// 貼り付け 
    S_BeginSelect(0);// 範囲選択開始 
    S_SearchNext('^\\s*[0-9]+:', 36);// 行番号開始行を検索 
    S_SortDesc(0);// 選択行の降順ソート 
    S_ReplaceAll('^\\s*[0-9]+:', '', 132);// 行番号を削除 
    S_ReDraw(0);// 再描画 

javascript

  • >>Part8#247
      0
      1
    
    // reverse.js
    Editor.InsText(Editor.GetSelectedString(0).split('\r\n').reverse().join('\r\n'));
    

vbscript

  • >>Part8#247
      0
      1
      2
      3
      4
      5
      6
      7
      8
    
    ' reverse.vbs
    Dim strLines, intLineCount, i
    strLines = Split(Editor.GetSelectedString(0), vbCrLf)
    intLineCount = UBound(strLines)
    ReDim strResult(intLineCount)
    For i = 0 To intLineCount
        strResult(intLineCount - i) = strLines(i)
    Next
    Editor.InsText Join(strResult, vbCrLf)
    

ppa

  • macro:356
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
    
    // TAB=4
    // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
    // マクロファイルの拡張子は .PPA でなくてはなりません。
     
    // 範囲選択されている行を反転・逆順に並べる。
     
    var        // 変数確保
        sel:String;        // 処理対象の文字列(残りの未処理の文字列)格納用
        res:String;        // 処理結果の文字列格納用
        CRLF,CR,LF:String;    // 各種の改行コードを格納しておく
        pt,ptCR,ptLF:Integer;        // 各種改行位置を格納
    begin        // 処理内容
        // CRLF := CRLF改行コード
        CRLF := '
    ';
        CR := Copy  (CRLF,1,1);        // CR := CR改行コード
        LF := Delete(CRLF,1,1);        // LF := LF改行コード
     
        sel := S_GetSelectedString(0);
        if ( sel = '' ) then        Exit;    // 何も選択されていなかったら終了
     
        res := '';    // 処理結果格納用文字列変数初期化
     
        while ( sel <> '' ) do        begin    //{
            ptCR   := Pos( CR , sel );    // 処理対象文字列 sel 内の先頭の CR の位置
            ptLF   := Pos( LF , sel );    // 処理対象文字列 sel 内の先頭の LF の位置
     
            // pt := 処理対象文字列 sel 内の「最も前の改行コード」の後ろ位置(つまり1行目の末尾位置)
            pt := 0;
     
            if ( ptCR > 0 ) then        begin    //{
                // CR があった
                pt := ptCR;    // pt := CR までのバイト数
     
                // CR の次が LF だった(CRLF改行)→ pt := CRLF の後ろまで(値を1加算)
                if ( Copy(sel,ptCR+1,1) = LF ) then    pt := pt + 1;
            end;        //}
     
            if ( ptLF > 0 ) then        begin    //{
                // LF があった
                if ( pt   = 0  ) then        pt := ptLF;    // CR が無かった場合、pt := LF までのバイト数
                if ( ptLF < pt ) then        pt := ptLF;    // CR より前に LF があった場合、pt := LF までのバイト数
            end;        //}
     
            if ( pt = 0 ) then    begin        //{
                // sel 内に改行コードが無かった
     
                // 末尾に「編集中テキストと同じ改行コード」を追加
                case S_GetLineCode() of        //{
                    0:    sel := sel + CRLF;        // CRLF を追加
                    1:    sel := sel + CR;    // CR   を追加
                    2:    sel := sel + LF;    // LF   を追加
                end;        //}
     
                pt := Length(sel);    // 末尾までを一行目とする。
            end;        //}
     
            res := Copy  (sel,1,pt) + res;        // sel の一行目の内容を処理結果文字列 res の前に追加
            sel := Delete(sel,1,pt);        // sel の一行目の内容を削除した文字列が、次回の sel
        end;        //}
     
        S_InsText(res);        // 処理結果を書き出す
        S_ReDraw(0);        // 再描画 - 処理後にカーソル位置が変わる場合用
    end;

perl

  • macro:357
      0
      1
      2
      3
    
    my $sel = GetSelectedString(0);
    my @lines = split(/(?<=\n)/, $sel);
    my $res = join('', reverse(@lines));
    InsText($res);
    


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2007-02-12 (月) 18:43:02 (6254d)