◀一般トップへ
  • 2503 自動連番マクロについて
    • 2506 Re: 自動連番マクロについて
      • 2507 Re2: 自動連番マクロについて
        • 2510 Re3: 自動連番マクロについて
    • 2511 ウホ ウホ
      • 2512 RE: ウホ ウホ
        • 2513 Re2: ウホ ウホ
          • 2524 Re3: ウホ ウホ
      • 2517 Re:ウホ ウホ
        • 2522 Re2:ウホ ウホ
      • 2518 もう1つ…
        • 2523 RE: もう1つ…
  • [2503] 自動連番マクロについて もんもん 2002年11月14日 15:59

    いつも使用させております。
    仕事でCOBOL開発をしておるのですがホストでの開発が嫌いで
    サクラエディタを使用して開発しております。
    が、作成したプログラムをアップロードする前に

    000100 IDENTIFICATION DIVISION.
    000200 PROGRAM-ID. XXXXX.
    000300 DATE-COMPILED. XX/XX/XX.

    ↑↑↑の部分の6桁ナンバー振り直しをしなくてはならず
    一度現ナンバーを矩形選択し、Excelに貼り付けナンバーを振り直して矩形貼り付け。
    といった手順でやっておるのですがマクロでサクッと出来ないかと思いご相談させて頂きました。
    既にこういったマクロをお持ちの方マクロを譲っては頂けないでしょうか。
    またはこうすればマクロが出来るよ!とアドバイス頂けても幸いです。
    図々しいお願いで申し訳ありませんが宜しくお願いしますm(__)m
    • [2506] Re: 自動連番マクロについて げんた 2002年11月14日 23:44

      以前話題に出たスペルチェックと同様に,外部プログラムで処理するという案ではだめでしょうか.Perl等を使えば番号の振り直しは簡単にできると思います.
      編集中のファイルをロックしないようにしておく
      →ファイルを書き換える外部プログラムを作って置いて実行
      →エディタに戻ると再読込するか聞いてくる

      編集中のデータを外部プログラムに渡せれば使い勝手が向上しますが...
      • [2507] Re2: 自動連番マクロについて もんもん 2002年11月15日 09:52

        げんた様

        返信ありがとうございます。
        スペルチェックのスレッド参照させて頂きました。
        あちらは既存のEXEファイルを外部コマンド実行ですよね。
        今回の私のケースは、何らかの言語でプログラミングをしそれを実行形式にしコールする形になるのでしょうか?
        Perl…、初めて聞きました。
        勉強してプログラミングしたとしてもEXEの仕方が分かりません(T^T)
        断念する方向で検討中(^-^;
        • [2510] Re3: 自動連番マクロについて すい 2002年11月15日 19:12

          ここの過去の げんたさん の書き込み「2072 外部コマンドを使った文字列加工」
          なんかが、ほぼそのまんまって気がしますが。
          # 「行番号の書き換え」じゃなくて「行番号の追加」ですが。

          perl や awk 等は、テキストの処理をするためのインタープリターです。
          # perl はテキスト処理の他にも色々(というより、いかなる処理でも)可能になっていますが。

          MS-DOSプロンプト(コマンド プロンプト)で
          awk スクリプトファイル < 処理前のファイル > 処理結果を書き込むファイル
          とか
          perl スクリプトファイル < 処理前のファイル > 処理結果を書き込むファイル
          とかで、スクリプトファイル(C言語ライクなマクロみたいな物)に記述された処理をガーっとやってくれます。
          # 他の実行方法(ファイルの渡し方)もありますけど。

          テキストに関する処理って awk や perl なんかが使えないと かなり不自由すると思いますけど。。。
          # もっと楽に出来る方法があるけど、それを知らないから面倒な事をやっているという感じ...
          # 「目的の事さえ出来れば面倒だろうが OK」っていう割り切り方ももちろんありですが。
    • [2511] ウホ ウホ すい 2002年11月15日 19:12

      // TAB=4
      // 実行には PPA.DLL が必須です。
      // マクロファイルの拡張子は .PPA でなくてはなりません。

      // ファイル全体に対して、各行頭の行番号を振り直す。
      // 行番号と その後ろの文字列との間に、何らかの空白(タブ/スペース)が必要です。
      // (↑行頭にて [Ctrl]+[W] で選択される物が古い行番号として消えてしまうわけなのよ。(はぁと) )

      // COBOL で使いたいらしい。

      var
      num,step,digit:Integer; // 行番号を取り扱う整数数値変数
      n:Integer; // 作業用の整数数値変数
      word:String; // 作業用の文字列変数
      begin
      num := 100; // 先頭行の行番号を指定せよ
      step := 100; // 行番号の増分値を指定せよ
      digit:= 6; // 行番号の表示桁数を指定せよ

      S_GoFileTop(0); // ファイルの先頭に移動

      while (True) do // 無限ループだじょ
      begin
      S_SelectWord(0); // 現在位置の単語選択
      word := S_GetSelectedString(0); // 選択文字列を取得する
      // MessageBox(word,'debug',0); // for Debug

      if word = '' then // 文字列が空なので、ファイル末尾に達した(と思われる)
      begin
      S_GoFileTop(0); // ファイルの先頭に移動
      exit; // マクロ終了!!
      end;

      word := IntToStr(num); // 行番号を文字列に変換する。

      // ↓行番号文字列の前に、桁の不足分 '0' を追加する。
      for n := Length(word) to (digit - 1) do word := '0' + word;

      S_InsText( word ); // 行番号文字列をエディタに出力する。

      num := num + step; // 行番号 += setp
      S_GoLineTop(1); // 行頭に移動(行頭のスペースを無視する)
      S_Down(0); // カーソル下移動
      end;

      end;
      • [2512] RE: ウホ ウホ すい 2002年11月15日 19:23

        ----------
        > digit:= 6; // 行番号の表示桁数を指定せよ
        >
        > S_GoFileTop(0); // ファイルの先頭に移動
        ----------
          ↓
        ----------
        digit:= 6; // 行番号の表示桁数を指定せよ

        ⇒ S_MoveHistSet(0); // 現在位置を移動履歴に登録
        S_GoFileTop(0); // ファイルの先頭に移動
        ----------


        ----------
        > begin
        > S_GoFileTop(0); // ファイルの先頭に移動
        > exit; // マクロ終了!!
        > end;
        ----------
          ↓
        ----------
        begin
        ⇒ S_MoveHistPrev(0); // 移動履歴: 前へ
        exit; // マクロ終了!!
        end;
        ----------

        にした方が良いかも。
        • [2513] Re2: ウホ ウホ げんた 2002年11月16日 00:13

          神光臨 キター!
          いつもいつもありがとうございます.不完全で限られた世界だからやる気が出るのかな?

          ところでマクロ用に掲示板作ってみたんですが,あんまり役に立ちませんかね~.
          今後もマクロの話題をここで続行した方がいいですか?
          • [2524] Re3: ウホ ウホ すい 2002年11月19日 20:12

            >不完全で限られた世界だからやる気が出るのかな?

                 ギクッ

            元々バレバレな気がしますが、そのとおりです..._(_"_)_
            出来ない事,制限 があればこそ、そこを工夫して色々やってみる、それこそがコンピュータを使う最大の楽しみ。
            制限無く何でも出来るとか、動作が安定していて不具合が出ないなんて事になると退屈至極つまらない。

            >ところでマクロ用に掲示板作ってみたんですが,あんまり役に立ちませんかね~.
            >今後もマクロの話題をここで続行した方がいいですか?
            私はどちらでも。
            # 板できたんですか?INCM で掲示板見ていると掲示板の変化に気付けないっすね。

            それよりマクロ専用の投稿ディレクトリが欲しひかも。。egroups
            そこにマクロを集中してサンプルとして放り込んでいけば。
            「いちいち作り方を人に聞くよりもサンプル見ながら自分で組む方が性にあっている」
            という方もおられるかと思いますし。
            「マクロでこんな事も出来るんだ」と新発見してマクロやる気出す人が発生するかもしれないし。

            # 私は本格的に手を出せるのは12月以降(1月かも)ですが。
      • [2517] Re:ウホ ウホ もんもん 2002年11月16日 09:01

        うお!!
        もしかしてわざわざコーディングして頂けたんですか!?
        ppaにして実行してみたところ動きました!
        感動です。
        有り難う御座います(T^T)

        ただ、1点だけ改良したい所があるのでまたまたご相談に乗って下さいm(__)m
        最終行に改行が無いと当然無限ループに陥ってしまいます。
        EOFを見て終了させる事は出来ないのでしょうか?
        if word = '' or EOF みたいな(^-^;
        • [2522] Re2:ウホ ウホ すい 2002年11月19日 20:10

          >最終行に改行が無いと当然無限ループに陥ってしまいます。

          Oh!! sorry. it's Mi・O・To・Shi ね。
          う~ん、すんばらしいくらいに無限ループですね。感心感心。いや、すんげーわ。ってどうやって終わらせれば良いんだコレ?[Ctrl]+[Alt]+[Delete] から強制終了すか?
          事前にディスクに保存してなかったら目も当てられないっすね。ゴメソナサイ。

          >EOFを見て終了させる事は出来ないのでしょうか?
          >if word = '' or EOF みたいな(^-^;

          できません。ので、そこを工夫して作るのよ、と。(*^-^*)
          改良版↓
          http://www.egroups.co.jp/files/sakura-editor/Junk/
          → LN.CAB
          # ここに書き込めそうなサイズではなくなったので。
      • [2518] もう1つ… もんもん 2002年11月16日 09:20

        S_SelectWord(0)ってマウスで文字をWクリックした時の
        範囲が対象になるのですね。
        たとえば

        000800 IF A = B THEN
        000900 MOVE A TO D
        なんてのを

        000800 IF A = B AND
        B = C THEN
        000900 MOVE A TO D
        と編集してマクロを実行しますと、

        000800 IF A = B AND
        000900B = C THEN
        001000 MOVE A TO D
        こういった結果になってしまいます。
        追加した行の頭から全てのスペースを行番に変えずに
        6文字分のみを範囲選択して貼り付けるなんて事は無理なのでしょうか。
        お願いばかりで申し訳ありませんが宜しくお願いしますm(__)m
        • [2523] RE: もう1つ… すい 2002年11月19日 20:12

          >たとえば
          >
          >000800 IF A = B THEN
          >000900 MOVE A TO D
          >なんてのを
          >
          >000800 IF A = B AND
          > B = C THEN
          >000900 MOVE A TO D
          >と編集してマクロを実行しますと、

          提案その1
          タイプ別設定 - スクリーン タブにて、「その他のインデント対象文字」に対して
          半角数字文字「0123456789」を追加してみては?
          これで「IF A = B THEN」の行で普通に改行すると
          000800 IF A = B THEN
          000800
          000900 MOVE A TO D
          になりますよ。楽じゃあない?


          提案その2
          私が もんもんさん の立場になったら、行番号削除マクロと行番号付加マクロを作って、

          1.エディタで編集時は、初めに行頭の行番号を全て削除してしまう。

          2.行番号なしのソースをいじりたおす。

          3.編集終了したら行番号を付加してから動作させてみる。

          と作業すると思います。行番号が付いた状態のままで編集するなんてやりにくそ。私なら嫌。

          >追加した行の頭から全てのスペースを行番に変えずに
          >6文字分のみを範囲選択して貼り付けるなんて事は無理なのでしょうか。
          出来ますけど、ますます実行速度が遅くなります。