Notepad ++ uygulamasındaki metin dosyasındaki satırları her satırın uzunluğuna göre nasıl sıralayabilirim?


13

Bir metin dosyasını notepad ++ ile satır uzunluğuna göre nasıl sıralayabilirim? Bahsedilen görev için herhangi bir eklenti var mı?
Eklenti olmaması durumunda, okunacak ilk ve belki ikinci öğretici nedir, Eklentiyi kendim yazmak için?


1
Bilirsiniz, bazen en iyisi sadece bir kod yazmak ve üstesinden gelmek.
Daniel R Hicks

Küçük veya büyük dosyalarla mı uğraşıyorsunuz?
ComFreek

Uzun satırlı, yaklaşık 250 KB uzunluğunda 50 MB dosya.
hpaknia

Veriler hassas mı? Veya Dropbox / Google-Drive / vb. Notepad ++ bu dosyayı açabilir ve işleyebilirse, çözümümün işe yarayacağını hayal ederdim, ancak kendim denemek isterim.
Dane

Hey @HPM, verileriniz üzerinde çalışmaya başlama şansınız var mı?
Dane

Yanıtlar:


6

Bu yanıttan bir YouTube videosu esinlenmiştir . Önemli ise orijinal sıralama düzenini korumak için güncellendi.

Notepad ++, seçili satırları alfabetik olarak sıralayan yerleşik bir TextFX aracına sahiptir. Bu araç, her satırın soluna boşluklar yerleştirerek ve tüm satırların aynı uzunlukta olduğundan emin olarak satırların uzunluğuna göre sıralamak için ele geçirilebilir.

"Hayvanat Bahçesi" alfabetik olarak "Evlerinden" önce gelir çünkü boşluk bir karakter olarak kabul edilir ve "i" den önce gelir. __X(alt çizgilerin gerçekten boşluk olduğunu iddia etmek) benzer şekilde daha önce alfabetik olarak gelir _XX. Bu yanıttaki fikir, __________092dogyukarıda sıralanacak şekilde boşluklar ve satır numaraları eklemektir _003alligator.

Örnek veriler olarak aşağıdakileri kullanacağım:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

Adım 1. Satır numaraları ekleyin.

(Barlop tarafından eklenen not - bu adımla ilgili okuyucu için bir not, bu satır numaralarına göre sıralamayacağız, satırların uzunluğuna göre sıralıyoruz. Ancak satır numaralarını eklemenin nedeni, doğal düzeni bilin, böylece iki + çizgi eşit uzunlukta olduğunda bu çizgileri o doğal düzene göre sıralayabiliriz)

Metin dosyanızın yalnızca içinde veri olduğunu varsayarsak, metin imlecini (dikey çizgi) dosyanın ilk konumuna getirin. Ardından Editmenüde Column Editor...( Alt+ C) öğesini seçin . "Eklenecek Sayı" yı seçin ve 1 ile başlayın, 1 artırın ve baştaki sıfırları ekleyin. Bunun, en kısa dizeden en uzun dizeye sıralarken orijinal sıralamayı koruyacağını unutmayın. En uzun veya en kısa sıralamak istiyorsanız önce tüm satırları ters çevirin .

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

Adım 2. Tüm satırları önde gelen boşluklarla doldurun.

Metin imlecini (dikey çizgi) dosyanın ilk konumuna getirin. Ardından Editmenüde Column Editor...( Alt+ C) öğesini seçin . En kısa veri satırının en uzun veri satırının uzunluğuna kadar dolması için yeterli boşluk yerleştirin. En kısa satırınızda 4 karakter ve en uzun 44 karakter varsa, en az 40 boşluk eklediğinizden emin olun.

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

Adım 3. Çizgileri eşit uzunlukta kesin.

En uzun veri satırınızın uzunluğuna eşit veya bu uzunluğu aşan sağdaki karakterlerle eşleşmek için aşağıdaki Normal İfade Bul / Değiştir ( Ctrl+ H) kullanın.

^.*(.{50})$

Tümünü değiştirin $1. Bu, her satırın en sağdaki 50 karakteri hariç her şeyi keser. Verileriniz 50'den uzun (veya kısa) ise {50}, Normal İfadedeki değeri ayarlayın .

(Barlop tarafından eklenen not - buradaki fikir, en kısa satırların başında en fazla boşluğa sahip olmasıdır )

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

Adım 4. Çizgileri sıralayın.

Metnin tamamını seçin ( Ctrl+ A). TextFX menüsü aracılığıyla adresine gidin Text FX > TextFX Tools > Sort lines case sensitive (at column). Verileriniz artık en kısatan en uzağa doğru uzun bir sırada olmalıdır. Bunları en uzuntan en kısaa doğru Text FX > TextFX Tools > + Sort ascendingsıralamak istiyorsanız, sıralamadan önce seçeneğin işaretini kaldırın . Satır numaralarının nasıl tersine çevrildiğine de dikkat edin.

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

Adım 5. Öndeki boşlukları kaldırın.

