Community
    • Login

    Please need a multiple renewable change

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    5 Posts 4 Posters 775 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • patrick rozonP Offline
      patrick rozon
      last edited by

      Hello,

      I have a text in its content contains a character ‘&’ repeated several times, I want to replace each & that exists in the text by :

      In the 1st & replace by 1
      In the 2nd & replace with 2
      the 3rd & replace with 3
      the 4th & replace with 4
      the 5th & replace with 5
      the 6th & replace with 6
      And the rest of ‘&’ that are present in the text:

      Put in the 7th &, the same replacement that I gave before to the 1st & which is 1, and so on for the other ‘&’:

      Put in the 8th &’ : the same replacement I gave to the 2nd ‘&’ which is 2

      In the 9th &’ : the replacement of the 3rd ‘&’ which is 3
      In the 10th &’ : the replacement of the 4th ‘&’ which is 4
      in the 11th &’ : replacement of the 5th ‘&’ which is 5
      the 12th &’ : the replacement of the 6th ‘&’ which is 6

      In the 13th & : the replacement will be 1
      the 14th & : the replacement will be 2
      the 15th & by : 3
      the 16th & by : 4
      the 17th & by : 5
      the 18th & by : 6

      And so on; always a renewal of this operation described above for the rest of & that are in the text.

      Can someone help me ?

      And thank you for your help.

      PeterJonesP 1 Reply Last reply Reply Quote 0
      • PeterJonesP Offline
        PeterJones @patrick rozon
        last edited by

        @patrick-rozon

        Not natively in stock Notepad++.
        If you have the PythonScript plugin, or ar willing to install it, it’s easy, using the “add_1” style replacement found in the PythonScript documentation.

        Here’s one such implementation; the instructions for installing PythonScript, creating the script, and running the script are embedded in the comments of the script.

        # encoding=utf-8
        """this uses the "add_1" style search and replace in Notepad++
        
        INSTRUCTIONS:
        1. Install PythonScript
           * Plugins > Plugins Admin
           * Click ☑ PythonScript checkbox until checked
           * click INSTALL
           * restart Notepad++ as necessary
        2. Create new PythonScript script
           * Plugins > PythonScript > New Script
           * Give it a reasonable name, like NReplacements.py
           * Paste in the code from this black box
           * Save
        3. Switch to the document where you want to search/replace
        4. Plugins > PythonScript > Scripts > NReplacements
        
        You can change the replacement values, or the number of replacements,
        then save, and it will still run.
        
        I used editor.replace() so that & wouldn't have special meaning.
        If you need to use a regular expression to match your "to-be-matched" text, use editor.rereplace instead.
        
        PythonScript has documentation in it's Context-Sensitive Help
        """
        from Npp import *
        
        counter = 0
        replacements = ('1','2','3','4','5','6')
        
        def add_1(m):
            global counter
            repl = replacements[counter]
            counter = (counter + 1) % len(replacements)
            return repl
        
        editor.replace(r'&', add_1) # use editor.rereplace if the first term needs to be a regex
        

        Please note that & has special meaning for regexes, so I used the non-regex editor.replace(); normally, I would just use editor.rereplace(r'...', add_1) so that when the end user decides they need a more powerful search, all they have to do is change the value, without having to remember to change the replace to rereplace.

        patrick rozonP 1 Reply Last reply Reply Quote 2
        • patrick rozonP Offline
          patrick rozon @PeterJones
          last edited by

          @PeterJones

          Thank you dear PeterJones for your quick response,

          I have installed PythonScript plugin, the script works very well as desired, thank you very much for your support.

          1 Reply Last reply Reply Quote 0
          • Terry RT Offline
            Terry R
            last edited by

            @patrick-rozon @PeterJones

            Although the solution has been found (in PythonScript) it does appear to be possible with regular expression (regex) as well, that is if I read the question correctly.

            The regex isn’t too daunting to understand and indeed it shows a reoccurring sequence so could easily be extended to whatever modulo was used (currently the number 6 requested).
            This is using the Find function with search mode set to “regular expression”.
            Find What:(([^&]*)&)?(([^&]*)&)?(([^&]*)&)?(([^&]*)&)?(([^&]*)&)?(([^&]*)&)?
            Replace With:(?{1}${2}1)(?{3}${4}2)(?{5}${6}3)(?{7}${8}4)(?{9}${10}5)(?{11}${12}6)

            With “Wrap around” ticked and the "Replace All button pressed it will commence at the start of the file and find the first group of up to 6 & with (or without) characters around them. It will then replace with the numbers 1 through 6 respectively. It then repeats finding the next sequence of up to 6 & and so on.

            So for a description we have:
            (([^&]*)&)? - means look for some non & characters (or not, that’s the *) followed by a & character. The ? allows for this capture group to be skipped if it does not find the right characters, this allows for a last sequence of less than 6 & to be changed. This is then repeated the number of times required (6 in this case).
            (?{1}${2}1) - means if group 1 DID capture some characters then we return them without the & (that’s group 2) and then follow that string with a number, in this case 1. By repeating this sequence and incrementing the group numbers and the following number as a replacement we will respectively replace up to 6 & with the corresponding new number (1 through 6).

            Terry

            1 Reply Last reply Reply Quote 2
            • guy038G Offline
              guy038
              last edited by guy038

              Hello, @patrick-rozon , @peterjones , @terry-r and All,

              Here is my solution. Not ideal, of course, as it would be suitable for small file size, only, but quite flexible !. It also uses a dummy character, not present in current file. I presonally chose the ¤ char of my French keyboard but, of course, any other char may be used

              • Add a line ¤123456 at the very end of current file

              • SEARCH (?s)&(.*¤)(\d)(\d+)|¤\d+

              • REPLACE ?1\2\1\3\2

              • Tick the Wrap around option

              • Select the Regular expression seardh mode

              • Hit, repeatedly, on Alt + R ( Replace button ) OR on Alt + A ( Replace All button ) till one of the follwing messages occurs :

                • Replace: one occurrence was replaced. No more occurrences were found.

                • Replae All: 0 occurrences were replaced in entire file


              One advantage of this method is that you may change, either, the modudlo and the values, without changing the regex S/R ! For instance, let’s suppose you want to replace any & char, by any even number ( so, modulo 5 ), in decreasing order, Then, simply add the line ¤86420 at the very end of the file and just use the regex S/R mentionned above !

              So, from the INPUT text :

              ------------&--------------&----&&-----------------&----------------&-----
              ------------&--------------&----&&-----------------&----------------&-----
              ------------&--------------&----&&-----------------&----------------&-----
              ¤86420
              

              After 19 replaceemnts, we would get the OUTPUT text :

              ------------8--------------6----42-----------------0----------------8-----
              ------------6--------------4----20-----------------8----------------6-----
              ------------4--------------2----08-----------------6----------------4-----
              

              Best Regards,

              guy038

              1 Reply Last reply Reply Quote 2
              • Terry RT Terry R referenced this topic on

              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
              • First post
                Last post
              The Community of users of the Notepad++ text editor.
              Powered by NodeBB | Contributors