Macro/投稿/166
をテンプレートにして作成
Land.to
[
ホーム
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 選択行を反転(リバース) [#e3799198]
-ページ: [[Macro/投稿]]
-作者:
-カテゴリー: その他
-投稿日: 2007-02-12 (月) 18:43:02
** メッセージ [#edc6a4ec]
ふぁんくらぶ8からのお題です.
>219 :''名無しさん@お腹いっぱい。'':2007/02/04(日) 12:...
> 選択行を逆順に並べ替え(ソートではなくリバース)スクリプ...
> BBSと検索したけど見つからないです
*** キーマクロ [#cd6d26fb]
->>Part8#241
#code{{
// 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 [#x0160817]
->>Part8#247
#code(javascript){{
// reverse.js
Editor.InsText(Editor.GetSelectedString(0).split('\r\n')....
}}
*** vbscript [#x7e27ee1]
->>Part8#247
#code(VBScript){{
' 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 [#gd5079f0]
-[[macro:356]]
#code{{
// TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダ...
// マクロファイルの拡張子は .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 ); // 処理対象文字列 s...
ptLF := Pos( LF , sel ); // 処理対象文字列 s...
// pt := 処理対象文字列 sel 内の「最も前の改行コ...
pt := 0;
if ( ptCR > 0 ) then begin //{
// CR があった
pt := ptCR; // pt := CR までのバイト数
// CR の次が LF だった(CRLF改行)→ pt := CRLF ...
if ( Copy(sel,ptCR+1,1) = LF ) then pt := ...
end; //}
if ( ptLF > 0 ) then begin //{
// LF があった
if ( pt = 0 ) then pt := ptLF; /...
if ( ptLF < pt ) then pt := ptLF; /...
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 の一...
sel := Delete(sel,1,pt); // sel の一行目の...
end; //}
S_InsText(res); // 処理結果を書き出す
S_ReDraw(0); // 再描画 - 処理後にカーソル位置...
end;
}}
*** perl [#he5fa71d]
-[[macro:357]]
#code(Perl){{
my $sel = GetSelectedString(0);
my @lines = split(/(?<=\n)/, $sel);
my $res = join('', reverse(@lines));
InsText($res);
}}
----
#comment
終了行:
* 選択行を反転(リバース) [#e3799198]
-ページ: [[Macro/投稿]]
-作者:
-カテゴリー: その他
-投稿日: 2007-02-12 (月) 18:43:02
** メッセージ [#edc6a4ec]
ふぁんくらぶ8からのお題です.
>219 :''名無しさん@お腹いっぱい。'':2007/02/04(日) 12:...
> 選択行を逆順に並べ替え(ソートではなくリバース)スクリプ...
> BBSと検索したけど見つからないです
*** キーマクロ [#cd6d26fb]
->>Part8#241
#code{{
// 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 [#x0160817]
->>Part8#247
#code(javascript){{
// reverse.js
Editor.InsText(Editor.GetSelectedString(0).split('\r\n')....
}}
*** vbscript [#x7e27ee1]
->>Part8#247
#code(VBScript){{
' 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 [#gd5079f0]
-[[macro:356]]
#code{{
// TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダ...
// マクロファイルの拡張子は .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 ); // 処理対象文字列 s...
ptLF := Pos( LF , sel ); // 処理対象文字列 s...
// pt := 処理対象文字列 sel 内の「最も前の改行コ...
pt := 0;
if ( ptCR > 0 ) then begin //{
// CR があった
pt := ptCR; // pt := CR までのバイト数
// CR の次が LF だった(CRLF改行)→ pt := CRLF ...
if ( Copy(sel,ptCR+1,1) = LF ) then pt := ...
end; //}
if ( ptLF > 0 ) then begin //{
// LF があった
if ( pt = 0 ) then pt := ptLF; /...
if ( ptLF < pt ) then pt := ptLF; /...
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 の一...
sel := Delete(sel,1,pt); // sel の一行目の...
end; //}
S_InsText(res); // 処理結果を書き出す
S_ReDraw(0); // 再描画 - 処理後にカーソル位置...
end;
}}
*** perl [#he5fa71d]
-[[macro:357]]
#code(Perl){{
my $sel = GetSelectedString(0);
my @lines = split(/(?<=\n)/, $sel);
my $res = join('', reverse(@lines));
InsText($res);
}}
----
#comment
ページ名: