Notepad ++でテキストファイルの行を各行の長さで並べ替えるにはどうすればよいですか?


13

notepad ++で行の長さでテキストファイルをソートするにはどうすればよいですか?上記のタスクに使用できるプラグインはありますか?
プラグインがない場合、プラグインを自分で書くために最初に読むべき、そしておそらく2番目に読むチュートリアルは何ですか?


1
ご存じのように、コードを書いてそれをやり直すことをお勧めします。
ダニエルRヒックス

小さいファイルまたは大きいファイルを扱っていますか?
ComFreek

長さ約250 KBの長い行を含む50 MBファイル。
hpaknia

データは機密ですか?または、Dropbox / Google-Drive /などで共有できますか?Notepad ++がそのファイルを開いて処理できる場合、私のソリューションは機能すると思いますが、自分で試してみたいと思います。
デーン

@HPMさん、あなたのデータを扱うチャンスはありますか?
デーン

回答:


6

この答えは、YouTubeのビデオに触発されています。重要な場合は、元のソート順を維持するように更新されました。

Notepad ++には、選択した行をアルファベット順に並べ替える組み込みのTextFXツールがあります。このツールをハイジャックして、各行の左側にスペースを配置し、すべての行が同じ長さであることを確認することにより、行の長さでソートできます。

スペースは文字として扱われ、「i」の前に来るため、「The Zoo」は「Their House」の前にアルファベット順になります。__X(アンダースコアが実際にスペースであるとする)は、同様にアルファベット順になり_XXます。この答えの考えはスペースと行番号を加えて、それ__________092dogが上で分類されること_003alligatorです。

サンプルデータとして以下を使用します。

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

手順1.行番号を追加します。

(barlopによって追加された注意-このステップに関する読者への注意、これらの行番号に従ってソートするのではなく、行の長さに従ってソートします。しかし、行番号を追加する理由は、自然順序を知っているので、たとえば、2行以上の行の長さが等しい場合、それらの行をその自然順序に従ってソートできます)

テキストファイルにデータのみが含まれている場合、テキストカーソル(垂直線)をファイルの最初の位置に配置します。次に、EditメニューでColumn Editor...Alt+ C)を選択します。[挿入する番号]を選択し、1から始めて1ずつ増やし、先行ゼロを含めます。最短の文字列から最長の文字列にソートする場合、これにより元の順序が保持されることに注意してください。最長から最短に並べ替える場合は、最初にすべての行を反転します。

1Lorem
2ipsum
3dolor
4sit
5amet
6consectetur
7adipisicing

ステップ2.すべての行に先行スペースを埋め込みます。

テキストカーソル(垂直線)をファイルの最初の位置に置きます。次に、EditメニューでColumn Editor...Alt+ C)を選択します。最短のデータ行が最長のデータ行の長さまでパディングされるように、十分なスペースを挿入します。最短行に4文字、最長44行がある場合は、少なくとも40スペースを挿入してください。

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

ステップ3.線を一定の長さに切り取ります。

次の正規表現の検索/置換(Ctrl+ H)を使用して、最も長いデータ行の長さ以上の右側の文字に一致させます。

^.*(.{50})$

すべてをに置き換えます$1。これにより、各行の右端の50文字を除くすべてがトリミングされます。データが50より長い(または短い)場合{50}は、正規表現でを調整します。

