2012-01-10 27 views
46

Tôi có một vấn đề phổ biến mà tôi đang tìm kiếm giải pháp. Tôi có dòng văn bản tương tự Tôi muốn bằng cách nào đó tự động chèn văn bản để sắp xếp chúng theo chiều dọc ví dụ rằng:Tìm kiếm một cách dễ dàng để căn chỉnh văn bản

x="foo" data="123" y=x 
x="b 4" data="12 " y=x 
x="baaar4" data="123aaa5" y=x 
x="baaaa,4" data="123dddd5" y=x 

trở này

x="foo"  data="123"  y=x 
x="b 4" data="123 "  y=x 
x="baaar4" data="123aaa5" y=x 
x="baaaa,4" data="123dddd5" y=x 

Đây là một vấn đề văn bản. Đầu vào đến từ notepad. Đầu ra sẽ chuyển sang notepad. Đây không phải là vấn đề định dạng.

+0

có thể không sử dụng bảng? – j08691

+1

như thế nào? Những gì tôi có là văn bản trong notepad. Tôi có thể đưa dữ liệu vào cơ sở dữ liệu - tôi cho là vậy. Nhưng số lượng "cột" sẽ khác nhau mỗi lần. Những gì tôi muốn là để sao chép văn bản này dán vào một hộp đen, nhấn một nút, và được cho đầu ra. Tôi nghĩ rằng emacs đã có một cái gì đó như thế này. –

+0

Có vẻ như thẻ của bạn không chính xác, bạn có câu hỏi được gắn thẻ là html nhưng đang từ chối các đề xuất liên quan đến html. – Guvante

Trả lời

56

Notepad ++ có plugin làm điều này cho bạn. Nó được gọi là "Code alignment". Nó cho phép bạn sắp xếp văn bản theo chiều dọc dựa trên các ký tự bạn chọn. Bạn có thể cài đặt nó thông qua Trình quản lý Plugin cho notepad.

Dưới đây là một tình huống sử dụng đơn giản. Bạn bắt đầu với đoạn mã sau, sau đó bạn căn chỉnh theo "bằng" là một phím tắt/lệnh dựng sẵn cho plugin.

Initial Code Sample, without alignment

Sau đó, bạn kết thúc với những điều sau đây:

Code after equals alignment

Bạn cũng có thể mang nó một bước xa hơn và sử dụng "align bởi ..." lệnh cho phép bạn chỉ định bất kỳ chuỗi căn chỉnh tùy ý nào. Trong ví dụ bên dưới, tôi đã chọn ký tự "#" để sắp xếp các nhận xét của mình bên cạnh một ký tự khác. Điều này có thể cũng giống như dễ dàng có được một chuỗi dài hơn, và kết quả không phải là một chiều dài 1.

End dưới đây:

Final result after arbitrary code alignment string

+3

Điều này làm việc tốt đẹp và tốt hơn nhiều so với TextFX mà không phù hợp với không gian thêm. "Sắp xếp mã" thật tuyệt vời và chính xác những gì tôi cần để thụt lề một số mã Java dựa trên STRINGS! Không chỉ là một nhân vật. A ++++ cho bất cứ ai đã viết plugin. – Ligemer

+0

không hoạt động lần đầu tiên, nhưng sau khi sắp xếp theo 'khoảng trắng' ba lần, nó trông đủ tốt, cảm ơn – knocte

+0

Thật không may, tiện ích này không hoạt động cho tôi khi tôi cố gắng [căn chỉnh bằng dấu phẩy] (http: // i.imgur.com/FSNuY5r.png) –

0

Bạn không liệt kê một ngôn ngữ lập trình vì vậy đây là một số C# mà thực hiện các hoạt động yêu cầu:

int[] maxLengths = new int[100]; 
string[][] splitLines = new string[input.Length][]; 
for (int i = 0; i < input.Length; i++) 
{ 
    splitLines[i] = input[i].Split(' '); 
    for (int j = 0; j < splitLines[i].Length; j++) 
    { 
     maxLengths[j] = Math.Max(maxLengths[j], splitLines[i][j].Length); 
    } 
} 
for (int i = 0; i < splitLines.Length; i++) 
{ 
    for (int j = 0; j < splitLines[i].Length; j++) 
    { 
     Console.Write(string.Format("0,-" + (maxLengths[j] + 1) + ":G}", splitLines[i][j])); 
    } 
    Console.WriteLine(); 
} 

Lưu ý rằng 100 phải lớn hơn hoặc bằng số lượng các phân đoạn trên mỗi dòng. Bạn có thể khiến số đó không được sửa với một công việc nhỏ nếu bạn thích.

Về cơ bản thuật toán này tách từng dòng dựa trên khoảng trắng, sau đó cho mỗi phần tính toán giá trị tối đa thành một mảng chung. Cuối cùng, nó lặp qua tất cả các phần được phân đoạn này và in chúng ra bên trái, hợp lý bằng cách sử dụng dấu cách với kích thước lớn nhất (cộng 1 để lấy khoảng trống giữa các mục).

+0

đây là quá mức cần thiết. Văn bản nằm trong notepad ++ (đầu vào) và OP muốn văn bản được định dạng trong notepad ++ (đầu ra) –

+0

@anphu: Câu hỏi không bao gồm notepad ++ ở bất kỳ đâu trong đó. Notepad cung cấp hoàn toàn không có gì như thế này để chạm vào một chương trình khác nhau chắc chắn là cần thiết. Tôi đã xảy ra để viết để giao diện điều khiển nhưng bạn có thể tương đương viết vào tập tin bạn đọc từ và có được hiệu ứng tương tự. – Guvante

+0

câu hỏi được gắn thẻ dưới Notepad ++ –

26

Nếu bạn muốn sắp xếp bởi nhân vật cụ thể sử dụng Notepad ++ mở rộng TextFX.

Nhìn vào: TextFX> TextFX Edit> Đường dây lên nhiều dòng bằng (,)

Ngoài ra còn có: Đường dây lên nhiều dòng bằng (=), và đường lên nhiều dòng bằng cách (Clipboard Character)

Đây là liên kết để biết các mẹo hữu ích cho lập trình.

http://techbrij.com/518/10-notepad-tips-tricks-fast-development

+0

Mỗi khi tôi thử plugin chỉnh sửa mã, nó sẽ đóng băng notepad ++ và sau đó sẽ không làm bất cứ điều gì khi tiếp tục. TextFX hoạt động hoàn hảo. –

+0

Điều này cũng làm việc cho tôi, sao chép một kết quả TSQL đặt thành notepad ++ (trong đó tab-tách). Tôi đã có thể xếp hàng khoảng 400 hàng bởi 50 cột. Tuy nhiên, TextFX sẽ không nhận ra tab là một ký tự clipboard, và nó thậm chí sẽ không chấp nhận "\ t", nhưng may thay tôi có thể thay thế các tab bằng dấu phẩy, xếp hàng theo cột, sau đó thay đổi lại dấu phẩy (may mắn thay, không có tab hoặc dấu phẩy nào trong đầu ra sql của tôi!) –

+0

TextFX là một plugin tốt nhưng sắp xếp theo '=' kết quả không có khoảng trắng phía trước giữa '=' và các ký tự trước đó. – u01jmg3

0

tôi đã tạo ra một Script Python có thể được sử dụng với Python Script Plugin trong Notepad ++: nppPyAlignColumn

+0

Xin chào, DUzun. Kịch bản của bạn có vẻ tuyệt vời. Tuy nhiên, tôi gặp sự cố khi cài đặt. Sau khi tôi làm tất cả mọi thứ, không có gì trong menu "script", có thể nó không tương thích với phiên bản mới nhất của notepad ++ ?? – user15964

+0

Nếu bạn không có tệp 'doLocalConf.xml' trong thư mục của NPP, hãy sao chép' AlignColumns.py' vào '% APPDATA% \ Notepad ++ \ plugins \ Config \ PythonScript \ scripts \' thay thế. – DUzun

Các vấn đề liên quan