Bagaimana saya bisa mengurutkan baris dalam file teks, dengan panjang setiap baris, di Notepad ++?


13

Bagaimana saya bisa mengurutkan file teks berdasarkan panjang baris di notepad ++? Apakah ada plugin yang tersedia untuk tugas yang disebutkan?
Jika tidak ada plugin, Apa tutorial pertama dan mungkin yang kedua untuk dibaca, Untuk menulis plugin sendiri?


1
Anda tahu, kadang-kadang lebih baik menulis beberapa kode dan menyelesaikannya.
Daniel R Hicks

Apakah Anda berurusan dengan file kecil atau besar?
ComFreek

File 50 MB dengan garis panjang, panjang sekitar 250 KB.
hpaknia

Apakah data sensitif? Atau bisakah Anda membagikannya di Dropbox / Google-Drive / dll.? Jika Notepad ++ dapat membuka dan menangani file itu, saya akan membayangkan bahwa solusi saya akan berhasil, tetapi saya ingin mencobanya sendiri.
Dane

Hai @HPM, ada kemungkinan mulai mengerjakan data Anda?
Dane

Jawaban:


6

Jawaban ini terinspirasi oleh video YouTube . Diperbarui untuk mempertahankan urutan pengurutan asli, jika itu penting.

Notepad ++ memiliki alat TextFX bawaan yang mengurutkan garis yang dipilih secara alfabet. Alat ini dapat dibajak untuk mengurutkan berdasarkan panjang garis dengan menempatkan spasi di sebelah kiri setiap garis, dan memastikan bahwa semua garis memiliki panjang yang sama.

"The Zoo" hadir secara alfabet sebelum "Our House" karena ruang tersebut diperlakukan sebagai karakter dan muncul sebelum "i". __X(Berpura-pura garis bawah benar-benar spasi) juga akan datang menurut abjad sebelumnya _XX. Gagasan dalam jawaban ini adalah menambahkan spasi dan nomor baris sehingga __________092dogakan diurutkan di atas _003alligator.

Saya akan menggunakan yang berikut sebagai contoh data:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

Langkah 1. Tambahkan nomor baris.

(Catatan ditambahkan oleh barlop- catatan untuk pembaca mengenai langkah ini, kami tidak akan mengurutkan berdasarkan nomor baris ini, kami mengurutkan berdasarkan panjang baris. Tapi alasan untuk menambahkan nomor baris, adalah karena itu kami tahu tatanan alam, sehingga ketika misalnya, dua + garis memiliki panjang yang sama kita dapat mengurutkan garis-garis itu sesuai dengan tatanan alami itu)

Dengan asumsi file teks Anda hanya memiliki data di dalamnya, tempatkan kursor teks (garis vertikal) ke posisi paling pertama dari file tersebut. Kemudian di Editmenu pilih Column Editor...( Alt+ C). Pilih "Angka untuk Disisipkan" dan mulai dengan 1, tambah 1, dan sertakan nol di depan. Perhatikan bahwa ini akan mempertahankan urutan asli ketika menyortir dari string terpendek ke string terpanjang. Balikkan semua baris terlebih dahulu jika Anda ingin mengurutkan terlama ke terpendek.

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

Langkah 2. Pad semua garis dengan spasi terkemuka.

Tempatkan kursor teks (garis vertikal) ke posisi paling pertama dari file. Kemudian di Editmenu pilih Column Editor...( Alt+ C). Masukkan ruang yang cukup sehingga garis data terpendek akan padded ke panjang garis data terpanjang. Jika garis terpendek Anda memiliki 4 karakter, dan terpanjang Anda 44, maka pastikan Anda memasukkan setidaknya 40 spasi.

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

Langkah 3. Pangkas garis dengan panjang yang seragam.

Gunakan Cari / Ganti Ekspresi Reguler berikut ( Ctrl+ H) untuk mencocokkan karakter kanan yang menyamai atau melebihi panjang garis data terpanjang Anda.

^.*(.{50})$

Ganti semua dengan $1. Itu akan memangkas segalanya kecuali 50 karakter paling kanan dari setiap baris. Jika data Anda lebih panjang (atau pendek) dari 50, sesuaikan {50}dalam Ekspresi Reguler.

(Catatan ditambahkan oleh barlop- ide di sini adalah garis terpendek memiliki spasi terbanyak di awal )

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

Langkah 4. Urutkan garis.

Pilih semua teks ( Ctrl+ A). Melalui menu TextFX, buka Text FX > TextFX Tools > Sort lines case sensitive (at column). Data Anda sekarang harus dalam urutan panjang, dari yang terpendek ke yang terpanjang. Jika Anda menginginkannya dalam urutan dari terpanjang ke terpendek, hapus centang Text FX > TextFX Tools > + Sort ascendingopsi sebelum mengurutkan. Perhatikan bagaimana nomor baris dibalik juga.

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

Langkah 5. Hapus spasi memimpin.

Gunakan Cari Ekspresi Reguler lainnya ( Ctrl+ H) untuk mencocokkan spasi terkemuka.

