Làm cách nào tôi có thể sắp xếp các dòng trong tệp văn bản, theo độ dài của mỗi dòng, trong Notepad ++?


13

Làm cách nào tôi có thể sắp xếp tệp văn bản theo độ dài dòng trong notepad ++? Có bất kỳ plugin có sẵn cho các nhiệm vụ được đề cập?
Trong trường hợp không có plugin, hướng dẫn đầu tiên và có thể là thứ hai để đọc là gì, để tự viết plugin?


1
Bạn biết đấy, đôi khi tốt nhất là chỉ viết một số mã và hoàn thành nó.
Daniel R Hicks

Bạn đang xử lý các tập tin nhỏ hay lớn?
ComFalet

Tệp 50 MB với các dòng dài, độ dài khoảng 250 KB.
hpaknia

Là dữ liệu nhạy cảm? Hoặc bạn có thể chia sẻ nó trên Dropbox / Google-Drive / v.v.? Nếu Notepad ++ có thể mở và xử lý tệp đó, tôi sẽ tưởng tượng rằng giải pháp của mình sẽ hoạt động, nhưng tôi muốn tự mình dùng thử.
Dane

Này @HPM, có cơ hội nào để làm việc với dữ liệu của bạn không?
Dane

Câu trả lời:


6

Câu trả lời này được lấy cảm hứng từ một video YouTube . Cập nhật để duy trì thứ tự sắp xếp ban đầu, nếu đó là quan trọng.

Notepad ++ có một công cụ TextFX tích hợp sắp xếp các dòng được chọn theo thứ tự bảng chữ cái. Công cụ này có thể được tấn công để sắp xếp theo độ dài của các dòng bằng cách đặt khoảng trắng ở bên trái của mỗi dòng và đảm bảo rằng tất cả các dòng có cùng độ dài.

"Sở thú" xuất hiện theo thứ tự abc trước "Ngôi nhà của họ" bởi vì không gian được coi là một nhân vật và đến trước "i". __X(giả vờ các dấu gạch dưới là không gian thực sự) sẽ tương tự đến theo thứ tự abc trước đó _XX. Ý tưởng trong câu trả lời này là thêm khoảng trắng và số dòng để __________092dogđược sắp xếp ở trên _003alligator.

Tôi sẽ sử dụng dữ liệu ví dụ sau:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

Bước 1. Thêm số dòng.

(Lưu ý được thêm bởi barlop- một lưu ý cho người đọc về bước này, chúng tôi sẽ không sắp xếp theo các số dòng này, chúng tôi sắp xếp theo độ dài của các dòng. Nhưng lý do để thêm số dòng, là vì vậy chúng tôi biết thứ tự tự nhiên, ví dụ như khi hai dòng + có độ dài bằng nhau, chúng ta có thể sắp xếp các dòng đó theo thứ tự tự nhiên đó)

Giả sử tệp văn bản của bạn chỉ có dữ liệu trong đó, đặt con trỏ văn bản (dòng dọc) vào vị trí đầu tiên của tệp. Sau đó trong Editmenu chọn Column Editor...( Alt+ C). Chọn "Số để chèn" và bắt đầu bằng 1, tăng 1 và bao gồm các số 0 đứng đầu. Lưu ý rằng điều này sẽ giữ lại thứ tự ban đầu khi sắp xếp từ chuỗi ngắn nhất đến chuỗi dài nhất. Đảo ngược tất cả các dòng đầu tiên nếu bạn muốn sắp xếp dài nhất đến ngắn nhất.

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

Bước 2. Pad tất cả các dòng với không gian hàng đầu.

Đặt con trỏ văn bản (dòng dọc) vào vị trí đầu tiên của tệp. Sau đó trong Editmenu chọn Column Editor...( Alt+ C). Chèn đủ khoảng trống để dòng dữ liệu ngắn nhất sẽ được đệm theo chiều dài của dòng dữ liệu dài nhất. Nếu dòng ngắn nhất của bạn có 4 ký tự và 44 ký tự dài nhất của bạn, thì hãy đảm bảo bạn chèn ít nhất 40 khoảng trắng.

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

Bước 3. Cắt đường thẳng đến một chiều dài đồng đều.

Sử dụng Tìm / Thay thế biểu thức chính quy sau đây ( Ctrl+ H) để khớp với các ký tự bên phải bằng hoặc vượt quá độ dài của dòng dữ liệu dài nhất của bạn.

^.*(.{50})$

Thay thế tất cả bằng $1. Điều đó sẽ cắt mọi thứ trừ 50 ký tự bên phải của mỗi dòng. Nếu dữ liệu của bạn dài hơn (hoặc ngắn) hơn 50, hãy điều chỉnh {50}Biểu thức thông thường.

(Lưu ý được thêm bởi barlop- ý tưởng ở đây là các dòng ngắn nhất có nhiều khoảng trống nhất ở đầu )

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

Bước 4. Sắp xếp các dòng.

Chọn tất cả các văn bản ( Ctrl+ A). Thông qua menu TextFX, đi đến Text FX > TextFX Tools > Sort lines case sensitive (at column). Bây giờ dữ liệu của bạn phải theo thứ tự độ dài, từ ngắn nhất đến dài nhất. Nếu bạn muốn chúng theo thứ tự từ dài nhất đến ngắn nhất, bỏ Text FX > TextFX Tools > + Sort ascendingchọn tùy chọn trước khi sắp xếp. Lưu ý cách số dòng được đảo ngược là tốt.

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

Bước 5. Loại bỏ không gian hàng đầu.

