ฉันจะเรียงลำดับบรรทัดในไฟล์ข้อความตามความยาวของแต่ละบรรทัดใน Notepad ++ ได้อย่างไร


13

ฉันจะจัดเรียงไฟล์ข้อความตามความยาวบรรทัดใน notepad ++ ได้อย่างไร มีปลั๊กอินสำหรับงานดังกล่าวหรือไม่?
ในกรณีที่ไม่มีปลั๊กอิน, การสอนครั้งแรกและครั้งที่สองคืออะไร, ในการเขียนปลั๊กอินตัวเอง?


1
คุณก็รู้ว่าบางครั้งมันก็เป็นการดีที่สุดที่จะเขียนโค้ดและทำความเข้าใจกับมัน
Daniel R Hicks

คุณกำลังจัดการกับไฟล์ขนาดเล็กหรือใหญ่?
ComFreek

ไฟล์ 50 MB ที่มีบรรทัดยาวความยาวประมาณ 250 KB
hpaknia

ข้อมูลมีความละเอียดอ่อนหรือไม่? หรือคุณแบ่งปันกับ Dropbox / Google-Drive / etc หาก Notepad ++ สามารถเปิดและจัดการไฟล์นั้นฉันจะจินตนาการว่าโซลูชันของฉันจะทำงานได้ แต่ฉันชอบที่จะลองด้วยตัวเอง
Dane

เฮ้ @HPM มีโอกาสได้ทำงานกับข้อมูลของคุณไหม?
Dane

คำตอบ:


6

คำตอบนี้เป็นแรงบันดาลใจจากวิดีโอ YouTube อัปเดตเพื่อรักษาลำดับการจัดเรียงดั้งเดิมหากเป็นสิ่งสำคัญ

Notepad ++ มีเครื่องมือ TextFX ในตัวที่เรียงลำดับบรรทัดที่เลือกตามตัวอักษร เครื่องมือนี้สามารถถูกแย่งชิงเพื่อจัดเรียงตามความยาวของบรรทัดโดยการเว้นช่องว่างทางด้านซ้ายของแต่ละบรรทัดและตรวจสอบให้แน่ใจว่าบรรทัดทั้งหมดมีความยาวเท่ากัน

"สวนสัตว์" มาตามลำดับตัวอักษรก่อน "บ้านของพวกเขา" เพราะพื้นที่จะถือว่าเป็นตัวละครและมาก่อน "ฉัน" __X(ทำท่าขีดจริงๆช่องว่าง) _XXในทำนองเดียวกันจะมาตามลำดับตัวอักษรก่อน ความคิดในคำตอบนี้คือการเพิ่มช่องว่างและหมายเลขบรรทัดเพื่อที่จะเรียงลำดับข้างต้น__________092dog_003alligator

ฉันจะใช้ข้อมูลตัวอย่างต่อไปนี้:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

ขั้นตอนที่ 1 เพิ่มหมายเลขบรรทัด

(หมายเหตุเพิ่มโดย barlop- หมายเหตุสำหรับผู้อ่านเกี่ยวกับขั้นตอนนี้เราจะไม่เรียงลำดับตามหมายเลขบรรทัดเหล่านี้เรากำลังจัดเรียงตามความยาวของบรรทัด แต่เหตุผลในการเพิ่มหมายเลขบรรทัดคือเรา รู้ลำดับธรรมชาติดังนั้นเมื่อตัวอย่างสองเส้นมีความยาวเท่ากันเราสามารถเรียงลำดับเส้นเหล่านั้นตามลำดับธรรมชาตินั้น)

สมมติว่าไฟล์ข้อความของคุณมีข้อมูลอยู่ในนั้นให้วางเคอร์เซอร์ข้อความ (เส้นแนวตั้ง) ลงในตำแหน่งแรกสุดของไฟล์ จากนั้นในEditเมนูให้เลือกColumn Editor...( Alt+ C) เลือก "จำนวนที่จะแทรก" และเริ่มต้นด้วย 1 เพิ่มขึ้น 1 และรวมศูนย์นำ โปรดทราบว่าสิ่งนี้จะรักษาลำดับเดิมเมื่อเรียงลำดับจากสตริงที่สั้นที่สุดไปยังสตริงที่ยาวที่สุด ย้อนกลับทุกบรรทัดก่อนถ้าคุณต้องการเรียงลำดับที่ยาวที่สุดถึงสั้นที่สุด

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

ขั้นตอนที่ 2 Pad ทุกบรรทัดด้วยช่องว่างนำหน้า

วางเคอร์เซอร์ข้อความ (เส้นแนวตั้ง) ลงในตำแหน่งแรกสุดของไฟล์ จากนั้นใน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

MACRO

ฉันบันทึกขั้นตอนข้างต้นโดยใช้คุณสมบัติมาโครของ Notepad ++ และไม่สามารถใช้งานได้ ฉันไม่แน่ใจว่าขั้นตอนใดจะล้มเหลว แต่ฉันไม่ได้วิเคราะห์สาเหตุ คุณอาจใช้ AutoHotKey เพื่อทำสิ่งนี้โดยอัตโนมัติหากคุณทำซ้ำ ๆ


2
คำเตือน: นี่ไม่ใช่การเรียงที่มั่นคง กล่าวอีกนัยหนึ่งบรรทัดที่มีความยาวเท่ากันจะไม่จำเป็นต้องปรากฏในลำดับเดียวกันหลังจากเรียงลำดับ - แต่จะเรียงลำดับตามคำศัพท์แทน
บ๊อบ

@Bob นั้นถูกต้องหากคุณมีบรรทัดที่มีความยาวที่กำหนดเช่น 33 ตัวอักษรที่มีคำสั่งเฉพาะสำหรับพวกเขานั่นจะไม่ปรากฏในผลลัพธ์ เราสามารถเพิ่มหมายเลขบรรทัดด้วย Alt + C ก่อนขั้นตอนที่ 1 (รวมถึงเลข 0 นำหน้าเพื่อให้แน่ใจว่าความยาวยังคงเท่าเดิม) จากนั้นเมื่อล้างข้อมูลในขั้นตอนที่ 4 จะใช้^ *\d{5}หรือใช้ตัวเลขจำนวนเท่าใดก็ได้สำหรับหมายเลขบรรทัด
ชาวเดนมาร์ก

2
คำตอบได้รับการปรับปรุงเพื่อรักษาลำดับการจัดเรียงที่มีอยู่สมมติว่ามีความสำคัญ
ชาวเดนมาร์ก

nice one dane สำหรับการติดตามสิ่งที่ผู้ชายในวิดีโอ youtube กำลังทำอยู่ซึ่งเขายังปิดการใช้งานความคิดเห็นด้วย คุณสามารถมีการเชื่อมโยงกับข้อความที่คุณคิดว่ามันล้มเหลวบน Pastebin pastebin.com ? และมันล้มเหลวเฉพาะกับแมโครหรือด้วยตนเอง?
barlop

1
ฉันต้องบอกว่าอ่านคำตอบของคุณฉันเข้าใจเมื่อฉันลองเท่านั้น ฉันคิดว่าเหตุผลที่คุณไม่ได้รับคะแนนมากขึ้นอาจเป็นเพราะผู้คนไม่เข้าใจตรรกะ คุณช่วยให้ฉันเพิ่มคำอธิบายของตรรกะในคำตอบของคุณได้หรือไม่?
barlop

3

ไม่ฉันไม่คิดว่าจะมี ที่ใกล้เคียงที่สุดคือปลั๊กอิน TextFx แต่นั่นคือการจัดเรียงอักขระตามความยาวบรรทัด ทางออกที่ดีที่สุดของคุณคือการโยนข้อความลงในสเปรดชีตและเรียงลำดับที่นั่น (ใช้คอลัมน์ที่คำนวณแยกต่างหากโดยใช้LEN()ฟังก์ชัน)


ขอบคุณไฟล์ข้อความมีขนาดยาวและมีขนาดใหญ่มากดังนั้นฉันจึงวางบรรณาธิการสเปรดชีตไว้ ให้ฉันอัพเดตคำถาม
hpaknia

@HPM ดีถ้าคุณยินดีที่จะดูนอก notepad ++ จากนั้นบรรทัดคำสั่งจะทำมัน เช่นใช้คำสั่งบางคำสั่งเพื่อให้ได้ความยาวของบรรทัดแต่ละจุดสิ้นสุดของแต่ละบรรทัด อย่างน้อยคุณก็ใกล้จะทำอย่างนั้น
barlop

ขอบคุณมันเป็นคำแนะนำที่ดี สิ่งที่ฉันอยากรู้คือ NP ++ ปลั๊กอินหลายตัวทำไมจึงไม่มีปลั๊กอินนี้
hpaknia

1

คุณสามารถใช้SQL ใน N ++ในไฟล์ CSV! ตัวอย่างเช่นถ้าคุณมี:

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

คุณสามารถดำเนินการคำสั่งselect * from data order by length(col1) descเพื่อเรียงจากมากไปน้อย "data" หมายถึงไฟล์ปัจจุบัน "col1" - ชื่อของคอลัมน์แรก (และสุดท้าย)

น่าเสียดายที่มีข้อผิดพลาดที่ไม่อนุญาตให้มีตัวคั่นทิ้งหลังจากบรรทัดในข้อความแบบคอลัมน์เดียว


นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมหาก SQL ใน N ++ เท่านั้นที่ไม่ทำให้ข้อมูลเสียหาย ฉันเพิ่งทดสอบโซลูชันของคุณและเพิ่มตัวคั่นไปยังจุดสิ้นสุดของทุกบรรทัดด้วยการแทนที่ regex อย่างรวดเร็ว แต่เอาต์พุตข้อมูลแปลงทุกอย่างเป็นตัวพิมพ์เล็กและเปลี่ยนเครื่องหมายขีดคั่นของฉันด้วยเครื่องหมายคำถาม
ชาวเดนมาร์ก

@Dane (ฉันยังไม่สามารถเข้าถึง Notepad ++ ได้ในปัจจุบัน) บางทีลองเพิ่มเครื่องหมายคำพูดเดี่ยวไปที่จุดเริ่มต้นและจุดสิ้นสุดของทุกบรรทัด (และจากนั้นเครื่องหมายอัฒภาคหลังจากนั้น)? บางทีคำพูดคู่?
บ๊อบ

@ บ๊อบ: ไม่ดี สิ่งที่เป็นตัวพิมพ์เล็กถูกกล่าวถึงในบันทึกย่อประจำรุ่นสำหรับ SQL ในปลั๊กอิน N ++
ชาวเดนมาร์ก

0

หรือถ้าคุณมี linux และ nedit:

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

ไม่เพียง แต่ไม่ใช่สิ่งที่คำถามถามเท่านั้นมันไม่สามารถใช้กับแพลตฟอร์ม OS เดียวกันได้
Caleb

มันยังคงเป็นคำตอบที่เป็นประโยชน์ มันเป็นสิ่งเดียวที่ทำงานได้ดีสำหรับฉัน เขาระบุว่าคุณต้องการ linux และ nedit ดังนั้นจึงไม่มีปัญหา
แอนโธนี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.