Dostałem nie tak dawno w pracy zadanie, polegające na wyciągnięciu kilkunastu, kilkudziesięciu zdań z pliku xml. Plik miał jakieś wartości przed zdaniem, miał jakieś wartości po zdaniu, miałem wyciągać tylko te zdania, w których linii występowało <UserTask>. Mogłem oczywiście napisać odpowiedni parser, co zajęło by nie wiem, jakąś pewnie godzinę. Tylko tak naprawdę po co, skoro mamy idealne narzędzie do tego typu przekształceń tekstowych. Oto opis jak wykonywać tego typu zadania:
Skrótem klawiszowym ctrl+h otwieramy zaawansowane narzędzie zamieniania, w którym zaznaczamy wyrażenia regularne.
Dokumentacja wyrażeń regularnych znajduje się tutaj:
Notepad++ regular expressions
A tak wygląda polecenie zamiany wszystkich linii nie zawierających danego tekstu
(?!^.*usertask.*$)^.+
Zamieniamy oczywiście na pusty tekst. W miejsce usertask wpisujemy tekst, który jest kluczem do linii, które mają zostać nieruszone.
Polecenie zamiany wszystkiego przed danym tekstem, w każdej linii:
.*text
Zamieniamy również na pusty tekst.
Polecenie zamiany wszystkiego za danym tekstem, w każdej linii:
[text].*
Tutaj również na pusty tekst. Text to słowo klucz.
Okej mamy już wszystkie zdania, ale każde w nowej linii, niejednokrotnie z kilkoma liniami przerwy, a chcielibyśmy je po przecinku. Oto, jak to się robi:
Edycja/Operacje na liniach/Usuwanie pustych linii.
Teraz wystarczy zamienić znak nowej linii na przecinek. W tym celu zaznaczamy rozszerzony, zamiast wyrażenia regularne i wykonujemy taką operację:
rn
Zamieniamy na przecinek, albo to, czego potrzebujemy. I już, zadanie rozwiązane.
Teraz, do każdego pliku xml mamy takie 5 operacji.
Można szybciej 😉
Przed rozpoczęciem tych wszystkich operacji klikamy: Makra/Rozpocznij nagrywanie.
Wykonujemy wszystkie kroki.
Po zakończeniu klikamy: Makra/Zakończ nagrywanie.
Dla następnego pliku wystarczy już tylko Makra/Odtwórz
Zadanie rozwiązane.
Opowiem teraz dwa słowa o wyrażeniu rn. Tak naprawdę oznacza ono przejście do nowej linii, najprościej mówiąc enter. Symbol r to z angielskiego carriage return, i pochodzi jeszcze z czasów, kiedy zamiast ekranów były drukarki. Symbol ten oznaczał przejście na wysokość pierwszego znaku od lewej strony w drukarce, czyli do początku linii. Z kolei symbol n, czyli new line, to po prostu zejście poziom niżej. Jeżeli spotkalibyście się z określeniem CRLF to oznacza ono to samo. Nie wszystkie systemy jednak używają tego standardu, czasem wystarcza sam CR, czasem sam LF.
To tyle ciekawostek na dziś, mam nadzieję, że przydatny lifehack o notepadzie++! 😉
Pozdrawiam!