Community
    • Login

    Insert sequential numbers at start of lines

    Scheduled Pinned Locked Moved General Discussion
    31 Posts 6 Posters 7.0k 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.
    • Alan KilbornA
      Alan Kilborn @Ionut Dorin
      last edited by

      @Ionut-Dorin said in Insert sequential numbers at start of lines:

      Find: ^\d+: doesn’t work

      If you did exactly what I said to do, I see no reason why it wouldn’t work on your sample data.

      i don’t need it for the whole document, just for the lines i select.

      Ok, so don’t checkmark Wrap around but make your selection first and then checkmark In selection.

      Ionut DorinI 1 Reply Last reply Reply Quote 2
      • Ionut DorinI
        Ionut Dorin @Alan Kilborn
        last edited by Ionut Dorin

        @Alan-Kilborn Yes, that did it, I think i read too fast and didn’t see that you said “Search mode: Regular expression” and i didn’t check that, so maybe that’s why it didnt work.
        Also, i turned it into a macro for ease of use.
        Thank you so much for your help and patience, you’re a lifesaver.

        1 Reply Last reply Reply Quote 2
        • deleeleeD
          deleelee @Alan Kilborn
          last edited by

          @Alan-Kilborn said in Insert sequential numbers at start of lines:

          Sure, most anything is possible with programming.

          Hi Alan, the scripts have been working really well, thank you so much for your help. One thing I’ve noticed is that, when using the script for selected lines, it has to be a block selection for the script to work. I can’t select individual lines (eg: line 1, line 4, line 7) and insert numbers at that the start of only those lines.

          I’ve tried:

          1. Multi-selection using Ctrl + single-click at the start of each line.
          2. Multi-selection using Ctrl + single-click at the start and end of each line.
          3. Multi-selection using Ctrl + double-click to select the first word of each line.

          Numbers 1 & 2 don’t actually select any text so when I run the script I get a “No text selected” message.
          Number 3 only places a number at the start of the line for the last word I select.

          Is it possible or am I expecting more than the script can achieve?

          Alan KilbornA 1 Reply Last reply Reply Quote 0
          • Alan KilbornA
            Alan Kilborn @deleelee
            last edited by Alan Kilborn

            @deleelee

            You must be referring to the TextFxInsertLineNumbers.py script, because the other script discussed in this topic, InsertLineNumbersOnLines.py, doesn’t deal with any selected text at all.

            Here’s a modified version of the script I’m calling TextFxInsertLineNumbers2.py :

            # -*- coding: utf-8 -*-
            from __future__ import print_function
            
            # references:
            #  https://community.notepad-plus-plus.org/topic/23206/insert-sequential-numbers-at-start-of-lines
            #  https://community.notepad-plus-plus.org/topic/23166/faq-desk-how-do-i-replicate-the-features-of-textfx
            
            from Npp import *
            
            #-------------------------------------------------------------------------------
            
            class TFILN2(object):
            
                def __init__(self):
                    handled_line_nbr_list = []
                    running_line_nbr = 1
                    line_tup_list = []
                    for s in range(editor.getSelections()):
                        start_line = editor.lineFromPosition(editor.getSelectionNStart(s))
                        end_line = editor.lineFromPosition(editor.getSelectionNEnd(s))
                        line_tup_list.append((start_line, end_line))
                        line_tup_list.sort()
                    for (start_line, end_line) in line_tup_list:
                        for line_nbr in range(start_line, end_line + 1):
                            if line_nbr not in handled_line_nbr_list:
                                line_content = editor.getLine(line_nbr).rstrip('\n\r')
                                editor.replaceLine(line_nbr, '{n:08} {c}'.format(n=running_line_nbr, c=line_content))
                                running_line_nbr += 1
                                handled_line_nbr_list.append(line_nbr)
                    editor.setSel(editor.getCurrentPos(), editor.getCurrentPos())
            
            #-------------------------------------------------------------------------------
            
            if __name__ == '__main__': TFILN2()
            

            This version handles all types of selections.

            deleeleeD 2 Replies Last reply Reply Quote 2
            • deleeleeD
              deleelee @Alan Kilborn
              last edited by

              @Alan-Kilborn said in Insert sequential numbers at start of lines:

              This version handles all types of selections.

              Perfect!!! Thank you so much 😁👍

              1 Reply Last reply Reply Quote 0
              • deleeleeD
                deleelee @Alan Kilborn
                last edited by deleelee

                @Alan-Kilborn said in Insert sequential numbers at start of lines:

                # -*- coding: utf-8 -*-
                from __future__ import print_function
                
                # references:
                #  https://community.notepad-plus-plus.org/topic/23206/insert-sequential-numbers-at-start-of-lines
                #  https://community.notepad-plus-plus.org/topic/23166/faq-desk-how-do-i-replicate-the-features-of-textfx
                
                from Npp import *
                
                #-------------------------------------------------------------------------------
                
                class TFILN2(object):
                
                    def __init__(self):
                        handled_line_nbr_list = []
                        running_line_nbr = 1
                        line_tup_list = []
                        for s in range(editor.getSelections()):
                            start_line = editor.lineFromPosition(editor.getSelectionNStart(s))
                            end_line = editor.lineFromPosition(editor.getSelectionNEnd(s))
                            line_tup_list.append((start_line, end_line))
                            line_tup_list.sort()
                        for (start_line, end_line) in line_tup_list:
                            for line_nbr in range(start_line, end_line + 1):
                                if line_nbr not in handled_line_nbr_list:
                                    line_content = editor.getLine(line_nbr).rstrip('\n\r')
                                    editor.replaceLine(line_nbr, '{n:08} {c}'.format(n=running_line_nbr, c=line_content))
                                    running_line_nbr += 1
                                    handled_line_nbr_list.append(line_nbr)
                        editor.setSel(editor.getCurrentPos(), editor.getCurrentPos())
                
                #-------------------------------------------------------------------------------
                
                if __name__ == '__main__': TFILN2()
                

                This version handles all types of selections.

                Hi Alan, I absolutely love this script, thank you, and I use it regularly. How would I adapt it so that instead of inserting sequential numbers, it inserts sequential letters? ie: lines begin with a) b) c) etc.

                Alan KilbornA 1 Reply Last reply Reply Quote 0
                • Alan KilbornA
                  Alan Kilborn @deleelee
                  last edited by

                  @deleelee said in Insert sequential numbers at start of lines:

                  How would I adapt it so that instead of inserting sequential numbers, it inserts sequential letters? ie: lines begin with a) b) c) etc

                  Well, this is “dicey” as you quickly run out of letters.
                  Typically, you only have a-z, i.e., 26.

                  So, if you’re only going to run the script on very small files, you could hack the line_list2.append( line to be:

                  line_list2.append('{n}) {c}'.format(n=chr(97+line_nbr), c=line_content))
                  

                  But note, this is a real hack, as there’s no check for too many lines.

                  deleeleeD 1 Reply Last reply Reply Quote 2
                  • Mark OlsonM
                    Mark Olson
                    last edited by Mark Olson

                    If you wanted to not run out of letters, by simply increasing the number of letters by 1 every time to get to z (thus aa would follow z and aaa would follow zz), you could use the code:

                    num_chars, offset = divmod(line_nbr, 26)
                    line_list2.append( ( ( num_chars + 1 ) * chr(offset + 97) ) + line_content)
                    

                    Note that I haven’t actually executed this code as written.

                    1 Reply Last reply Reply Quote 1
                    • deleeleeD
                      deleelee @Alan Kilborn
                      last edited by deleelee

                      @Alan-Kilborn said in Insert sequential numbers at start of lines:

                      you could hack the line_list2.append( line to be:

                      line_list2.append('{n}) {c}'.format(n=chr(97+line_nbr), c=line_content))
                      

                      Thanks Alan. That had me confused until I realised you weren’t referring to the script I quoted which was TextFxInsertLineNumbers2.py and it doesn’t have line_list2.append. Is it possible to adapt that script? The one you’ve referred to seems to be TextFxInsertLineNumbers.py and I don’t use that.

                      Alan KilbornA 1 Reply Last reply Reply Quote 0
                      • Alan KilbornA
                        Alan Kilborn @deleelee
                        last edited by

                        @deleelee

                        the script I quoted which was TextFxInsertLineNumbers2.py

                        Hmm, you’re right, I guess I ignored the script you quoted, and just looked in this thread for the first script presented. Sorry.

                        Anyway, that script has a similar line:

                        editor.replaceLine(line_nbr, '{n:08} {c}'.format(n=running_line_nbr, c=line_content))

                        and I’d think it wouldn’t be that hard to adapt that line from what I gave before, into:

                        editor.replaceLine(line_nbr, '{n}) {c}'.format(n=chr(96+running_line_nbr), c=line_content))

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        The Community of users of the Notepad++ text editor.
                        Powered by NodeBB | Contributors