Baştaki boşluklarla eşleştirmek için başka bir Normal İfade Bul / Değiştir ( Ctrl+ H) kullanın.

^ *\d{4}

Bu, düzeltme işareti ve yıldız işareti arasındaki bir boşluk. Hepsini hiçbir şeyle değiştirmeyin. 4 basamaklı satır numaralarınız varsa, tüm önde gelen boşlukları ve eklenen satır numaralarını kaldıracaktır. Satırını, {4}satır numaralarınızda doğru sayıda basamakla değiştirin .

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

MAKRO

Notepad ++ 'ın makro özelliğini kullanarak yukarıdaki adımları kaydettim ve çalışmıyor. Hangi adımın başarısız olduğundan emin değilim, ama nedenini teşhis etmedim. AutoHotKey'i tekrar tekrar yaparsanız bunu otomatikleştirmek için muhtemelen kullanabilirsiniz.


2
Uyarı: Bu kararlı bir tür değildir. Başka bir deyişle, aynı uzunlukta satırlar sıralamadan sonra aynı sırada görünmeyecektir - bunun yerine sözlükbilimsel olarak sıralanacaktır.
Bob

@Bob doğrudur, 33 karakter gibi, belirli bir sıraya sahip belirli bir uzunlukta satırlarınız varsa, sonuçlara yansıtılmaz. Adım 1'den önce satır numaralarını Alt + C ile ekleyebiliriz (uzunlukların eşit kalmasını sağlamak için baştaki 0'lar dahil). Daha sonra, 4. adımda temizlik yaparken ^ *\d{5}, satır numaraları için veya herhangi bir sayıda basamak kullanın .
Dane

2
Cevap, önemli olduğu varsayılarak, mevcut sıralama düzenini korumak üzere güncellendi.
Dane

youtube video o adam ne yaptığını takip için güzel bir dane, o da yorumları devre dışı. Pastebin pastebin.com'a başarısız olduğunu düşündüğünüz bir metin bağlantısı ekleyebilir misiniz ? sadece makroda mı yoksa manuel olarak da mı başarısız oldu?
barlop

1
Söylemeliyim ki, cevabınızı okuyarak, sadece denediğimde anladım. Sanırım daha fazla oy almamanızın bir nedeni, insanların mantığı anlamamış olması olabilir. En başta cevabınıza mantığın bir açıklamasını eklememe izin verir misiniz?
barlop

3

Hayır olduğunu düşünmüyorum. En yakın olan TextFx eklentisidir ancak bu satır uzunluğu değil, karakter tabanlı bir sıralamadır. En iyi seçeneğiniz, metni bir e-tabloya atmak ve orada sıralamaktır ( LEN()işlevi kullanarak ayrı bir hesaplanmış sütun kullanarak ).


Teşekkürler, metin dosyasının uzun satırları ve büyük toplam boyutu var, bu yüzden elektronik tablo editörlerini kaldırdım. Soruyu Güncelleştireyim.
hpaknia

@HPM iyi eğer notepad ++ dışına bakmak istiyorsanız o zaman komut satırı yapardı. her satırın sonunda satırın uzunluğunu elde etmek için bazı komutları kullanmak gibi. en azından bunu yapmaya daha yakın olacaksınız.
barlop

teşekkürler, bu iyi bir tavsiye. Merak ettiğim şey NP ++ birçok eklentisi, neden bu yok?
hpaknia

1

CSV dosyalarında N ++ 'ta SQL kullanabilirsiniz ! Örneğin:

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

, select * from data order by length(col1) descazalan sıralama için komut yürütebilirsiniz . "data", geçerli dosya anlamına gelir. "col1" - ilk (ve son) sütunun adı.

Ne yazık ki, tek sütunlu metindeki satırlardan sonra ayırıcı ayırmaya izin vermeyen bir hata var.


Sadece N ++ 'da SQL veri çıkışını değiştirmezse, bu gerçekten harika bir çözümdür. Çözümünüzü test ettim ve hızlı bir regex değiştirme ile tüm satırların sonuna sınırlayıcılar ekledim, ancak veri çıkışı her şeyi küçük harfe dönüştürdü ve tire işaretleriimi soru işaretleriyle değiştirdi.
Dane

@Dane (Şu anda Notepad ++ 'a erişemiyorum.) Belki de her satırın başına ve sonuna tek bir alıntı eklemeyi deneyin (ve bundan sonra noktalı virgül)? Belki çift tırnak?
Bob

@Bob: iyi değil. Küçük harfli şey, N ++ eklentisindeki SQL sürüm notlarında bile belirtilmiştir.
Dane

0

Veya linux ve nedit'iniz varsa:

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

Soru sadece bu değil, aynı işletim sistemi platformu için de geçerli değildir.
Caleb

hala yararlı bir cevap. benim için iyi çalışan tek kişi oydu. linux ve nedit'e ihtiyacınız olduğunu belirtti, bu yüzden sorun yok.
Anthony
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.