「行並べ替え」の版間の差分
ナビゲーションに移動
検索に移動
マクロ更新 |
マクロ更新 |
||
| 2行目: | 2行目: | ||
選択範囲(矩形可)の文字列を比較し、論理行単位で並べ替えるマクロです。 | 選択範囲(矩形可)の文字列を比較し、論理行単位で並べ替えるマクロです。 | ||
【注意点】 | 【注意点】 | ||
* 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1~2秒かかりました)。<br> | * 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1~2秒かかりました)。<br>ステータスバーに処理時間が表示されますので参考にしてください。 | ||
[[ファイル:SortLineBySelection.png]] | [[ファイル:SortLineBySelection.png]] | ||
{|class="wikitable" | {|class="wikitable" | ||
!※全行を | |||
|<b style="color:#c00;">※非選択時に表示。</b>文書全体が並べ替えの対象になります。 | |||
|- | |||
!並べ替え(Unicode) | !並べ替え(Unicode) | ||
| | |Unicode順の並べ替えを実行します。 | ||
|- | |- | ||
!並べ替え( | !並べ替え(SJIS風) | ||
| | |Shift_JIS風の並べ替えを実行します。→ [[#並べ替え(SJIS風)]] | ||
|- | |- | ||
!昇順 | !昇順 - 降順 | ||
|昇順 (A→Z) | |昇順 (A→Z) か降順 (Z→A) かを切り替えます。 | ||
|- | |- | ||
! | !文字順 - 数値順 | ||
| | |半角数字列の並べ方を切り替えます。<br>文字順 (1<10<2) は、文字として一字ずつ比較します。<br>数値順 (1<2<10) は、非負整数(正の整数)として比較します。→ [[#数値順]] | ||
|- | |- | ||
!大文字/小文字を区別する | !大文字/小文字を区別する | ||
| | |しない場合、大文字を小文字とみなします。 | ||
|- | |||
!全角/半角英数を区別する | |||
|しない場合、全角英数を半角とみなします。 | |||
|- | |- | ||
!半角/ | !半角/全角カナを区別する | ||
| | |しない場合、半角カナを全角とみなします。 | ||
|- | |- | ||
!ひらがな/カタカナを区別する | !ひらがな/カタカナを区別する | ||
| | |しない場合、ひらがなをカタカナとみなします。 | ||
|} | |} | ||
==ソースコード== | ==ソースコード== | ||
ダウンロード→ <b>[[メディア:行並べ替え.zip|行並べ替え.zip]]</b> (rev. | ダウンロード→ <b>[[メディア:行並べ替え.zip|行並べ替え.zip]]</b> (rev.8) | ||
* 拙作ですがアイコンファイル (行並べ替え.ico) を同梱してあります。<br>Mery 2.4.7 以降の場合、マクロ (行並べ替え.js) と同じフォルダに、<br>Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、<br>アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。 | * 拙作ですがアイコンファイル (行並べ替え.ico) を同梱してあります。<br>Mery 2.4.7 以降の場合、マクロ (行並べ替え.js) と同じフォルダに、<br>Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、<br>アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。 | ||
| 40行目: | 45行目: | ||
[[ファイル:行並べ替え.zip]] | [[ファイル:行並べ替え.zip]] | ||
* 2017/06/25 (rev.8) | |||
** アイコンファイルに24x24・32x32・48x48の画像を追加。 | |||
** 非選択時、並べ替え不可 → 文書全体を対象にする仕様に変更。 | |||
** 折り返し行を探査する方法を変更し、高速化(1万表示行で4秒→0.1秒)。 | |||
** 並べ替え実行後、実行範囲を行選択する際、末尾の改行を含めるようにした。 | |||
** 「並べ替え(Shift_JIS風)」→「並べ替え(SJIS風)」に改称。 | |||
** 「辞書順」→「文字順」に改称。 | |||
** 「文字順」→「数値順」に初期設定を変更。 | |||
** 「数値順」で同値の場合、文字順 → 先頭ゼロ比較に変更し、高速化。 | |||
** 「半角/全角英数カナを区別」の対象から<b style="color:#c00;">半角カナを除外</b>し、「全角/半角英数を区別」に変更。 | |||
** 「半角/全角カナを区別」設定を追加。 | |||
** 比較用変換の処理を改造。 | |||
*** 索引を「正規表現」と「文字列」の構成に仕様変更。 | |||
<!-- コード変換の処理を charCodeAt() 走査 → match() 配列走査 に変更。 --> | |||
*** 索引の改行文字 [LF] と半角数字 (0~9) の符号位置は変更厳禁だった仕様を解消。 | |||
<!-- U+000D [CR] をデリミタに利用し、コード変換を回避するようにした。 --> | |||
*** 索引の上限字数を 65535 と明文化し、上限以上は処理しないようにした。 | |||
*** 数値順の上限桁数が 65519 → 65505 に 14 縮小。 | |||
** <b style="color:#c00;">並べ替え(Unicode) 時、サロゲートペアの扱いが変わりました。</b><br>rev.7 までは、UTF-16順 (U+D7FF~E000 の間) に並びましたが、<br>rev.8 からは、Unicode順 (U+FFFF の次) に並びます。 | |||
** <b style="color:#c00;">並べ替え(SJIS風) 時、Shift_JISに無い文字の扱いが変わりました。</b><br>rev.7 までは、未定義文字 (0xFFFF) に置き換えていましたが、<br>rev.8 からは、Unicode順と同様に並びます。 | |||
* 2015/12/26 (rev.7) | * 2015/12/26 (rev.7) | ||
** アイコンの指定先を "My Macros\行並べ替え.ico" → "行並べ替え.ico" に変更。 | ** アイコンの指定先を "My Macros\行並べ替え.ico" → "行並べ替え.ico" に変更。 | ||
| 45行目: | 70行目: | ||
* 2014/10/12 (rev.6) | * 2014/10/12 (rev.6) | ||
** 「辞書順/数値順」設定を追加。 | ** 「辞書順/数値順」設定を追加。 | ||
** < | ** 「半角/全角を区別」の対象から<b style="color:#c00;">記号を除外</b>し、「半角/全角英数カナを区別」に変更。 | ||
**: 半角/ | **: 半角/全角の対応が定義しづらく、区別の対象となる文字が分かりにくいため。 | ||
** ポップアップメニューにアクセラレータキー(アクセスキー)を割り当て。 | ** ポップアップメニューにアクセラレータキー(アクセスキー)を割り当て。 | ||
** | ** ポップアップメニューの「半角/全角」「大/小文字」の配置を交換。 | ||
** | ** ポップアップメニューの「大/小文字」「半角/全角」「かな/カナ」をチェックボックス式に変更。 | ||
* 2014/07/27 (rev.5) | * 2014/07/27 (rev.5) | ||
** アイコンファイルを同梱し、読み込むようにした。 | ** アイコンファイルを同梱し、読み込むようにした。 | ||
** | ** 並べ替え実行後、実行範囲を行選択するようにした。 | ||
** | ** <b style="color:#c00;">矩形選択時、折り返し行が含まれていると、正しく並べ替えられない不具合を修正。</b> | ||
**: | **: ただし、折り返し行を探査する処理に時間がかかります(1万表示行で4秒)。 | ||
** rev.4 の処理高速化手法の一部(コード変換)を取り下げ。 | ** rev.4 の処理高速化手法の一部(コード変換)を取り下げ。 | ||
**: マクロの処理速度では大量処理にも限界があるので、可読性を優先しておくことに。 | **: マクロの処理速度では大量処理にも限界があるので、可読性を優先しておくことに。 | ||
** 半角/全角変換表の仕様を ["正規表現","文字"] → [/正規表現/,"文字"] に変更。 | ** 半角/全角変換表の仕様を ["正規表現","文字"] → [/正規表現/,"文字"] に変更。 | ||
** | ** 「半角/全角を区別」の対象に " ' \ の3字を追加。 | ||
** | ** 「大/小文字を区別」の処理を toLowerCase() → toLocaleLowerCase() に変更。 | ||
**: Mery の大文字/小文字変換と同様、OS の言語設定を考慮するようにした。 | **: Mery の大文字/小文字変換と同様、OS の言語設定を考慮するようにした。 | ||
** | ** 「かな/カナを区別」の処理を「半角/全角を区別」と同じ仕様に変更(ひらがなが多い場合に高速化)。 | ||
** | ** 「かな/カナを区別」の対象に ゝ ゞ の2字を追加。 | ||
* 2013/09/19 (rev.4) [[ファイル:行並べ替え_r4.zip]] | * 2013/09/19 (rev.4) [[ファイル:行並べ替え_r4.zip]] | ||
** ks | ** ks 氏の改善策を参考に、高速化(1万行で2秒→1秒)。 | ||
** < | ** <b style="color:#c00;">並べ替え(Shift_JIS風) 時、Shift_JISに無い文字の扱いが変わりました。</b><br>rev.3 までは、昇順/降順を問わず最後尾に並びましたが、<br>rev.4 からは、昇順/降順に従います。 | ||
* 2013/09/19 (rev.3) [[ファイル:行並べ替え_r3.zip]] | * 2013/09/19 (rev.3) [[ファイル:行並べ替え_r3.zip]] | ||
** 「半角/全角を区別」設定を追加。 | ** 「半角/全角を区別」設定を追加。 | ||
** | ** 非選択時にエラーが出る不具合を修正。 | ||
** 並べ替え(Unicode) | **: ポップアップメニューに「並べ替えが行えない」旨を表示するようにした。 | ||
** 並べ替え(Unicode) 時においても Shift_JIS 用の準備をしていたムダを解消。 | |||
* 2013/08/29 (rev.2) [[ファイル:行並べ替え_r2.zip]] | * 2013/08/29 (rev.2) [[ファイル:行並べ替え_r2.zip]] | ||
** ks | ** ks 氏の改善策を参考に、高速化(1万行で30秒→2秒)。 | ||
** < | ** <b style="color:#c00;">並べ替え(Unicode) 時、水平タブが空行より前に並ぶバグがあります</b>(rev.3 で修正)。 | ||
* 2013/08/25 (rev.1) | * 2013/08/25 (rev.1) | ||
** 初版公開。 | ** 初版公開。 | ||
==仕様== | ==仕様== | ||
=== | ===並べ替え(SJIS風)=== | ||
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] をベースに、下記の仕様で並べます。 | |||
Microsoft コードページ932 | * NEC特殊 / IBM拡張記号類 <code>①~"</code> は、全角記号の次に。<code>㍻</code>は<code>㍼</code>の次に並べる。 | ||
* NEC特殊/IBM拡張記号類 ①~" | * ローマ数字の小文字形 <code>ⅰ~ⅹ</code> は、大文字形 <code>Ⅰ~Ⅹ</code> の次に並べる。 | ||
* ローマ数字の小文字形 ⅰ~ⅹ は、大文字形 Ⅰ~Ⅹ | * 未定義文字 (0x80, A0, FD, FE, FF)、ユーザー定義外字 (0xF0A0~F9FC) は非対応。 | ||
* Shift_JIS(CP932)に無い文字は、Unicode順に並べる。<b style="color:#c00;">(rev.8以降)</b> | |||
=== | ===数値順=== | ||
* | 半角数字列を非負整数(正の整数)の順に並べます。 | ||
* < | * 負数<code>-12</code> 小数<code>0.12</code> 分数<code>1/2</code> 指数<code>1.2e3</code> などには対応していません。 | ||
* < | * <b style="color:#c00;>全角数字</b>は「全角/半角英数を区別」設定で扱いが変わります。<br>区別する場合、全角数字は対象外となり、文字順になります。<br>区別しない場合、半角数字とみなすため、数値順になります。 | ||
* | * 同値の場合、先頭ゼロの個数で比較します。例> <code>001</code><<code>01</code><<code>1</code>。 | ||
* 仕様上、10の65505乗 以上の数値は扱えません。超過した数値同士は文字順で比較されます。 | |||
===大文字/ | ===大文字/小文字を区別しない=== | ||
* | 大文字を小文字とみなして並べます。 | ||
* | * <code>[ ] \ ^ _</code> が <code>A</code> の前に並ぶようになります。 | ||
* 小さい < | * ギリシャ文字やローマ数字など、大小が存在する文字も区別しなくなります。 | ||
* 小さい <code>っ ぁ ゃ</code> など仮名文字は対象外です。 | |||
=== | ===全角/半角英数を区別しない=== | ||
全角英数 <code>0~9 A~Z a~z</code> を半角とみなして並べます。 | |||
=== | ===半角/全角カナを区別しない=== | ||
半角カナ類 <code>ヲ~ッ ア~ン 。 「 」 、 ・ ー ゙ ゚</code> を全角とみなして並べます。 | |||
== | ===ひらがな/カタカナを区別しない=== | ||
ひらがなをカタカナとみなして並べます。 | |||
* <code>゛ ゜ ゟ</code> が <code>ぁ</code> の前に並ぶようになります。 | |||
* <code>ゔ ゕ ゖ</code> は <code>ヴ ヵ ヶ</code> とみなすため、Shift_JIS(CP932)に無い文字と扱われなくなります。 | |||
==コメント== | ==コメント== | ||
* [http://merysmacro.seesaa.net/ | * [http://merysmacro.seesaa.net/article/372975309.html 処理速度の改善を図ってみました]ので,ご参考まで (ks) | ||
** ありがとうございます。おかげさまで処理速度を大幅に改善することができました。 (masme) | ** ありがとうございます。おかげさまで処理速度を大幅に改善することができました。 (masme) | ||
2017年6月25日 (日) 08:32時点における版
選択範囲(矩形可)の文字列を比較し、論理行単位で並べ替えるマクロです。
【注意点】
- 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1~2秒かかりました)。
ステータスバーに処理時間が表示されますので参考にしてください。
| ※全行を | ※非選択時に表示。文書全体が並べ替えの対象になります。 |
|---|---|
| 並べ替え(Unicode) | Unicode順の並べ替えを実行します。 |
| 並べ替え(SJIS風) | Shift_JIS風の並べ替えを実行します。→ #並べ替え(SJIS風) |
| 昇順 - 降順 | 昇順 (A→Z) か降順 (Z→A) かを切り替えます。 |
| 文字順 - 数値順 | 半角数字列の並べ方を切り替えます。 文字順 (1<10<2) は、文字として一字ずつ比較します。 数値順 (1<2<10) は、非負整数(正の整数)として比較します。→ #数値順 |
| 大文字/小文字を区別する | しない場合、大文字を小文字とみなします。 |
| 全角/半角英数を区別する | しない場合、全角英数を半角とみなします。 |
| 半角/全角カナを区別する | しない場合、半角カナを全角とみなします。 |
| ひらがな/カタカナを区別する | しない場合、ひらがなをカタカナとみなします。 |
ソースコード
ダウンロード→ 行並べ替え.zip (rev.8)
- 拙作ですがアイコンファイル (行並べ替え.ico) を同梱してあります。
Mery 2.4.7 以降の場合、マクロ (行並べ替え.js) と同じフォルダに、
Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、
アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。
更新履歴
- 2017/06/25 (rev.8)
- アイコンファイルに24x24・32x32・48x48の画像を追加。
- 非選択時、並べ替え不可 → 文書全体を対象にする仕様に変更。
- 折り返し行を探査する方法を変更し、高速化(1万表示行で4秒→0.1秒)。
- 並べ替え実行後、実行範囲を行選択する際、末尾の改行を含めるようにした。
- 「並べ替え(Shift_JIS風)」→「並べ替え(SJIS風)」に改称。
- 「辞書順」→「文字順」に改称。
- 「文字順」→「数値順」に初期設定を変更。
- 「数値順」で同値の場合、文字順 → 先頭ゼロ比較に変更し、高速化。
- 「半角/全角英数カナを区別」の対象から半角カナを除外し、「全角/半角英数を区別」に変更。
- 「半角/全角カナを区別」設定を追加。
- 比較用変換の処理を改造。
- 索引を「正規表現」と「文字列」の構成に仕様変更。
- 索引の改行文字 [LF] と半角数字 (0~9) の符号位置は変更厳禁だった仕様を解消。
- 索引の上限字数を 65535 と明文化し、上限以上は処理しないようにした。
- 数値順の上限桁数が 65519 → 65505 に 14 縮小。
- 並べ替え(Unicode) 時、サロゲートペアの扱いが変わりました。
rev.7 までは、UTF-16順 (U+D7FF~E000 の間) に並びましたが、
rev.8 からは、Unicode順 (U+FFFF の次) に並びます。 - 並べ替え(SJIS風) 時、Shift_JISに無い文字の扱いが変わりました。
rev.7 までは、未定義文字 (0xFFFF) に置き換えていましたが、
rev.8 からは、Unicode順と同様に並びます。
- 2015/12/26 (rev.7)
- アイコンの指定先を "My Macros\行並べ替え.ico" → "行並べ替え.ico" に変更。
- 矩形選択(始点or終点が左下かつ論理行頭)時、下端の行が範囲から漏れる不具合を修正。
- 2014/10/12 (rev.6)
- 「辞書順/数値順」設定を追加。
- 「半角/全角を区別」の対象から記号を除外し、「半角/全角英数カナを区別」に変更。
- 半角/全角の対応が定義しづらく、区別の対象となる文字が分かりにくいため。
- ポップアップメニューにアクセラレータキー(アクセスキー)を割り当て。
- ポップアップメニューの「半角/全角」「大/小文字」の配置を交換。
- ポップアップメニューの「大/小文字」「半角/全角」「かな/カナ」をチェックボックス式に変更。
- 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)
- 初版公開。
仕様
並べ替え(SJIS風)
Microsoft コードページ932 [1] をベースに、下記の仕様で並べます。
- NEC特殊 / IBM拡張記号類
①~"は、全角記号の次に。㍻は㍼の次に並べる。 - ローマ数字の小文字形
ⅰ~ⅹは、大文字形Ⅰ~Ⅹの次に並べる。 - 未定義文字 (0x80, A0, FD, FE, FF)、ユーザー定義外字 (0xF0A0~F9FC) は非対応。
- Shift_JIS(CP932)に無い文字は、Unicode順に並べる。(rev.8以降)
数値順
半角数字列を非負整数(正の整数)の順に並べます。
- 負数
-12小数0.12分数1/2指数1.2e3などには対応していません。 - 全角数字は「全角/半角英数を区別」設定で扱いが変わります。
区別する場合、全角数字は対象外となり、文字順になります。
区別しない場合、半角数字とみなすため、数値順になります。 - 同値の場合、先頭ゼロの個数で比較します。例>
001<01<1。 - 仕様上、10の65505乗 以上の数値は扱えません。超過した数値同士は文字順で比較されます。
大文字/小文字を区別しない
大文字を小文字とみなして並べます。
[ ] \ ^ _がAの前に並ぶようになります。- ギリシャ文字やローマ数字など、大小が存在する文字も区別しなくなります。
- 小さい
っ ぁ ゃなど仮名文字は対象外です。
全角/半角英数を区別しない
全角英数 0~9 A~Z a~z を半角とみなして並べます。
半角/全角カナを区別しない
半角カナ類 ヲ~ッ ア~ン 。 「 」 、 ・ ー ゙ ゚ を全角とみなして並べます。
ひらがな/カタカナを区別しない
ひらがなをカタカナとみなして並べます。
゛ ゜ ゟがぁの前に並ぶようになります。ゔ ゕ ゖはヴ ヵ ヶとみなすため、Shift_JIS(CP932)に無い文字と扱われなくなります。
コメント
- 処理速度の改善を図ってみましたので,ご参考まで (ks)
- ありがとうございます。おかげさまで処理速度を大幅に改善することができました。 (masme)
スポンサーリンク
