「行並べ替え」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
折返説明画像にborderオプション付加。「既知の仕様」部の説明を微改訂。
Masme (トーク | 投稿記録)
行並べ替え(rev.5)公開
1行目: 1行目:
<div style="float:right">__TOC__</div>
<div style="float:right">__TOC__</div>


選択範囲の文字列を比較し、行の並べ替えを行うマクロです。
選択範囲(矩形可)の文字列を比較し、行の並べ替えを行うマクロです。
* 通常選択・行選択・矩形選択に対応しています。
* Unicode順 または Shift_JIS風の並べ替えが行えます。
* Unicode または Shift_JIS風の並べ替えが行えます。
* 半角/全角、大文字/小文字、ひらがな/カタカナを区別するかを選択できます。
* 半角/全角、大文字/小文字、ひらがな/カタカナを区別するかを選択できます。
【注意点】
【注意点】
* <span style="color:#c00;">矩形選択時に、折り返し行を含んでいると正しく並べ替えられません。</span>
* 数値順・自然順での並べ替えには対応していません(数字は辞書順で並べ替えます)。
* 数値での並べ替えには対応していません。
* 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1~2秒かかりました)。<br>ステータスバーに処理に要した時間が表示されますので参考にしてください。
* 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1秒かかりました)。<br>ステータスバーに処理に要した時間が表示されますので参考にしてください。


[[ファイル:SortLineBySelection.png]]
[[ファイル:SortLineBySelection.png]]
20行目: 18行目:
|-
|-
!昇順 or 降順 で並べる
!昇順 or 降順 で並べる
|昇順 (A→Z)で並べるか降順 (Z→A)で並べるかを切り替えます。
|昇順 (A→Z) で並べるか降順 (Z→A) で並べるかを切り替えます。
|-
|-
!半角/全角を区別
!半角/全角を区別
|半角文字と全角文字を区別するかしないかを切り替えます。<br>区別しない場合、全角英数/記号は半角、半角カナは全角とみなして並べます。
|半角文字と全角文字を区別するかしないかを切り替えます。<br>区別しない場合、全角英数記号は半角、半角カナは全角とみなします。
|-
|-
!大文字/小文字を区別
!大文字/小文字を区別
|アルファベットの大文字と小文字を区別するかしないかを切り替えます。<br>区別しない場合、大文字は小文字とみなして並べます。
|大文字と小文字を区別するかしないかを切り替えます。<br>区別しない場合、大文字は小文字とみなします。
|-
|-
!ひらがな/カタカナを区別
!ひらがな/カタカナを区別
|ひらがなとカタカナを区別するかしないかを切り替えます。<br>区別しない場合、ひらがなはカタカナとみなして並べます。
|ひらがなとカタカナを区別するかしないかを切り替えます。<br>区別しない場合、ひらがなはカタカナとみなします。
|}
|}


==ソースコード==
==ソースコード==
ダウンロード→ [[メディア:行並べ替え_r4.zip|行並べ替え_r4.zip]]
ダウンロード→ [[メディア:行並べ替え.zip|行並べ替え.zip]] (rev.5)
 
* 拙作ですがアイコンファイルを同梱してあります。<br>Mery の My Macros フォルダにアイコンファイル (行並べ替え.ico) を配置すれば、ツールバーにアイコンが読み込まれます。


==更新履歴==
==更新履歴==
[[ファイル:行並べ替え.zip]]
* <b>2014/07/27 (rev.5)</b>
** アイコンファイルを同梱し、読み込むようにした。
** 並べ替え実行後、行全体を範囲選択するようにした。
** 矩形選択で折り返し行を含む場合の不具合を修正。
*** 折り返し行を探査するため、通常より処理時間が伸びます(1万表示行で約4秒増加)。
** rev.4 の処理高速化手法の一部(コード変換)を取り下げ。
*** マクロの処理速度では大量処理にも限界があるので、可読性を優先しておくことに。
** 半角/全角変換表の仕様を ["正規表現","文字"] → [/正規表現/,"文字"] に変更。
** 半角/全角区別の対象に " ' \ の3字を追加。
** 大/小文字区別の処理を toLowerCase() → toLocaleLowerCase() に変更。
*** Mery の大文字/小文字変換と同様、OS の言語設定を考慮するようにした。
** かな/カナ区別の処理を半角/全角区別と同じ仕様に変更(ひらがなが多い場合に高速化)。
** かな/カナ区別の対象に ゝ ゞ の2字を追加。
* <b>2013/09/19 (rev.4)</b> [[ファイル:行並べ替え_r4.zip]]
* <b>2013/09/19 (rev.4)</b> [[ファイル:行並べ替え_r4.zip]]
** ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に2秒→1秒に短縮)。
** ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に2秒→1秒に短縮)。
** <span style="color:#c00;">並べ替え(Shift_JIS風) 時、Shift_JIS にない文字の扱いが変わりました。<br>rev.3 までは、昇順/降順を問わず最後尾に並ぶようになっていましたが、<br>rev.4 では、昇順/降順の設定に従うようになっています。</span>
** <span style="color:#c00;">並べ替え(Shift_JIS風) 時、Shift_JIS にない文字の扱いが変わりました。<br>rev.3 までは、昇順/降順を問わず最後尾に並ぶようになっていましたが、<br>rev.4 からは、昇順/降順の設定に従うようになっています。</span>
* <b>2013/09/19 (rev.3)</b> [[ファイル:行並べ替え_r3.zip]]
* <b>2013/09/19 (rev.3)</b> [[ファイル:行並べ替え_r3.zip]]
** 「半角/全角を区別」設定を追加。
** 「半角/全角を区別」設定を追加。
** 選択範囲がない場合にエラーが出る不具合を修正。<br>ポップアップメニューで「並べ替えが行えない」ことを注意するようにした。
** 選択範囲がない場合にエラーが出る不具合を修正。<br>ポップアップメニューで「並べ替えが行えない」ことを注意するようにした。
** 並べ替え(Unicode) 時でも Shift_JIS 用のデータを処理していたムダを解消し、高速化。
** 並べ替え(Unicode) 時にも Shift_JIS 用のデータを処理していたムダを解消し、高速化。
** 並べ替え(Unicode) 時に、水平タブが空行より先に並ぶ不具合を修正(rev.2 限定で発生)。
* <b>2013/08/29 (rev.2)</b> [[ファイル:行並べ替え_r2.zip]]
* <b>2013/08/29 (rev.2)</b> [[ファイル:行並べ替え_r2.zip]]
** ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に30秒→2秒に短縮)。
** ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に30秒→2秒に短縮)。
** <span style="color:#c00;">並べ替え(Unicode) 時に、水平タブが空行より先に並ぶバグがあります</span>(rev.3 で修正)。
** <span style="color:#c00;">並べ替え(Unicode) 時に、水平タブが空行より前に並ぶバグがあります</span>(rev.3 で修正)。
* <b>2013/08/25 (rev.1)</b> [[ファイル:行並べ替え.zip]]
* <b>2013/08/25 (rev.1)</b>
** 初版公開。
** 初版公開。


==注意点および既知の仕様==
==不具合(解決)==
 
===矩形選択で折り返し行を含む場合===
<span style="color:#c00;">※rev.5 で解決</span><br>
折り返された行を矩形選択していると、正しく並べ替えられません(画像参照)。


===矩形選択内に折り返し行がある場合の不具合===
[[ファイル:SortLineBySelection_PosView.png]]
矩形選択での並べ替え時、折り返された行が含まれていると、正しく並べ替えることができません(画像参照)。


[[ファイル:SortLineBySelection_PosView.png|border]]
==仕様==


===Shift_JIS風の並び順===
===Shift_JIS風の並び順===
Microsoft コードページ 932 (参考: [http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 Wikipedia]) の仕様を基本に、以下の変更を加えています。
※Shift_JIS風の並び順は、ソースコードの「Shift_JIS(CP932)索引」で定義されています。<br>
Microsoft コードページ932 (参考: [http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 Wikipedia]) の定義を基本に、以下の変更を加えてあります。
* NEC特殊/IBM拡張記号類 ①~" は、全角記号の次。㍻は㍼の次に並ぶ。
* NEC特殊/IBM拡張記号類 ①~" は、全角記号の次。㍻は㍼の次に並ぶ。
* ローマ数字の小文字形 ⅰ~ⅹ は、大文字形 Ⅰ~Ⅹ の次に並ぶ。
* ローマ数字の小文字形 ⅰ~ⅹ は、大文字形 Ⅰ~Ⅹ の次に並ぶ。


