Powiedzmy, że chcę mieć 10 wierszy danych, ale chcę, aby wartość była zwiększana dla każdego wiersza lub fragmentu danych. Jak zwiększyć tę wartość?
Na przykład .... Jeśli mam te wiersze, czy istnieje regex sposób na zastąpienie wartości id w celu zwiększenia?
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
--- Oto jak chciałbym, aby wyglądało ... (jeśli id w pierwszym rzędzie idzie w górę, to jest w porządku)
<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />
regex
notepad++
sequential
Travyguy9
źródło
źródło
Odpowiedzi:
Nie jestem pewien co do wyrażenia regularnego, ale jest sposób, aby to zrobić w Notepad ++, chociaż nie jest on zbyt elastyczny.
W podanym przykładzie przytrzymaj
Alt
i wybierz kolumnę liczb, którą chcesz zmienić. Następnie idź doEdit->Column Editor
i wybierzNumber to Insert
przycisk opcji w wyświetlonym oknie. Następnie podaj początkową liczbę i przyrost i naciśnij OK. Powinien wypisać zwiększone liczby.Uwaga: działa to również z
Multi-editing
funkcją (wybieranie kilku lokalizacji przy Ctrlwciśniętym klawiszu).Nie jest to jednak żadna elastyczność, którą większość ludzi uznałaby za przydatną. Notepad ++ jest świetny, ale jeśli chcesz naprawdę potężnego edytora, który może z łatwością robić takie rzeczy, powiedziałbym, że użyj Vima.
źródło
Szukałem dzisiaj tej samej funkcji, ale nie mogłem tego zrobić w Notepad ++. Mamy jednak na ratunek TextPada. U mnie to zadziałało.
W oknie dialogowym zamiany TextPada włącz wyrażenie regularne; wtedy możesz spróbować wymienić
<row id="1"/>
przez
<row id="\i"/>
Spójrz na ten link, aby uzyskać dalsze niesamowite funkcje zastępowania TextPada - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
źródło
Miałem ten sam problem z ponad 250 liniami i oto jak to zrobiłem:
na przykład :
<row id="1" /> <row id="1" /> <row id="1" /> <row id="1" /> <row id="1" />
umieszczasz kursor tuż za "1" i klikasz
alt + shift
i zaczynasz opadać strzałką w dół, aż dojdziesz do dolnej linii teraz zobaczysz grupę wyborów kliknij wymaż aby usunąć cyfrę 1 w każdej linii jednocześnie i przejdź doEdit -> Column Editor
i wybierzNumber to Insert
następnie1
wprowadź początkowe pole liczbowe i1
zwiększaj o pole, sprawdź cyfry zerowe i kliknijok
Gratulacje, że to zrobiłeś :)
źródło
Ponieważ liczba rzeczywistych odpowiedzi jest ograniczona, udostępnię to obejście. dla naprawdę prostych przypadkach, takich jak twój przykład, robisz to wstecz ...
Od tego
Wymień
\r\n
się" />\r\n<row id="
, a otrzymasz 90% drogi tam1" /> <row id="2" /> <row id="3" /> <row id="4" /> <row id="5
Lub w podobny sposób możesz zhakować dane za pomocą programu Excel / arkusza kalkulacyjnego. Po prostu podziel oryginalne dane na kolumny i manipuluj wartościami zgodnie z potrzebami.
| <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> |
Oczywiste rzeczy, ale może pomóc komuś wykonującemu dziwną jednorazową pracę hakerską, aby zaoszczędzić kilka naciśnięć klawiszy.
źródło
(.*)
przez<row id="\1" />
w trybie regex bez. matches newline
zapewni Ci 100% możliwości.http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad ++ jest wyposażony w edytor Edycja -> Kolumna "Alt + C", który może pracować na prostokątnym zaznaczeniu na dwa różne sposoby: Coledit.png wstawianie stałego tekstu w każdej linii, w tym i po bieżącej linii, w kolumnie wstawiania punkt (aka daszek). Początkowo zaznaczony tekst pozostaje nietknięty. Jak pokazano na rysunku, liniowy ciąg liczb można wstawić w ten sam sposób. Należy podać wartość początkową i przyrost. Opcją jest wypełnienie z lewej strony zerami, a liczbę można wpisać w bazie 2, 8, 10 lub 16 - tak też będą wyświetlane obliczone wartości, dopełnienie oparte na największej.
źródło
Rozwiązania sugerowane powyżej będą działać tylko wtedy, gdy dane są wyrównane.
Zobacz rozwiązanie w linku za pomocą wtyczki PythonScript Notepad ++, Działa świetnie!
stackoverflow Znajdź / zamień, ale zwiększ wartość
źródło
(Publikowanie na wypadek, gdyby ktoś mógł z niego skorzystać).
Szukałem rozwiązania problemu nieco bardziej wyrafinowanego niż OP - zamiana KAŻDEGO wystąpienia czegoś z numerem na to samo ze zwiększoną liczbą
Np. Zastąpienie czegoś takiego:
<row id="1" /> <row id="2" /> <row id="1" /> <row id="3" /> <row id="1" />
Przez to:
<row id="2" /> <row id="3" /> <row id="2" /> <row id="4" /> <row id="2" />
Nie mogłem znaleźć rozwiązania online, więc napisałem własny skrypt w groovy (trochę brzydki, ale spełnia swoje zadanie):
/** * <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"
źródło
Możesz to zrobić za pomocą Powershell poprzez regex i pętlę foreach, jeśli przechowujesz swoje wartości w pliku input.txt :
$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 {$_}; }
Następnie możesz zapisać $ tmp w pliku za pomocą
$tmp > result.txt
. Nie musi to być dane w kolumnach.źródło