Sử dụng Tìm / Thay thế biểu thức chính quy khác ( Ctrl+ H) để khớp với các khoảng trắng hàng đầu.

^ *\d{4}

Đó là khoảng trống giữa dấu mũ và dấu hoa thị. Thay thế tất cả bằng không có gì. Điều đó sẽ loại bỏ tất cả các khoảng trắng hàng đầu và số dòng được chèn, nếu bạn có số dòng gồm 4 chữ số. Thay thế {4}bằng số chữ số chính xác trong số dòng của bạn.

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

MACRO

Tôi đã ghi lại các bước trên bằng tính năng macro của Notepad ++ và nó không hoạt động. Tôi không chắc bước nào thất bại, nhưng tôi không chẩn đoán được tại sao. Bạn có thể có thể sử dụng AutoHotKey để tự động hóa việc này nếu bạn làm điều đó nhiều lần.


2
Cảnh báo: đây không phải là một loại ổn định. Nói cách khác, các dòng có cùng độ dài sẽ không nhất thiết phải xuất hiện theo cùng một thứ tự sau khi sắp xếp - thay vào đó, chúng sẽ được sắp xếp theo từ vựng.
Bob

@Bob là chính xác, nếu bạn có các dòng có độ dài nhất định, chẳng hạn như 33 ký tự, có thứ tự cụ thể cho chúng, điều đó sẽ không được phản ánh trong kết quả. Chúng tôi có thể thêm số dòng bằng Alt + C trước bước 1 (bao gồm số 0 đứng đầu để đảm bảo độ dài vẫn bằng nhau). Sau đó, khi dọn dẹp ở bước 4, sử dụng ^ *\d{5}hoặc bất kỳ số chữ số nào đã được sử dụng cho các số dòng.
Dane

2
Câu trả lời đã được cập nhật để giữ lại thứ tự sắp xếp hiện có, giả sử đó là quan trọng.
Dane

Rất vui vì đã làm theo những gì anh chàng trong video youtube đang làm, nơi anh ta cũng vô hiệu hóa bình luận. Bạn có thể bao gồm một liên kết đến văn bản mà bạn nghĩ rằng nó thất bại, trên pastebin pastebin.com ? và nó đã thất bại chỉ với macro, hay thủ công?
barlop

1
Tôi phải nói rằng, đọc câu trả lời của bạn, tôi chỉ hiểu nó khi tôi thử nó. Tôi nghĩ một lý do tại sao bạn không có nhiều phiếu bầu hơn, có thể là mọi người chưa hiểu logic. Bạn có cho phép tôi thêm một lời giải thích về logic, vào câu trả lời của bạn ngay từ đầu không?
barlop

3

Không, tôi không nghĩ là có. Gần nhất là plugin TextFx nhưng đó là một loại ký tự không dựa trên độ dài dòng. Đặt cược tốt nhất của bạn là ném văn bản vào một bảng tính và sắp xếp nó ở đó (sử dụng một cột được tính riêng bằng cách sử dụng LEN()hàm).


Cảm ơn, tệp văn bản có dòng dài và tổng kích thước lớn, vì vậy tôi đặt trình chỉnh sửa bảng tính đi. Hãy để tôi cập nhật câu hỏi.
hpaknia

@HPM tốt nếu bạn muốn xem bên ngoài notepad ++ thì dòng lệnh sẽ làm điều đó. như sử dụng một số lệnh để có được độ dài của mỗi dòng ở cuối mỗi dòng. sau đó ít nhất bạn sẽ gần hơn để làm điều đó.
barlop

cảm ơn, đó là một lời khuyên tốt Điều tôi tò mò là NP ++ có rất nhiều plugin, tại sao cái này không tồn tại?
hpaknia

1

Bạn có thể sử dụng SQL trong N ++ trong các tệp CSV! Ví dụ: nếu bạn có:

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

, bạn có thể thực thi lệnh select * from data order by length(col1) descđể sắp xếp giảm dần. "dữ liệu" có nghĩa là tập tin hiện tại. "col1" - tên của cột đầu tiên (và cuối cùng).

Thật không may, có thể có lỗi không cho phép từ bỏ dấu phân cách sau các dòng trong văn bản một cột.


Đây thực sự là một giải pháp tuyệt vời, nếu chỉ có SQL trong N ++ không thu được dữ liệu đầu ra. Tôi vừa thử nghiệm giải pháp của bạn và tôi đã thêm các dấu phân cách vào cuối tất cả các dòng bằng cách thay thế regex nhanh, nhưng đầu ra dữ liệu chuyển đổi mọi thứ thành chữ thường và thay thế dấu gạch ngang của tôi bằng dấu chấm hỏi.
Dane

@Dane (Hiện tại tôi không có quyền truy cập vào Notepad ++.) Có lẽ hãy thử thêm một trích dẫn vào đầu và cuối của mỗi dòng (và sau đó là dấu chấm phẩy sau đó)? Có thể báo giá gấp đôi?
Bob

@Bob: không tốt. Điều viết thường thậm chí còn được đề cập trong các ghi chú phát hành cho SQL trong trình cắm thêm N ++.
Dane

0

Hoặc nếu bạn có linux và nedit:

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

Đây không chỉ là những gì câu hỏi được hỏi, nó thậm chí không thể áp dụng cho cùng một nền tảng hệ điều hành.
Caleb

nó vẫn là một câu trả lời hữu ích đó là người duy nhất làm việc tốt với tôi anh ấy đã xác định rằng bạn cần linux và nedit, vì vậy không có vấn đề gì.
Anthony
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.