===半角/全角を区別しない並び順===
===半角/全角を区別しない並び順===
* 全角英数/記号は半角、半角カナは全角とみなして並べ替えます。
※区別の対象となる文字は、ソースコードの「半角/全角変換表」で定義されています。
* どの文字がどの文字とみなされるのかは、ソースコード内の「半角/全角変換表」に配列としてまとめられていますので、気になる方はご確認ください。
* 全角英数は半角、半角カナは全角とみなして並べ替えます。
* 全角記号は、全角ASCII文字の範囲に“ ”‘ ’¥ の5字を追加してあります。


===大文字/小文字を区別しない並び順===
===大文字/小文字を区別しない並び順===
* 大文字は小文字とみなして並べ替えます。このため、[ ] \ ^ _ は英大文字より前に並ぶようになります。
* 大文字は小文字とみなして並べ替えます。このため、<b>[ ] \ ^ _</b> は <b>A</b> より前に並ぶようになります。
* ギリシャ文字やローマ数字など、大/小の区別が存在する文字も区別しなくなります。
* ギリシャ文字やローマ数字など、大小の区別が存在する文字も区別しなくなります。
* 小さい っ ぁ ゃ などは「捨て仮名」「小書き文字」と呼び、小文字とは異なる概念の文字なので、区別の対象外です。
* 小さい <b>っ ぁ ゃ</b> などは「捨て仮名」「小書き文字」と呼び、小文字とは異なる概念の文字なので対象外です。


==開発者メモ==
==開発者メモ==
;「数値での並べ替え」対応 ⇒予定なし
;「数値順・自然順での並べ替え」対応 ⇒予定なし
:数値の判定が面倒くさいため対応予定は現状ありません。<br>空白文字や通貨記号や3桁区切り(,)、負数(-)や小数(.)の判定など、考慮することがいろいろあって力尽きました。
:数値の判定が面倒くさいため対応予定は現状ありません。<br>空白文字・通貨記号・3桁区切りの考慮、負数・小数・指数・計算精度の問題など、課題がいろいろあって力尽きました。
;「半角/全角を区別」対応 ⇒<s style="color:#999;">予定なし</s> rev.3 で対応
;処理速度の改善 ⇒<s style="color:#999;">お手上げ</s> ks 氏の助力により改善できました
;プラグイン化
;プラグイン化
:インタプリタなマクロより、コンパイルしたプラグインの方が処理が高速だと思われます。しかしながら、自分は JavaScript くらいしか組めないので実現予定はありません。
:インタプリタなマクロより、コンパイルしたプラグインの方が高速だと思います。<br>しかしながら、自分は JavaScript くらいしか組めないので実現予定はありません。


