// TAB=4 // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。 // マクロファイルの拡張子は .PPA でなくてはなりません。 // DupLINC.PPA - DuplicateLine_INC // 10進数 連番生成マクロ // ★動作仕様 // ↓次のようなテキストがある場合( | がカーソル位置とします) // -------------------------------------------------- // copy original.txt test|08.txt // -------------------------------------------------- //      ↓このマクロを実行すると、↓ // -------------------------------------------------- // copy original.txt test08.txt // copy original.txt test|09.txt // -------------------------------------------------- // という1行が増えます。そのまま何度もマクロの実行を続けると、 // -------------------------------------------------- // copy original.txt test08.txt // copy original.txt test09.txt // copy original.txt test10.txt // copy original.txt test|11.txt // -------------------------------------------------- // という具合に。。。 // なお、「カーソル位置より右の数値」が + 1 した値の行が増えていきます。 // 「カーソル位置より左の文字」は、たとえ数値であろうと無視して、そのままとなります。 // // つまり、↓にて | の位置にカーソルがある場合は // -------------------------------------------------- // copy original.txt test0|9.txt // -------------------------------------------------- //      ↓マクロを2回実行↓ // -------------------------------------------------- // copy original.txt test09.txt // copy original.txt test010.txt // copy original.txt test0|11.txt // -------------------------------------------------- // となります。 var n:Integer; // 作業用の整数数値変数 確保 nums:String; // カーソル位置の数値文字列を取り込む文字列変数 確保 numi:Integer; // 「↑nums を整数数値に変換した物」を格納する整数数値変数 確保 word,chr:String; // 作業用の文字列変数 確保 begin S_DuplicateLine(0); // 行の二重化(折り返し単位) S_MoveHistSet(0); // 現在位置を移動履歴に登録 // { // カーソルの右側の単語を word に取得する。 S_WordRight_Sel(0); // (選択)単語の右端に移動 word := S_GetSelectedString(0); // 選択文字列を取得する S_CancelMode(0); // 各種モードの取り消し - [Esc]キー - 選択を解除する // } S_MoveHistPrev(0); // 移動履歴: 前へ // word 先頭の数値部分のみを nums に取り出す。<- 数値以外の部分まで StrToInt に投げると返値は強制的に 0 になっちゃうから、余計なゴミを消すわけさぁ。 nums := ''; for n := 1 to Length(word) do begin chr := Copy(word,n,1); if( ( chr = '0' )or( StrToInt(chr) <> 0 ) ) then // word が数値文字('0'〜'9')である nums := nums + chr // nums 末尾に chr を追加する。 else // 数値以外の文字だった場合 break // ループを脱出する。 ; end; if ( nums = '' ) then exit; // 数値文字が無ければマクロ終了。 numi := StrToInt(nums); // nums を 10進数数値文字列とみなし、整数数値へ変換する。 // MessageBox( nums + '->' + IntToStr(numi) , '' , 0 ); // for Debug numi := numi + 1; // increment ここで値を +1 している。ここを numi - 1 にすれば decrement版になるし、色々版できますな。ふぉっふぉっふぉっ。 word := IntToStr(numi); // numi を文字列に変換する。 // ↓書き込む数値文字列の前に、桁の不足分 '0' を追加する。 for n := Length(word) to (Length(nums) - 1) do word := '0' + word; S_MoveHistSet(0); // 現在位置を移動履歴に登録 // { for n := 1 to Length(nums) do S_Right_Sel(0); // (選択)カーソル右移動 - nums の文字数(数値文字数)分、選択 - 数値部分を選択する。 S_InsText(word); // 出来た数値文字列をエディタ画面へ挿入する。(↑の選択範囲が文字変数 word の内容に置き換わる) // } S_MoveHistPrev(0); // 移動履歴: 前へ end;