메모장 ++에서 텍스트 파일의 줄을 줄 길이별로 정렬하려면 어떻게해야합니까?


13

notepad ++에서 텍스트 파일을 줄 길이별로 정렬하려면 어떻게해야합니까? 언급 된 작업에 사용 가능한 플러그인이 있습니까?
플러그인이없는 경우, 플러그인 Myself를 작성하기 위해 읽을 첫 번째 및 두 번째 학습서가 무엇입니까?


1
때로는 코드를 작성하고 끝내는 것이 가장 좋습니다.
다니엘 R cks

작거나 큰 파일을 다루고 있습니까?
ComFreek

약 250KB 길이의 긴 행이있는 50MB 파일
hpaknia

데이터가 민감합니까? 아니면 Dropbox / Google-Drive / etc에서 공유 할 수 있습니까? Notepad ++가 해당 파일을 열고 처리 할 수 ​​있다면 솔루션이 작동한다고 생각하지만 직접 사용 해보고 싶습니다.
데인

@HPM, 데이터 작업 기회가 있습니까?
데인

답변:


6

이 답변은 YouTube 비디오에서 영감을 얻었습니다 . 중요한 경우 원래 정렬 순서를 유지하도록 업데이트되었습니다.

메모장 ++에는 선택한 줄을 알파벳순으로 정렬하는 내장 TextFX 도구가 있습니다. 이 도구는 각 줄의 왼쪽에 공백을 배치하고 모든 줄의 길이가 동일한 지 확인하여 줄 길이를 기준으로 정렬 할 수 있습니다.

공간은 문자로 취급되고 "i"앞에 오기 때문에 "동물원"은 "그들의 집"앞에 알파벳순으로옵니다. __X(밑줄은 실제로 공백 인 것처럼) 알파벳순으로옵니다 _XX. 이 답변의 아이디어는 공백과 줄 번호를 추가하여 __________092dog위에 정렬 되도록하는 것 _003alligator입니다.

다음을 예제 데이터로 사용하겠습니다.

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

1 단계. 줄 번호를 추가하십시오.

(이 단계와 관련하여 독자를위한 참고 사항 인 barlop-에 의해 추가 된 메모는이 행 번호에 따라 정렬되지 않고 행 길이에 따라 정렬됩니다. 그러나 행 번호를 추가하는 이유는 예를 들어, 두 개의 + 행이 같은 길이 일 때 해당 자연 순서에 따라 해당 행을 정렬 할 수 있도록 자연 순서를 알 수 있습니다.)

텍스트 파일에 데이터 만 있다고 가정하면 텍스트 커서 (세로선)를 파일의 첫 번째 위치에 놓습니다. 그런 다음 Edit메뉴에서 Column Editor...( Alt+ C)를 선택하십시오 . "삽입 할 숫자"를 선택하고 1부터 시작하여 1 씩 증가하고 앞에 오는 0을 포함하십시오. 가장 짧은 문자열에서 가장 긴 문자열로 정렬 할 때 원래 순서대로 유지됩니다. 가장 길거나 짧게 정렬하려면 모든 줄을 먼저 뒤집으십시오.

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

2 단계. 모든 줄을 선행 공백으로 채 웁니다.

텍스트 커서 (세로선)를 파일의 첫 번째 위치에 놓습니다. 그런 다음 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

매크로

메모장 ++의 매크로 기능을 사용하여 위의 단계를 기록했지만 작동하지 않습니다. 어떤 단계가 실패했는지 확실하지 않지만 그 이유를 진단하지 못했습니다. 반복적으로 수행하면 AutoHotKey를 사용하여이를 자동화 할 수 있습니다.


2
경고 : 이것은 안정적인 정렬이 아닙니다. 다시 말해서, 같은 길이의 줄은 정렬 후에 반드시 같은 순서로 나타날 필요는 없습니다. 대신 사전 식으로 정렬됩니다.
Bob

