Community
    • Login

    another replacement request for help

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    40 Posts 4 Posters 3.4k Views
    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.
    • EkopalypseE
      Ekopalypse
      last edited by

      I want to be like you when I grow up

      LOL - be careful with your wishes sometimes they come true :-D

      1 Reply Last reply Reply Quote 0
      • Carlos J. Segnini R.C
        Carlos J. Segnini R.
        last edited by

        haha thanks.
        May I ask another question?
        What if I needed to change another field as well?
        For example in the image below:
        39e1a109-e611-4d7d-a037-6a47ecf46181-image.png
        I find the name Aery #B1H in the file but then I need to change the Welltype from Oil to Gas (Or viceversa).
        In this case the I would not be replacing the searched word (Aery #B1H), but another field occurring later in the same entry (<Welltype>Oil to Gas)
        Thanks again

        EkopalypseE 1 Reply Last reply Reply Quote 0
        • EkopalypseE
          Ekopalypse @Carlos J. Segnini R.
          last edited by

          @Carlos-J-Segnini-R

          I would think this is a find/replace action.
          Find: <UWI>Aery #B1H</UWI>\R\h*<WellType>\K.+?(?=</WellType>)
          Replace:Gas
          tick regular expression

          Because of the usage of the \K syntax you can only use replace all button.

          Carlos J. Segnini R.C 1 Reply Last reply Reply Quote 2
          • Carlos J. Segnini R.C
            Carlos J. Segnini R. @Ekopalypse
            last edited by

            @Ekopalypse said in another replacement request for help:

            \R\h

            Thanks It works, but I would need to do one by one.
            Again I would have a list of different names (Aery #B1H, Aery #D2H, etc) so I was looking for another magic script haha

            EkopalypseE 1 Reply Last reply Reply Quote 0
            • EkopalypseE
              Ekopalypse @Carlos J. Segnini R.
              last edited by

              @Carlos-J-Segnini-R

              but then we would need some kind of mapping again,
              otherwise the script does not know when to use what. :-)

              1 Reply Last reply Reply Quote 0
              • Carlos J. Segnini R.C
                Carlos J. Segnini R.
                last edited by

                So this is how the xml file looks
                e6afaf3a-b1ef-4205-bb9c-515f61d7122f-image.png
                <Well replace=“false”>
                <UWI>Alexander Gas Unit 1 #2</UWI>
                <WellType>Oil</WellType>
                <ReserveStatusCollection>
                <Working>
                <PrimaryProduct>Oil</PrimaryProduct>
                <WellResCatCollection>

                and this is how the replacement file would be
                7c50836c-5aa4-47e1-ac7e-26568264fb30-image.png
                7dda6e13-179d-4e43-b772-a88ae007c825-image.png
                Alexander Gas Unit 1 #2 Oil Gas
                Alexander - Wessendorff 1 A3H Oil Gas
                Alexander - Wessendorff 1 A4H Oil Gas

                So the script would look for the first column (Well name), and then replace the word in the second column for the one in the third column:

                <WellType>Oil</WellType> to <WellType>Gas</WellType>

                Thanks again, you’re saving my life

                EkopalypseE 1 Reply Last reply Reply Quote 0
                • EkopalypseE
                  Ekopalypse @Carlos J. Segnini R.
                  last edited by

                  @Carlos-J-Segnini-R

                  Is the oil column really needed?
                  I mean, does it needs to be checked or can the script always look for company and then replace whatever is in WellType with the value from the Gas column?

                  1 Reply Last reply Reply Quote 1
                  • Carlos J. Segnini R.C
                    Carlos J. Segnini R.
                    last edited by Carlos J. Segnini R.

                    Edit:
                    Thinking about, no, no need for that column

                    EkopalypseE 4 Replies Last reply Reply Quote 0
                    • EkopalypseE
                      Ekopalypse @Carlos J. Segnini R.
                      last edited by

                      This post is deleted!
                      1 Reply Last reply Reply Quote 0
                      • EkopalypseE
                        Ekopalypse @Carlos J. Segnini R.
                        last edited by

                        @Carlos-J-Segnini-R

                        so you can get rid of the second column and the only thing we need to change is the find expression, I guess.

                        1 Reply Last reply Reply Quote 1
                        • EkopalypseE
                          Ekopalypse @Carlos J. Segnini R.
                          last edited by

                          @Carlos-J-Segnini-R

                          from Npp import editor1, editor2
                          
                          replacements = dict(line.split('\t') for line in editor2.getText().splitlines() if line)
                          
                          def replace_with(m):
                              return replacements[m.group(1)]
                          
                          # search_for = '(?<=<UWI>).+?(?=</UWI>)'
                          search_for = '<UWI>(.+)</UWI>\R\h*<WellType>\K.+?(?=</WellType>)'
                          editor1.rereplace(search_for, replace_with)
                          
                          1 Reply Last reply Reply Quote 2
                          • EkopalypseE
                            Ekopalypse @Carlos J. Segnini R.
                            last edited by

                            @Carlos-J-Segnini-R

                            btw. if you are interested how these regex search work see here for a pretty good description.

                            1 Reply Last reply Reply Quote 2
                            • Carlos J. Segnini R.C
                              Carlos J. Segnini R.
                              last edited by

                              Thanks again for your help.
                              For some reason this time it isn’t working.
                              I will try and fix it.

                              a4f54196-4f8f-444f-a7b7-15048ba35f66-image.png

                              EkopalypseE 1 Reply Last reply Reply Quote 0
                              • EkopalypseE
                                Ekopalypse @Carlos J. Segnini R.
                                last edited by

                                @Carlos-J-Segnini-R

                                Can you open the PythonScript console (plugin->PythonScript->Show Console) to see if there is an error?
                                The replacement file has company and gas/oil tab separated, correct?

                                Carlos J. Segnini R.C 1 Reply Last reply Reply Quote 0
                                • Carlos J. Segnini R.C
                                  Carlos J. Segnini R. @Ekopalypse
                                  last edited by Carlos J. Segnini R.

                                  @Ekopalypse here is the log.
                                  I think it is because not all the wells need to be changed, so the first one in the file (Aery #B1H) does not appear in the second file, so the script is stopping. I will try leaving all wells, even those that doesnt need to be changed

                                  Traceback (most recent call last):
                                  File “C:\Users\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\find_replace.py”, line 10, in <module>
                                  editor1.rereplace(search_for, replace_with)
                                  File “C:\Users\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\find_replace.py”, line 6, in replace_with
                                  return replacements[m.group(1)]
                                  KeyError: ‘Aery #B1H’

                                  And yes, the other file is separated by tabs.

                                  EkopalypseE 3 Replies Last reply Reply Quote 0
                                  • EkopalypseE
                                    Ekopalypse @Carlos J. Segnini R.
                                    last edited by

                                    @Carlos-J-Segnini-R

                                    Yes, that makes sense then we need to take another approach where we
                                    create the searches based on the second list. Gimme a minute

                                    1 Reply Last reply Reply Quote 0
                                    • EkopalypseE
                                      Ekopalypse @Carlos J. Segnini R.
                                      last edited by

                                      @Carlos-J-Segnini-R

                                      from Npp import editor1, editor2
                                      
                                      replacements = dict(line.split('\t') for line in editor2.getText().splitlines() if line)
                                      
                                      def replace_with(m):
                                          return replacements[m.group(1)]
                                      
                                      # search_for = '(?<=<UWI>).+?(?=</UWI>)'
                                      for company in replacements.keys():
                                          search_for = '<UWI>({})</UWI>\R\h*<WellType>\K.+?(?=</WellType>)'.format(company)
                                          editor1.rereplace(search_for, replace_with)
                                      
                                      1 Reply Last reply Reply Quote 2
                                      • EkopalypseE
                                        Ekopalypse @Carlos J. Segnini R.
                                        last edited by

                                        @Carlos-J-Segnini-R

                                        depending on the file size a faster solution might be this

                                        from Npp import editor1, editor2
                                        
                                        replacements = dict(line.split('\t') for line in editor2.getText().splitlines() if line)
                                        
                                        def replace_with(m):
                                            company = replacements.get(m.group(1), None)
                                            if company:
                                                return replacements[m.group(1)]
                                            else:
                                                return m.group()
                                        
                                        # search_for = '(?<=<UWI>).+?(?=</UWI>)'
                                        search_for = '<UWI>(.+)</UWI>\R\h*<WellType>\K.+?(?=</WellType>)'
                                        editor1.rereplace(search_for, replace_with)
                                        

                                        Only scanning the text one time and in case the company found is
                                        not in the replacements dictionary we replace it with what was found.
                                        Btw. its midnight here - good night.

                                        1 Reply Last reply Reply Quote 2
                                        • Carlos J. Segnini R.C
                                          Carlos J. Segnini R.
                                          last edited by

                                          The first one worked!
                                          Thanks so much for your help, I owe you a beer!
                                          Have a good night

                                          1 Reply Last reply Reply Quote 0
                                          • Carlos J. Segnini R.C
                                            Carlos J. Segnini R.
                                            last edited by

                                            By the way, I went back and edited the script to run a second time looking for another instance below.

                                            I’m sure there are better ways to jump three lines, but it’s late and I needed to finish. It worked! haha

                                            from Npp import editor1, editor2
                                            
                                            replacements = dict(line.split('\t') for line in editor2.getText().splitlines() if line)
                                            
                                            def replace_with(m):
                                                return replacements[m.group(1)]
                                            
                                            # search_for = '(?<=<UWI>).+?(?=</UWI>)'
                                            for company in replacements.keys():
                                                search_for = '<UWI>({})</UWI>\R\h*.*\R\h*.*\R\h*.*\R\h*<PrimaryProduct>\K.+?(?=</PrimaryProduct>)'.format(company)
                                                editor1.rereplace(search_for, replace_with)
                                            
                                            EkopalypseE 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors