Insert sequential numbers at start of lines
-
@Ionut-Dorin said in Insert sequential numbers at start of lines:
i set the script up to put a number, then :, then a space (5: ), so till 9 its 3 characters long and after is 4 characters long
It would have been better to just show some of this text rather than describing it…
But I think if you do a replacement operation it will be good?:
Find:
^\d+:
Replace: set to nothing
Search mode: Regular expression
Options: Wrap around
Action: Replace allYou can record this replacement op as a macro.
-
@Alan-Kilborn
1: Line content
2: Line content
3: Line content
4: Line content
5: Line content
6: Line content
7: Line content
8: Line content
9: Line content
10: Line content
11: Line content
12: Line content
… and to become
Line content
Line content
Line content
Line content
etc.
Find: ^\d+: doesn’t work and plus, i don’t need it for the whole document, just for the lines i select. -
@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.
-
@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. -
@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:
- Multi-selection using Ctrl + single-click at the start of each line.
- Multi-selection using Ctrl + single-click at the start and end of each line.
- 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?
-
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.
-
@Alan-Kilborn said in Insert sequential numbers at start of lines:
This version handles all types of selections.
Perfect!!! Thank you so much 😁👍
-
@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.
-
@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 havea-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.
-
If you wanted to not run out of letters, by simply increasing the number of letters by 1 every time to get to
z
(thusaa
would followz
andaaa
would followzz
), 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.