@Bob은 특정 순서 (예 : 33 자)의 특정 길이의 행이 있고 결과에 반영되지 않는 경우 올바른 것입니다. 1 단계 이전에 Alt + C를 사용하여 행 번호를 추가 할 수 있습니다 (길이가 같은지 확인하기 위해 선행 0 포함). 그런 다음 4 단계에서 정리할 때 ^ *\d{5}줄 번호에 사용 된 자릿수 또는 숫자를 사용하십시오.
데인

2
중요하다고 가정하면 기존 정렬 순서를 유지하도록 답변이 업데이트되었습니다.
데인

YouTube 동영상에서 그 사람이하고있는 일을 따르기 위해 좋은 데인으로, 댓글을 비활성화했습니다. pastebin pastebin.com 에서 실패한 텍스트에 대한 링크를 포함시킬 수 있습니까 ? 매크로로만 또는 수동으로도 실패 했습니까?
barlop

1
나는 당신의 대답을 읽으면서, 나는 그것을 시도했을 때만 그것을 이해했다고 말해야합니다. 더 많은 표를 얻지 못한 이유는 사람들이 논리를 이해하지 못했기 때문일 수 있습니다. 처음에 논리에 대한 설명을 대답에 추가하도록 허용 하시겠습니까?
barlop

3

아니, 나는 생각하지 않습니다. 가장 가까운 것은 TextFx 플러그인이지만 줄 길이가 아닌 문자 기반 정렬입니다. 가장 좋은 방법은 텍스트를 스프레드 시트에 던져서 정렬하는 것입니다 ( LEN()함수 를 사용하여 별도의 계산 열을 사용하여 ).


고맙게도 텍스트 파일은 긴 줄과 큰 크기이므로 스프레드 시트 편집기를 멀리했습니다. 질문을 업데이트하겠습니다.
hpaknia

@HPM 잘하면 메모장 ++ 외부를 기꺼이보고 싶다면 명령 줄에서 할 것입니다. 일부 명령을 사용하여 각 줄의 끝에서 줄의 길이를 가져옵니다. 적어도 당신은 그것을하는 것에 더 가까울 것입니다.
barlop

감사합니다. 좋은 조언입니다. 내가 궁금한 점은 NP ++ 많은 플러그인인데 왜 이것이 존재하지 않습니까?
hpaknia

1

CSV 파일 에서 N ++SQL을 사용할 수 있습니다 ! 예를 들어 다음이있는 경우 :

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

select * from data order by length(col1) desc내림차순으로 정렬 명령 을 실행할 수 있습니다 . "데이터"는 현재 파일을 의미합니다. "col1"-첫 번째 (및 마지막) 열의 이름입니다.

불행히도 한 열 텍스트에서 줄 다음에 분리 문자를 허용하지 않는 버그가있을 수 있습니다.


N ++의 SQL 만 데이터 출력을 조작하지 않으면 실제로 이것은 훌륭한 솔루션입니다. 방금 솔루션을 테스트했으며 빠른 정규식 바꾸기로 모든 줄 끝에 구분 기호를 추가했지만 데이터 출력은 모든 것을 소문자로 변환하고 대시를 물음표로 바꿉니다.
데인

@Dane (현재 메모장 ++에 액세스 할 수 없습니다.) 아마도 모든 줄의 시작과 끝에 작은 따옴표를 추가하려고 시도하고 그다음에 세미콜론을 추가하십시오. 큰 따옴표일까요?
Bob

@ 밥 : 안돼. 소문자는 N ++ 플러그인의 SQL 릴리스 노트에 언급되어 있습니다.
데인

0

또는 리눅스와 nedit가 발생하면 :

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

이것은 질문이 아니라, 동일한 OS 플랫폼에도 적용 할 수 없습니다.
Caleb

여전히 유용한 답변입니다. 그것은 나를 위해 잘 일한 유일한 사람이었습니다. 그는 리눅스와 nedit가 필요하다고 지정 했으므로 아무런 문제가 없습니다.
Anthony
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.