◀マクロトップへ
  • 282 選択範囲を並べ替え
    • 283 Re:選択範囲を並べ替え
      • 284 Re2:選択範囲を並べ替え
        • 285 Re3:選択範囲を並べ替え
          • 286 Re4:選択範囲を並べ替え
            • 287 Re5:選択範囲を並べ替え
  • [282] 選択範囲を並べ替え giraffe 2006年06月27日 01:04

    テキストファイルの選択範囲を指定の順序でソートしたいのですが
    <選択行の昇順ソート>では、目的が達成できません。
    以下のようなファイルを編集しています。
    ----
    ELBO */JIS.B.2220:90L_10 10 .....
    ELBO */JIS.B.2220:90L_100 100 ....
    ELBO */JIS.B.2220:90L_200 200 ....
    ELBO */JIS.B.2220:90L_20 20 .....
    ELBO */JIS.B.2220:90L_25 25 .....

    <選択行の昇順ソート>を行うと
    ELBO */JIS.B.2220:90L_10 10 .....
    ELBO */JIS.B.2220:90L_100 100 .....
    ELBO */JIS.B.2220:90L_20 20 .....
    ELBO */JIS.B.2220:90L_200 200 .....
    ELBO */JIS.B.2220:90L_25 25 .....

    あたりまえなのですが、此れを以下のようにソートしたいのですが
    可能でしょうか?

    ELBO */JIS.B.2220:90L_10 10 .....
    ELBO */JIS.B.2220:90L_20 20 .....
    ELBO */JIS.B.2220:90L_25 25 .....
    ELBO */JIS.B.2220:90L_100 100 .....
    ELBO */JIS.B.2220:90L_200 200 .....

    指定順序でのソートを可能にする方法は、マクロで記載すれば
    可能なのでしょうか?
    指定順序とは...
    10<20<25<....<100<200の順番に並べたいのですが
    マクロの記述の仕方をお教えください。
    お願いします。
    • [283] Re:選択範囲を並べ替え maru 2006年06月27日 01:58

      ▼ giraffeさん
      ひとことで言えばこんな感じなんでしょうが
      全く汎用性がなく、ほとんど決めうちです。
      サンプルファイルのフォーマットのうち
      条件が固定されるのは、どのくらいなのでしょう。

      一定条件の作業がある程度連続しないかぎり
      この手の作業はマクロを用意するよりも
      手作業で置換・ソート操作したほうが早い気がします。

      他のやり方としては、半角スペースを'\t'に置換して
      Excelに貼り付けてソートするとか。

      //ELBO_Sort.mac
      // 選択行の '_' + 2桁のところに前ゼロを付加
      S_ReplaceAll('_([0-9][0-9]) ', '_0$1 ', 132);
      // 選択行の昇順ソート
      S_SortAsc(0);
      // 選択行の前ゼロを取り除く
      S_ReplaceAll('_0', '_', 128);
      // 再描画
      S_ReDraw(0);
      • [284] Re2:選択範囲を並べ替え giraffe 2006年06月27日 09:31

        ▼ maruさん
        解答ありがとうございます。
        早速試してみました、手で作業するより、やっぱり早いですね

        > サンプルファイルのフォーマットのうち
        > 条件が固定されるのは、どのくらいなのでしょう。

        ELBO */JIS.B2312:45L_15 15.00
        TUBE */JIS.G3454:650 650.00
        上のように、スペース区切りのファイルでして
        固定されている部分は、
        :45L_15の次の"15.00"
        ::650 の次の"650.00"の部分となると思います。

        > 一定条件の作業がある程度連続しないかぎり
        > この手の作業はマクロを用意するよりも
        > 手作業で置換・ソート操作したほうが早い気がします。

        実際、今は手作業でしてるのですが...1ファイル約2千行の
        ファイルが、20個ありまして、時間がかかってしょうがないので
        何かいい手はないかと、此方の掲示板に書かせていただきました。

        > 他のやり方としては、半角スペースを'\t'に置換して
        > Excelに貼り付けてソートするとか。

        これは、Excelでは、少し作業をしてみたのですが
        個人的に”Excel”は、あまり好きではないのと、編集作業が
        エディタでするよりかかってしまって、手作業でパチパチといまやっています。

        > //ELBO_Sort.mac
        > // 選択行の '_' + 2桁のところに前ゼロを付加
        > S_ReplaceAll('_([0-9][0-9]) ', '_0$1 ', 132);
        > // 選択行の昇順ソート
        > S_SortAsc(0);
        > // 選択行の前ゼロを取り除く
        > S_ReplaceAll('_0', '_', 128);
        > // 再描画
        > S_ReDraw(0);

        上記、マクロですが、動かしてみると目的に合ったように
        ソートしてくれました。
        中身を、確認して他の記述に合うように変更してみます。
        ありがとうございました。
        • [285] Re3:選択範囲を並べ替え giraffe 2006年06月27日 19:56

          ▼maruさん
          ごそごそと、ファイルをいじって何とか目的の結果が得られる
          ようになりました。
          ありがとうございました。
          おかげさまで、編集効率が格段にアップしました。

          もう少し、スマートにしたいのですが...
          まっ結果が同じなら、よいかな?なんて思っていますが。
          --
          次は、半角スペースで文字桁揃えができればいうことなしなのですが...

          ----------以下マクロ記載内容----------------
          //SPEC_Sort.mac
          // 選択行の '_' + 2桁のところに前ゼロを付加
          // NAME部の"_"選択し、";"へ変換
          S_ReplaceAll('([A-Z][_])', '$1;', 132);
          S_ReplaceAll('_;', ';', 132);

          // サイズ変化ありを選択
          S_ReplaceAll(';([0-9][0-9][_])', ';0$1', 132);

          // サイズ変化側を選択
          S_ReplaceAll('_([0-9][0-9]\b)', '_0$1', 132);

          // サイズ変化なしを選択
          S_ReplaceAll(';([0-9][0-9]\b)', ';0$1', 132);


          // 選択行の昇順ソート
          S_SortAsc(0);

          // 選択行の前ゼロを取り除く
          S_ReplaceAll(';0', ';', 128);
          S_ReplaceAll('_0', '_', 128);


          // 再描画
          S_ReDraw(0);
          ----------------------------------------------------
          • [286] Re4:選択範囲を並べ替え maru 2006年06月28日 00:28

            ▼ giraffeさん
            > 次は、半角スペースで文字桁揃えができればいうことなしなのですが...
            前半部分の動作がどんなケースを想定した処理なのか
            よくわからないので、半角スペースの桁揃え部分の
            アイディアだけ掲示しておきます。


            // Script from here -----------------------
            // ppa.dllがあれば以下をコメントアウトし拡張子を.ppaにする。
            // なければタイプ別設定でタブ幅を大きくしておく。
            //S_ChangeTabWidth(16);

            // うしろに数値が続く半角スペースをタブに置換
            S_ReplaceAll(' (?=[1-9])', '\t', 132);

            // タブを空白に置換
            S_TABToSPACE();

            // うしろに '.' が続く2桁の数字の前に半角スペースを付加
            S_ReplaceAll('( [1-9][0-9])(?=\.)', ' $1', 132);
            // Script to here ------------------------------------
            • [287] Re5:選択範囲を並べ替え giraffe 2006年06月29日 23:00

              ▼ maruさん
              またまた、回答有難うございます。
              > 前半部分の動作がどんなケースを想定した処理なのか
              > よくわからないので、半角スペースの桁揃え部分の
              > アイディアだけ掲示しておきます。

              記載いただいた、マクロ(PPA)の方で、少しカスタマイズさせて頂き
              無事、桁揃えが可能となりました。
              ほんとに有難うございました。
              ---
              なんとなく編集した結果、無事目的を達成できたのですが
              自分でも、はじめからマクロを作成できるよう、少し勉強しようと
              考えています。
              ”マクロって便利ですね!”