^ *\d{4}

Itu adalah ruang antara tanda sisipan dan tanda bintang. Ganti semua tanpa apa-apa. Itu akan menghapus semua spasi utama dan nomor baris yang dimasukkan, jika Anda memiliki nomor baris 4 digit. Ganti {4}dengan jumlah digit yang benar di nomor baris Anda.

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

MAKRO

Saya mencatat langkah-langkah di atas menggunakan fitur makro Notepad ++, dan tidak berfungsi. Saya tidak yakin langkah mana yang gagal, tetapi saya belum mendiagnosisnya. Anda mungkin dapat menggunakan Autohotkey untuk mengotomatisasi ini jika Anda melakukannya berulang kali.


2
Peringatan: ini bukan jenis yang stabil. Dengan kata lain, garis dengan panjang yang sama tidak akan muncul dalam urutan yang sama setelah penyortiran - sebagai gantinya, mereka akan diurutkan secara leksikografis.
Bob

@ Bob benar, jika Anda memiliki garis dengan panjang tertentu, seperti 33 karakter, yang memiliki urutan tertentu untuk mereka, itu tidak akan tercermin dalam hasil. Kami dapat menambahkan nomor baris dengan Alt + C sebelum langkah 1 (termasuk 0s terkemuka untuk memastikan bahwa panjangnya tetap sama). Kemudian, ketika membersihkan pada langkah 4, gunakan ^ *\d{5}atau berapa pun angka digit yang digunakan untuk nomor baris.
Dane

2
Jawabannya telah diperbarui untuk mempertahankan urutan pengurutan yang ada, dengan anggapan itu penting.
Dane

dane bagus untuk mengikuti apa yang dilakukan orang itu di video youtube, di mana ia juga menonaktifkan komentar. Bisakah Anda memasukkan tautan ke teks yang menurut Anda gagal, pada pastebin pastebin.com ? dan apakah itu gagal hanya dengan makro, atau secara manual juga?
barlop

1
Saya harus mengatakan, membaca jawaban Anda, saya hanya memahaminya ketika saya mencobanya. Saya pikir alasan mengapa Anda tidak memiliki lebih banyak suara, mungkin karena orang tidak mengerti logika. Apakah Anda mengizinkan saya untuk menambahkan penjelasan tentang logika, ke jawaban Anda, di awal?
barlop

3

Tidak, saya pikir tidak ada. Yang paling dekat adalah plugin TextFx tapi itu semacam karakter berdasarkan bukan panjang garis. Taruhan terbaik Anda adalah melempar teks ke dalam spreadsheet dan mengurutkannya di sana (menggunakan kolom yang dikomputasi terpisah menggunakan LEN()fungsi).


Terima kasih, file teks memiliki garis panjang dan ukuran total besar, jadi saya menyingkirkan editor spreadsheet. Biarkan Saya Memperbarui Pertanyaan.
hpaknia

@HPM dengan baik jika Anda ingin melihat di luar notepad ++ maka baris perintah akan melakukannya. seperti menggunakan beberapa perintah untuk mendapatkan panjang baris masing-masing ujung setiap baris. maka Anda setidaknya akan lebih dekat untuk melakukannya.
barlop

terima kasih, ini saran yang bagus. Yang saya ingin tahu tentang adalah NP ++ banyak plugin, mengapa yang ini tidak ada?
hpaknia

1

Anda dapat menggunakan SQL dalam N ++ dalam file CSV! Misalnya jika Anda memiliki:

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

, Anda dapat menjalankan perintah select * from data order by length(col1) descuntuk mengurutkan turun. "data" berarti file saat ini. "col1" - nama kolom pertama (dan terakhir).

Sayangnya mungkin ada bug yang tidak memungkinkan pembatas pembatas setelah baris dalam teks satu kolom.


Ini sebenarnya solusi yang bagus, jika saja SQL di N ++ tidak memotong-motong output data. Saya baru saja menguji solusi Anda, dan saya menambahkan pembatas pada akhir semua baris dengan penggantian regex cepat, tetapi output data mengubah segalanya menjadi huruf kecil, dan mengganti tanda hubung saya dengan tanda tanya.
Dane

@Dane (Saat ini saya tidak memiliki akses ke Notepad ++.) Mungkin coba tambahkan satu kutipan ke awal dan akhir setiap baris (dan kemudian titik koma setelah itu)? Mungkin tanda kutip ganda?
Bob

@ Bob: tidak bagus. Huruf kecil bahkan disebutkan dalam catatan rilis untuk SQL di plug-in N ++.
Dane

0

Atau jika Anda memiliki linux dan nedit:

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

Bukan hanya ini bukan pertanyaan yang diajukan, itu bahkan tidak berlaku untuk platform OS yang sama.
Caleb

itu masih merupakan jawaban yang bermanfaat. itu satu-satunya yang bekerja dengan baik untuk saya. dia memang menentukan bahwa Anda memerlukan linux dan nedit, jadi tidak ada masalah.
Anthony
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.