replace in selected area
-
Hi
I have a file like this:
*JSP - 060 N N
1309,com.sapiens.mig.ri.v050m00.RI17483,70
1309,com.sapiens.mig.ri.v050m00.RI17483,70
*SQL - 812 N N #SQL01
*DDC - 045 N N
*JRN - 055 N NI am looking for the easiest way (macro?) to parse only this lines:
1309,com.sapiens.mig.ri.v050m00.RI17483,70
1309,com.sapiens.mig.ri.v050m00.RI17484,40and replace them with :
1309 RI17483 70
1309 RI17484 40In other words:
-
I want to select these lines
-
replace dots & commas in these lines to space
-
replace each selected line with the 1st word then space then 6th word then space then 7th word
so that line :
1309,com.sapiens.mig.ri.v050m00.RI17483,70
will be replaced with
1309 RI17483 70and all the other non-selected lines in the file will be left unchanged.
Can this be done ???
Many thanks
-
-
Hello , Gonen Shoham,
Of course, it can -:))
I noticed that, finally, you would like to change, ONLY, the lines which begin with a digit, wouldn’t you ?
If so, you can achieve all your changes, in one go, with a regex Search-Replacement !
-
Move back to the very beginning of your file ( Ctrl + Origin )
-
Open the Replace dialog ( Ctrl + H )
-
In the Find what: zone, type
(?-s)^(?=\d)(\w+).+\W+(\w+)\W+(\w+)$ -
In the Replace with: zone, type
\1 \2 \3, with a space character after digits 1 and 2 -
Click on the Replace All button
Et voilà !!
NOTES :
-
As usual, the in-line modifier
(?-s)ensures you the any meta-character dot (.) will match standard characters, ONLY, and not EOL characters -
Then, the part
^(?=\d)is called a positive look-ahead, that is to say a condition which verifies that, at beginning (^) of each line, a digit (\d) does occur ( Note that this condition must be true, in order to valid the overall search regex. However, these look-arounds do not consume any character and the regex engine position is, still, at the very beginning of each line ) -
So, the part
(\w+)represents the first non-null range of word characters, of each line, which is stored as group 1, due to the parentheses -
Then, the part
.+stands for any non-null range of standard characters, till the regex engine reaches :-
A non-null list of NON-word characters (
\W+), followed by : -
A non-null range of word characters (
(\w+)), stored as group 2, followed by : -
An other non-null list of NON-word characters
\W+, followed by : -
An other non-null range of word characters (
(\w+)), stored as group 3, finally followed by the end of the line ($)
-
-
In replacement, we just re-write the contents of the three groups 1 ( first word ), 2 ( penultimate word ) and 3 ( last word ), separated by one space character.
REMARKS* :
-
The class
\wrepresents, in the world-common ASCII range of characters, the class[A-Za-z0-9_], ( upper-case letters, lower-case letters, digits and the low line character ) But, if your present file has an Unicode encoding ( UTF-8 or UCS-2 ), the range of word characters (\w), in N++, is extended to any character, considered as letter or digit, in either, Latin, Greek, Cyrillic, Hebrew and Arab languages, correcty displayed with the Courrier New default N++ font ! -
And the inverse class,
\W, stands for any NON-word character, that is to say, any chracter, which does NOT belong to the word characters range
So, from your example :
*JSP - 060 N N 1309,com.sapiens.mig.ri.v050m00.RI17483,70 1309,com.sapiens.mig.ri.v050m00.RI17483,70 *SQL - 812 N N #SQL01 *DDC - 045 N N *JRN - 055 N Nwe would obtain the modified text, below :
*JSP - 060 N N 1309 RI17483 70 1309 RI17483 70 *SQL - 812 N N #SQL01 *DDC - 045 N N *JRN - 055 N N
Even if the non-selected lines begin with an othersymbol than the star, except for digits, AND/OR the different words are separated by several non-word characters, our S/R, always, behave as expected :-) For instance, if you consider the text, below, where I inserted numerous non-word characters, whose some space and tabulation characters, in the two lines, that have to be changed and where I changed the first character of the lines, which have to stay unchanged :
+JSP - 060 N N 1309;com---sapiens~mig&ri>>>>>v050m00 RI17483,@@@@@@@70 1309:com"""sapiens===mig/ri!v050m00 RI17483%%%70 *SQL - 812 N N #SQL01 DDC - 045 N N JRN - 055 N NWe, still, get the result, below !
+JSP - 060 N N 1309 RI17483 70 1309 RI17483 70 *SQL - 812 N N #SQL01 DDC - 045 N N JRN - 055 N NBest Regards,
guy038
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login