◀マクロトップへ
  • 227 固定タブ位置移動 PerlScript
    • 228 Re:固定タブ位置移動 PerlScript
  • [227] 固定タブ位置移動 PerlScript りーや 2005年11月20日 23:29

    # 固定タブ位置で後方移動 NextTab.pls
    @TabPos = (7, 8, 12, 40, 73); # Tab位置を昇順に指定
    MoveHistSet(); # 現在位置を移動履歴に登録
    $CurCol = 0 + ExpandParameter('$x'); # 現在の桁位置(col)
    GoLineEnd(); # 行末に移動(折り返し単位)
    $EndCol = 0 + ExpandParameter('$x'); # 現在の桁位置(col)
    MoveHistPrev(); # 移動履歴:前へ
    @WkList = grep {$_ > $CurCol} @TabPos;
    $NextPos = shift @WkList;
    if($NextPos){
    if($NextPos >= $EndCol) {
    GoLineEnd(); # 行末に移動(折り返し単位)
    if($NextPos > $EndCol) {
    $blanks = sprintf('%' . ($NextPos - $EndCol) . 's', ' ');
    InsText($blanks); # テキストを貼り付け
    }
    } else {
    for($i=0; ($i + $CurCol) < $NextPos; $i++) {
    Right(); # カーソル右移動
    }
    }
    } else {
    GoLineEnd(); # 行末に移動(折り返し単位)
    Right(); # カーソル右移動
    }
    #...............................................................................
    #...............................................................................


    # 固定タブ位置で前方移動 PrevTab.pls
    @TabPos = (7, 8, 12, 40, 73); # Tab位置を昇順に指定
    $CurCol = 0 + ExpandParameter('$x'); # 現在の桁位置(col)
    @WkList = grep {$_ < $CurCol} @TabPos;
    $NextPos = pop @WkList;
    if($NextPos){
    for($i=0; ($CurCol - $i) > $NextPos; $i++) {
    Left(); # カーソル左移動
    }
    } else {
    GoLineTop(0); # 行頭に移動(折り返し単位)
    Left(); # カーソル左移動
    }
    #...............................................................................
    • [228] Re:固定タブ位置移動 PerlScript りーや 2005年11月20日 23:31

      ユーザ(一般)会議室の方で COBOL の話題が出てたので
      遊びで米国から Free Fujitsu COBOL をダウン。

      もうちょっと使い易くしたくて作ったのが上です。
      COBOLのコードや固定位置のデータ入力に役立つかと・・

      ついでが、以下です。
      先頭行のナンバーに基づいてナンバリングし直します。

      # リナンバリング ReNumber.pls
      MoveHistSet(); # 現在位置を移動履歴に登録
      $LineMax = GetLineCount(0); # 全論理行数の取得
      GoFileTop(); # ファイルの先頭に移動
      $Line = ExpandParameter('$y') + 0;
      $Num = ExpandParameter('$C'); # カーソル位置の単語
      $Len = length($Num);
      exit 0 if($Num !~ /\d+/);

      $Num =~ /0*$/;
      $Inc = ("1" . $&) * 1;
      for($i=2; $i <= $LineMax; $i++){
      Jump($i,1); # 指定行へジャンプ(論理行)
      $Num += $Inc;
      $outputText = sprintf('%0' . $Len . 'd', $Num);
      for($j=0; $j < $Len; $j++){
      Right_Sel(); # (選択)カーソル右移動;
      }
      InsText($outputText); # テキストを貼り付け
      }
      Jump($Line,0); # 元のカーソル行へジャンプ(物理行)
      #...............................................................................