==コメント==
==コメント==
* [http://merysmacro.seesaa.net/?1377428899 処理速度の改善を図ってみました]ので,ご参考まで (ks)
* [http://merysmacro.seesaa.net/?1377428899 処理速度の改善を図ってみました]ので,ご参考まで (ks)
** ありがとうございます。おかげさまで処理速度を大幅に改善することができました。 (masme)
** ありがとうございます。おかげさまで処理速度を大幅に改善することができました。 (masme)

2014年7月27日 (日) 13:35時点における版

選択範囲(矩形可)の文字列を比較し、行の並べ替えを行うマクロです。

  • Unicode順 または Shift_JIS風の並べ替えが行えます。
  • 半角/全角、大文字/小文字、ひらがな/カタカナを区別するかを選択できます。

【注意点】

  • 数値順・自然順での並べ替えには対応していません(数字は辞書順で並べ替えます)。
  • 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1~2秒かかりました)。
    ステータスバーに処理に要した時間が表示されますので参考にしてください。

並べ替え(Unicode) Unicode順での並べ替えを実行します。
並べ替え(Shift_JIS風) Shift_JIS風での並べ替えを実行します。
※Shift_JIS とは一部の並び順が異なるため「風」と付いています。
※Shift_JIS にない文字は、最後尾に並びます(昇順時)。
昇順 or 降順 で並べる 昇順 (A→Z) で並べるか降順 (Z→A) で並べるかを切り替えます。
半角/全角を区別 半角文字と全角文字を区別するかしないかを切り替えます。
区別しない場合、全角英数記号は半角、半角カナは全角とみなします。
大文字/小文字を区別 大文字と小文字を区別するかしないかを切り替えます。
区別しない場合、大文字は小文字とみなします。
ひらがな/カタカナを区別 ひらがなとカタカナを区別するかしないかを切り替えます。
区別しない場合、ひらがなはカタカナとみなします。

ソースコード

ダウンロード→ 行並べ替え.zip (rev.5)

  • 拙作ですがアイコンファイルを同梱してあります。
    Mery の My Macros フォルダにアイコンファイル (行並べ替え.ico) を配置すれば、ツールバーにアイコンが読み込まれます。

更新履歴

ファイル:行並べ替え.zip

  • 2014/07/27 (rev.5)
    • アイコンファイルを同梱し、読み込むようにした。
    • 並べ替え実行後、行全体を範囲選択するようにした。
    • 矩形選択で折り返し行を含む場合の不具合を修正。
      • 折り返し行を探査するため、通常より処理時間が伸びます(1万表示行で約4秒増加)。
    • rev.4 の処理高速化手法の一部(コード変換)を取り下げ。
      • マクロの処理速度では大量処理にも限界があるので、可読性を優先しておくことに。
    • 半角/全角変換表の仕様を ["正規表現","文字"] → [/正規表現/,"文字"] に変更。
    • 半角/全角区別の対象に " ' \ の3字を追加。
    • 大/小文字区別の処理を toLowerCase() → toLocaleLowerCase() に変更。
      • Mery の大文字/小文字変換と同様、OS の言語設定を考慮するようにした。
    • かな/カナ区別の処理を半角/全角区別と同じ仕様に変更(ひらがなが多い場合に高速化)。
    • かな/カナ区別の対象に ゝ ゞ の2字を追加。
  • 2013/09/19 (rev.4) ファイル:行並べ替え r4.zip
    • ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に2秒→1秒に短縮)。
    • 並べ替え(Shift_JIS風) 時、Shift_JIS にない文字の扱いが変わりました。
      rev.3 までは、昇順/降順を問わず最後尾に並ぶようになっていましたが、
      rev.4 からは、昇順/降順の設定に従うようになっています。
  • 2013/09/19 (rev.3) ファイル:行並べ替え r3.zip
    • 「半角/全角を区別」設定を追加。
    • 選択範囲がない場合にエラーが出る不具合を修正。
      ポップアップメニューで「並べ替えが行えない」ことを注意するようにした。
    • 並べ替え(Unicode) 時にも Shift_JIS 用のデータを処理していたムダを解消し、高速化。
  • 2013/08/29 (rev.2) ファイル:行並べ替え r2.zip
    • ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に30秒→2秒に短縮)。
    • 並べ替え(Unicode) 時に、水平タブが空行より前に並ぶバグがあります(rev.3 で修正)。
  • 2013/08/25 (rev.1)
    • 初版公開。

不具合(解決)

矩形選択で折り返し行を含む場合

※rev.5 で解決
折り返された行を矩形選択していると、正しく並べ替えられません(画像参照)。

仕様

Shift_JIS風の並び順

※Shift_JIS風の並び順は、ソースコードの「Shift_JIS(CP932)索引」で定義されています。
Microsoft コードページ932 (参考: Wikipedia) の定義を基本に、以下の変更を加えてあります。

  • NEC特殊/IBM拡張記号類 ①~" は、全角記号の次。㍻は㍼の次に並ぶ。
  • ローマ数字の小文字形 ⅰ~ⅹ は、大文字形 Ⅰ~Ⅹ の次に並ぶ。

半角/全角を区別しない並び順

※区別の対象となる文字は、ソースコードの「半角/全角変換表」で定義されています。

  • 全角英数は半角、半角カナは全角とみなして並べ替えます。
  • 全角記号は、全角ASCII文字の範囲に“ ”‘ ’¥ の5字を追加してあります。

大文字/小文字を区別しない並び順

  • 大文字は小文字とみなして並べ替えます。このため、[ ] \ ^ _A より前に並ぶようになります。
  • ギリシャ文字やローマ数字など、大小の区別が存在する文字も区別しなくなります。
  • 小さい っ ぁ ゃ などは「捨て仮名」「小書き文字」と呼び、小文字とは異なる概念の文字なので対象外です。

開発者メモ

「数値順・自然順での並べ替え」対応 ⇒予定なし
数値の判定が面倒くさいため対応予定は現状ありません。
空白文字・通貨記号・3桁区切りの考慮、負数・小数・指数・計算精度の問題など、課題がいろいろあって力尽きました。
プラグイン化
インタプリタなマクロより、コンパイルしたプラグインの方が高速だと思います。
しかしながら、自分は JavaScript くらいしか組めないので実現予定はありません。

コメント

スポンサーリンク