Macro not working incrementally in Windows 10/Server 2012
-
I’ve been having issues with some macros only working intermittently since transitioning to Windows 10. I’ve noticed that it’s occurring in Server 2012 as well. I believe I noticed it in the latter versions of Notepad++ (6.9).
It appears that the issue is occurring when using copy/paste (Ctrl-C/Ctrl-V) in the macro.
For example, if I have a list of documents with date/time stamps appended to them:
2016900000011.txt.201610190800
2016900000012.txt.201610190800
2016900000013.txt.201610190800
2016900000014.txt.201610190800
2016900000015.txt.201610190800If I record a macro that cuts the date/time stamp from the end and pastes it to the beginning of the line, I get this:
201610190800.2016900000011.txt
201610190800.2016900000012.txt
2016900000013.txt
201610190800.2016900000014.txt
201610190800.2016900000015.txtIt’s as if it’s losing the copied content in the clipboard at times.
Anyone else been experiencing this in Windows 10/Server 2012 or in latter versions of Notepad++?
-
Hello David,
I can’t offer you any help about Windows 10 / Server 2012 as I, currently work with an old Win XP SP3 version ! Yes, I know, I’m a kind of dinosaur ;-))
However,for basic changes of text, in a file, as yours, it would be quicker and more powerful to use regular expressions to do the job ! Moreover, the macro creating phase would become useless !
For instance, once your file is opened in N++, with the cursor located line 1 and column 1 of your list :
-
Open the Find/replace dialog ( Ctrl + H )
-
Type , in the Find What : zone, the regex
^(\h*)(.+)\.(.+)
-
Type, in the Replace with zone, the regex
\1\3 \2
, with 3 spaces between\3
and\2
-
Select, at the bottom, the Regular expression search mode ( IMPORTANT )
-
Uncheck, if necessary, the . matches new line` option ( IMPORTANT )
-
Finally, click on the Replace All button
Et voilà ! Done :-)
So, from your original text, below :
2016900000011.txt.201610190800 2016900000012.txt.201610190800 2016900000013.txt.201610190800 2016900000014.txt.201610190800 2016900000015.txt.201610190800
we get the modified text, below :
201610190800 2016900000011.txt 201610190800 2016900000012.txt 201610190800 2016900000013.txt 201610190800 2016900000014.txt 201610190800 2016900000015.txt
Now, just imagine that :
-
Your text has leading spaces or tabulations, before the name of the files, like below :
2016900000011.txt.201610190800 2016900000012.txt.201610190800 2016900000013.txt.201610190800 2016900000014.txt.201610190800 2016900000015.txt.201610190800
with lines 1, 2 and 4 which begin with 12 space characters and lines 3 and 5 which begin with 3 tabulation characters
- You write, this time, in the Replace with zone, the regex
\1\3 is the DATE/TIME stamps of the FILE \2
Then, after performing this S/R, you should get the text below :
201610190800 is the DATE/TIME stamps of the FILE 2016900000011.txt 201610190800 is the DATE/TIME stamps of the FILE 2016900000012.txt 201610190800 is the DATE/TIME stamps of the FILE 2016900000013.txt 201610190800 is the DATE/TIME stamps of the FILE 2016900000014.txt 201610190800 is the DATE/TIME stamps of the FILE 2016900000015.txt
Notes, on that second S/R :
-
The first part of the search regex,
(\h*)
, inside round brackets, memorize the leading blank characters, of the current line, as group 1 -
Then, the middle part
(.+)\.
memorize, as group 2, the complete name of the file, of the current line, as it catches the longest string till the dot character ( located between the names and the date/time stamps ). The dot, itself, must be escaped to be taken literally, as it’s a special symbol, in regular expressions. -
Finally, the end part
(.+)
memorize, as group 3, the date/time stamps, of the current line, as it catches all the remaining characters till the EOL characters, excluded -
The first part of the replacement string
\1\3
rewrites the indentation of the current line, followed by the date/time stamps -
Then, the part
is the DATE/TIME stamps of the FILE
is simple text to be inserted, with that exact case, after the date/time stamps -
Finally the part
\2
rewrites the name of the current file
Best Regards
guy038
-
-
Thank you so much guy038.
I use regex for find/replace frequently, but didn’t consider using it for this. I’m sometimes working with more than 1 million lines of file lists, and macros usually worked well, but regex could produce quicker output results.
Another time I’d use macros, which I don’t think this regex method will work on, is copying the file’s name into the text.
For example, if the text is:
2016900000011.txt.201610190800
…and the file containing the text is test.txt. Using Edit -> ‘Copy to Clipboard -> Current Filename to Clipboard’ in the macro, the output would be:
test.txt\2016900000011.txt.201610190800
I guess I can perhaps try accomplishing this when creating the directory lists from a command line.
Thanks again for your detailed feedback!