메모장 ++ 증분 교체


85

10 개의 데이터 행을 갖고 싶지만 각 행 또는 데이터 조각에 대해 값을 증가시키고 싶다고 가정 해 보겠습니다. 그 값을 어떻게 증가합니까?

예를 들어 ....이 행이 있으면 ID 값을 증가시키는 정규식 방법이 있습니까?

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

--- 다음은 내가 원하는 모습입니다 ... (첫 번째 행의 ID가 올라가면 괜찮습니다)

<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />

Notepad ++ 대체는 수학이나 정규식을 수행하지 않습니다.
Amber

가능하다면 엄청나게 어렵습니다. 정규식에는 숫자 개념이 없으므로 (+1이 없음) 정규식과 일치 할 때 데이터를 축적하는 쉬운 방법이 없습니다 (따라서 "다음"일치가 없음). 이 작업을 자동화해야하는 경우 XSLT가 도움이 될 수 있습니다.

@Amber Notepad ++에는 제한된 정규식 기능이 있습니다.
Karolis 2011 년

@Karolis 나는 그것을 매우 알고 있습니다. 나는 단순히 정규식 (본질적으로)도 메모장 ++의 검색 및 바꾸기 구현도 없다고 말하고 있습니다. 해당 정규식을 사용하여 수학을 지원 있습니다.
Amber

1
정규식이 가능한 방법으로 언급되고 태그가 지정되었지만 OP는 Notepad ++가 작업을 수행 할 수 있는지 아는 것보다 특정 방법에 덜 관심을 보였습니다.
jbobbins 2015-09-05

답변:


158

정규식에 대해서는 확실하지 않지만, 유연하지는 않지만 Notepad ++에서이 작업을 수행 할 수있는 방법이 있습니다.

제공 한 예 Alt에서 변경하려는 숫자 열을 누른 상태 에서 선택하십시오. 그런 다음 나타나는 창에서 라디오 버튼으로 이동하여 Edit->Column Editor선택합니다 Number to Insert. 그런 다음 초기 번호와 증분을 지정하고 확인을 누르십시오. 증가 된 숫자를 써야합니다.

참고 :이 Multi-editing기능 과 함께 작동 합니다 ( Ctrl키를 누른 상태에서 여러 위치 선택 ).

그러나 이것은 대부분의 사람들이 유용하다고 생각하는 유연성에 가깝지 않습니다. Notepad ++는 훌륭하지만 이와 같은 작업을 쉽게 수행 할 수있는 진정으로 강력한 편집기를 원한다면 Vim을 사용하십시오.


4
모호한 열 기능에 대해 +1하고 vim이 더 강력한 편집기라는 점에 주목하십시오. ;)
Spencer Rathbun 2011 년

Notepad ++는 굉장합니다. 이만큼 강력한 온라인 텍스트 편집기가 있다면 좋을 것입니다.
Luiz Feijão Veronesi

1
나에게 : Alt + Shift로 열을 선택한 다음 삽입 할 숫자를 수행하십시오. 완벽하게 작동합니다
Rombus

감사! 이 기능은 훌륭합니다. 또한 두 번 클릭하여 열을 선택할 수있었습니다.
Rahim Khoja

굉장 해요! 300 개의 삽입 문을 준비해야했을 때 제 목숨을 구했습니다.
DoNuT

14

나는 오늘 같은 기능을 찾고 있었지만 메모장 ++에서 이것을 할 수 없었습니다. 그러나 우리는 구조 할 TextPad를 가지고 있습니다. 그것은 나를 위해 일했습니다.

TextPad의 바꾸기 대화 상자에서 regex를 켭니다. 그런 다음 교체를 시도 할 수 있습니다.

<row id="1"/>

으로

<row id="\i"/>

TextPad를 더 놀라운 대체 기능이 링크에서보세요 - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/


1
실제로주의를 기울이면 도움이 될 것 같아요. SublimeText를 설치했습니다. :) 감사.
rtf

1
그러나 "모두 바꾸기"버튼을 누르십시오. "다음 교체"는 카운터를 증가시키지 않습니다. 이것을 알아내는 데 몇 시간이 걸렸습니다. \ i 1부터 시작하여 1 씩 증가하는 숫자로 바꿉니다. \ i (10) 10부터 시작하여 1 씩 증가하는 숫자로 바꿉니다. \ i (0,10) 0부터 시작하여 10 씩 증가하는 숫자로 바꿉니다. \ i ( 100, -10) 100부터 시작하여 -10 씩 감소하는 숫자로 바꿉니다.
Venkatesh Muniyandi

8

나는 250 줄이 넘는 동일한 문제가 있었고 여기에 내가 한 방법이 있습니다.

예 :

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

커서를 "1"바로 뒤에 놓고 alt + shift아래쪽 화살표 를 클릭 하여 아래쪽 줄에 도달 할 때까지 내림차순을 시작합니다. 이제 선택 그룹이 표시됩니다. 지우기를 클릭하여 각 줄의 숫자 1을 동시에 지우고 이동하여 Edit -> Column Editor선택합니다. Number to Insert그런 다음 1초기 번호 필드와 필드 1증가에 입력하고 0 번호를 확인하고 클릭ok

축하합니다 :)


5

실제 답변이 제한되어 있으므로이 해결 방법을 공유하겠습니다. 예 와 같은 정말 간단한 경우에는 거꾸로 수행합니다.

이것으로부터

1
2
3
4
5

교체 \r\n" />\r\n<row id="당신은 방법의 90 %를 얻을 것이다있다

1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5

또는 엑셀 / 스프레드 시트로 데이터를 해킹 할 수있는 유사한 방식입니다. 원본 데이터를 열로 분할하고 필요에 따라 값을 조작하기 만하면됩니다.

|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |

분명한 일이지만 이상한 일회성 해킹 작업을 수행하여 몇 가지 키 입력을 저장하는 데 도움이 될 수 있습니다.


5
교체 (.*)<row id="\1" />하지 않고 정규식 모드에서 것은 . matches newline당신이 길의 100 %를 얻을 것이다.
satibel

4

http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text

Notepad ++에는 두 가지 다른 방법으로 직사각형 선택에서 작업 할 수있는 편집-> 열 "Alt + C"편집기가 장착되어 있습니다. Coledit.png 삽입 열에서 현재 줄을 포함하고 그 뒤에 오는 모든 줄에 고정 텍스트 삽입 포인트 (캐럿). 처음에 선택한 텍스트는 그대로 유지됩니다. 그림에서 알 수 있듯이 동일한 방식으로 일련의 선형 숫자를 삽입 할 수 있습니다. 시작 값과 증분이 제공됩니다. 0이있는 왼쪽 패딩은 옵션이며 숫자는 2 진법, 8 진법, 10 진법 또는 16 진법으로 입력 할 수 있습니다. 이것은 계산 된 값도 표시되는 방법이며 패딩은 가장 큰 것을 기준으로합니다.


당신이 당신의 답변을 읽는 혼란을 피하기 위해 게시물에 이미지를 첨부 할 경우 훨씬 더 좋을 것이다
Aminah Nuraini


1

(누군가가 사용할 수있는 경우 게시).

나는 OP보다 조금 더 복잡한 문제에 대한 해결책을 찾고 있었다-모든 항목을 숫자로 같은 숫자로 바꾸는 것

예를 들어 다음과 같이 교체합니다.

<row id="1" />
<row id="2" />
<row id="1" />
<row id="3" />
<row id="1" />

이로 인해:

<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />

온라인에서 솔루션을 찾을 수 없으므로 groovy에서 내 스크립트를 작성했습니다 (조금 못 생겼지 만 작업을 수행합니다).

 /**
 * <p> Finds words that matches template and increases them by 1.
 * '_' in word template represents number.
 *
 * <p> E.g. if template equals 'Row="_"', then:
 * ALL Row=0 will be replaced by Row="1"
 * All Row=1 will be replaced by Row="2"
 * <p> Warning - your find template might not work properly if _ is the last character of it
 * etc.
 * <p> Requirments:
 * - Original text does not contain tepmlate string
 * - Only numbers in non-disrupted sequence are incremented and replaced
 * (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be 
 * replaced by Row=5)
 */
def replace_inc(String text, int startingIndex, String findTemplate) {
    assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder'
    assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed'
    assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)'
    while (true) {
        findString = findTemplate.replace("_",(startingIndex).toString())
        if (!text.contains(findString)) break;
        replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString())
        text = text.replaceAll(findString, replaceString)
    }
    return text.replaceAll("_____","") // get rid of '_____' character
}

// input
findTemplate = 'Row="_"'
path = /C:\TEMP\working_copy.txt/
startingIndex = 0

// do stuff
f = new File(path)
outText = replace_inc(f.text,startingIndex,findTemplate)
println "Results \n: " + outText
f.withWriter { out -> out.println outText }
println "Results written to $f"

1

input.txt 파일에 값을 저장하면 정규식 및 foreach 루프를 통해 Powershell을 사용하여 수행 할 수 있습니다 .

$initialNum=1; $increment=1; $tmp = Get-Content input.txt | foreach {  $n = [regex]::match($_,'id="(\d+)"').groups[1
].value; if ($n) {$_ -replace "$n", ([int32]$initialNum+$increment); $increment=$increment+1;} else {$_}; }

그런 다음 $tmp > result.txt. 데이터가 열에있을 필요는 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.