Macro/投稿/127

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


Top > Macro > 投稿 > 127

任意の文字変換

  • ページ: Macro/投稿
  • 作者: すい?
  • カテゴリー: ppa
  • 投稿日: 2002-12-12 (木) 22:46:05

メッセージ

このマクロは変換機能のサンプルマクロです。そのままでは実用性がありません。

fileHENKAN2.PPA
  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
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
// TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておく事。
// マクロファイルの拡張子は .PPA でなくてはなりません。
 
// 次の変換をおこなう。
// '@''@'
// '!''!'
// '$''$'
// だけ(笑)。サンプルだから...ね。
// 必要な人は自分で増やして下さい。
 
// 変換方法は、
// 1.1行の内容を文字変数 str に取り込む。
// 2.PPA 上にて文字変数 str の変換を行う。
// 3.変換後の文字列変数 str を書き出す。(str の内容が変更された場合のみ)
// この処理をファイル先頭から末尾まで1行ずつループで処理していく。
 
// ※ ちゅうい ※
// S_GetSelectedString() を使っているのですが、取り込める文字列の長さに限界があるかも...
// つまり1行あたりの文字数に限界がある*かも*。
 
var        // 変数を確保する場所
    str:String;        // 文字変数を用意
    bef,aft:String;    // 文字変数を用意
    change:Integer;    // 整数数値変数を用意
    outf:Integer;    // 整数数値変数を用意
    pt:Integer;        // 整数数値変数を用意
begin    // ここより処理内容の記述
 
    // ↓途中に空行があると、そこで処理が中断してしまう。その対策。
    S_ReplaceAll('[\r\n]+', '!$&', 20);    // ファイル全体に対し、行末に文字 ! を付加する。
    S_MoveHistPrev(0);    // 移動履歴: 前へ - 置換開始位置へ戻る
 
    // ↓ EOF の前に文字がある場合のための対策 - 前処理
    S_GoFileEnd(0);        // ファイルの最後に移動
    S_Char(13);            // 文字入力             - (13 = 改行)
    S_DeleteLine(0);    // 行削除(折り返し単位) - オートインデント対策 - 改行した結果、タブ・スペース類が出た場合、それらを削除。
    S_MoveHistPrev(0);    // 移動履歴: 前へ - S_GoFileEnd を実行する前の位置へ戻る
 
    S_GoFileTop(0);        // ファイルの先頭に移動 - *1
 
    repeat    // 1行ごとに処理をするためのループ。
        // 1行の内容を取り込む。
        S_GoLineTop(1);        // 行頭に移動(折り返し単位)
        S_GoLineEnd_Sel(0);    // (選択)行末に移動(折り返し単位)
        str := S_GetSelectedString(0);
        if( str = '' )    then    break;    // 文字列が空ならファイル終端とみなす。
 
        outf := 0;    // フラグ = 「この行を書き直す必要無し」にしておく
 
        // -------------------------------------------------- //
        repeat    // '@''@' 変換
            bef := '@';    aft := '@';
            change := 0;    // フラグ = 「変化無し」にしておく
            pt := pos(bef,str);    // bef の場所を探す。
            if ( pt <> 0 ) then    begin
                change := 1;    // フラグ = 「変化あり」
                outf   := 1;    // フラグ = 「この行を書き直す必要あり」にしておく
                str := Copy(str,1,pt-1) + aft + Delete(str,1,pt+Length(bef)-1 );    // 変換後の文字列を生成する。
            end;
        until    (change = 0);    // 見つからなかったらループ終了。
        // -------------------------------------------------- //
        repeat    // '!''!' 変換
            bef := '!';    aft := '!';
            change := 0;    // フラグ = 「変化無し」にしておく
            pt := pos(bef,str);    // bef の場所を探す。
            if ( pt <> 0 ) then    begin
                change := 1;    // フラグ = 「変化あり」
                outf   := 1;    // フラグ = 「この行を書き直す必要あり」にしておく
                str := Copy(str,1,pt-1) + aft + Delete(str,1,pt+Length(bef)-1 );    // 変換後の文字列を生成する。
            end;
        until    (change = 0);    // 見つからなかったらループ終了。
        // -------------------------------------------------- //
        repeat    // '$''$' 変換
            bef := '$';    aft := '$';
            change := 0;    // フラグ = 「変化無し」にしておく
            pt := pos(bef,str);    // bef の場所を探す。
            if ( pt <> 0 ) then    begin
                change := 1;    // フラグ = 「変化あり」
                outf   := 1;    // フラグ = 「この行を書き直す必要あり」にしておく
                str := Copy(str,1,pt-1) + aft + Delete(str,1,pt+Length(bef)-1 );    // 変換後の文字列を生成する。
            end;
        until    (change = 0);    // 見つからなかったらループ終了。
        // -------------------------------------------------- //
 
        if( outf <> 0 ) then    S_InsText(str);        // 変更後の文字列を書き出す。
        S_Down(0);            // カーソル下移動
    until    (False);    // 無限ループ
 
    S_MoveHistPrev(0);    // 移動履歴: 前へ - S_GoFileTop - *1 実行前の位置へ戻る
 
    // ↓ EOF の前に文字がある場合のための対策 - 後処理
    S_GoFileEnd(0);        // ファイルの最後に移動
    S_DeleteLine(0);    // 行削除(折り返し単位) - [EOF]前に付いた行番号を削除
    S_DeleteBack(0);    // カーソル前を削除     - 最初に追加した改行を削除
    S_MoveHistPrev(0);    // 移動履歴: 前へ - S_GoFileEnd を実行する前の位置へ戻る
 
    S_ReplaceAll('!([\r\n]+)', '$1', 20);    // ファイル全体に対し、行末の文字 ! を削除する。
    S_SearchClearMark(0);        // 検索マークの切替え
    S_MoveHistPrev(0);            // 移動履歴: 前へ - 置換開始前の位置へ戻る
 
    S_CurLineCenter(0);    // カーソル行をウィンドウ中央へ
    S_ReDraw(0);        // 再描画
end;
 


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

添付ファイル: fileHENKAN2.PPA 309件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2006-07-30 (日) 04:04:29 (4463d)