(barlopによって追加された注-ここでのアイデアは、最も短い行の先頭に最もスペースがあることです

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

ステップ4.行をソートします。

すべてのテキスト(Ctrl+ A)を選択します。TextFXメニューから、に進みますText FX > TextFX Tools > Sort lines case sensitive (at column)。これで、データは最短から最長の長さの順になります。それらを最長から最短に並べたい場合は、Text FX > TextFX Tools > + Sort ascendingソートする前にオプションのチェックを外してください。行番号も逆になっていることに注意してください。

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

ステップ5.先行スペースを削除します。

別の正規表現の検索/置換(Ctrl+ H)を使用して、先頭のスペースを一致させます。

^ *\d{4}

これは、キャレットとアスタリスクの間のスペースです。すべてを何も置き換えません。4桁の行番号がある場合、すべての先行スペースと挿入された行番号が削除されます。を{4}行番号の正しい桁数に置き換えます。

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

大きい

Notepad ++のマクロ機能を使用して上記の手順を記録しましたが、機能しません。どのステップが失敗するのかわかりませんが、その理由を診断していません。繰り返し行う場合は、おそらくAutoHotKeyを使用してこれを自動化できます。


2
警告:これは安定したソートではありません。言い換えると、同じ長さの行は、ソート後に必ずしも同じ順序で表示されるとは限りません。代わりに、辞書式にソートされます。
ボブ

@Bobは、特定の順序の33文字などの特定の長さの行があり、それらが結果に反映されない場合に正しいです。ステップ1の前に行番号をAlt + Cで追加できます(長さを確実に等しくするための先行0を含む)。次に、ステップ4でクリーンアップするとき^ *\d{5}に、行番号に使用された数字の桁数を使用します。
デーン

2
回答は、既存の並べ替え順序を保持するために更新されました。これは重要であると想定しています。
デーン

ユーチューブのビデオでその男がやっていたことをフォローしてくれた素敵なデーン。pastebin pastebin.comで、失敗したと思われるテキストへのリンクを含めることができます か?そして、それはマクロだけで失敗しましたか、それとも手動で失敗しましたか?
-barlop

1
あなたの答えを読んで、言わなければなりません。あなたがこれ以上票を得ていない理由は、人々が論理を理解していないからだと思います。最初に、あなたの答えに論理の説明を追加することを許可しますか?
-barlop

3

いいえ、ありません。最も近いのはTextFxプラグインですが、それは行の長さではなく文字ベースの並べ替えです。あなたの最善の策は、テキストをスプレッドシートに投げて、そこでソートすることです(LEN()関数を使用して別個の計算列を使用)。


おかげで、テキストファイルには長い行があり、合計サイズが非常に大きいため、スプレッドシートエディターは不要です。質問を更新させてください。
hpaknia

@HPMがあれば、notepad ++の外を見ることができれば、コマンドラインで実行できます。たとえば、いくつかのコマンドを使用して、各行の最後にある行の長さを取得します。少なくともあなたはそれにより近くなるでしょう。
-barlop

おかげで、それは良いアドバイスです。私が興味を持っているのは、NP ++の多くのプラグインです。なぜこれが存在しないのですか?
hpaknia

1

CSVファイルでN ++のSQLを使用できます!たとえば、次の場合:

col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;

、コマンドselect * from data order by length(col1) descを実行して降順に並べ替えることができます。「データ」は現在のファイルを意味します。"col1"-最初の(および最後の)列の名前。

残念ながら、おそらく1列のテキストの行の後に区切り文字を放棄できないバグがあります。


N ++のSQLのみがデータ出力を破壊しなかった場合、これは実際には優れたソリューションです。ソリューションをテストし、すべての行の末尾に区切り文字を追加しましたが、データ出力はすべて小文字に変換し、ダッシュを疑問符に置き換えました。
デーン

@Dane(現在はNotepad ++にアクセスできません。)おそらく、各行の最初と最後(そしてその後のセミコロン)に一重引用符を追加してみてください。たぶん二重引用符?
ボブ

@ボブ:ダメ。小文字については、SQL in N ++プラグインのリリースノートでも言及されています。
デーン

0

または、Linuxとneditを使用している場合:

ctrl-a
alt-r
perl -e 'print sort { length($a) <=> length($b) } <>'

これは質問が尋ねたものではないだけでなく、同じOSプラットフォームにも当てはまりません。
カレブ

依然として有用な回答です。それは私のためにうまくいった唯一のものでした。彼はあなたがlinuxとneditが必要だと指定したので、問題はありません。
アンソニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.