DonationCoder.com forum
 
Read-only archive. This is a static copy of the DonationCoder.com forum. Reading and searching work as before; logging in, posting and private messages do not.
Archive of 2026-10-21 · About this archive · Main site

Last post Author Topic: Sort lines of a txt file by lenght of the string  (Read 35,001 times)

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Sort lines of a txt file by lenght of the string
« on: February 18, 2017, 02:02 PM »
If each line is a string of text I would like to order the txt file from the short to the longest one.

How can I do this ?

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #1 on: February 18, 2017, 02:08 PM »
insert the length, fixed format (0001 etc.), of each line in front of each line, with a separator
sort the file
remove the added columns, cut at the separator
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #2 on: February 18, 2017, 02:43 PM »
Again a 'one-liner' this time using awk and sort:
Code
awk '{ printf"%04d|%s\n",length($0),$0}' contro.txt|sort|awk -F'|' '{print $2}'
- first awk command adds the length and the separator, a vertical pipe
- sort command puts them in the desired order
- second awk command removes the length and the separator
to redirect to a file, add this at the end:
Code
>length-sorted.txt

I've used Cygwin, then you might want/need to issue 'export LC_ALL=C' before running the command, else awk might give some error about binary data (the accented characters)
Couldn't find a way to do this in NotePad++ yet, maybe using the Python Script plugin for NotePad++, I'll investigate that later

I used your previous sample input text 'contro.txt' as input :P
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

MrZebulon

  • Supporting Member
  • Joined in 2008
  • **
  • Posts: 27
Re: Sort lines of a txt file by lenght of the string
« Reply #3 on: February 18, 2017, 06:21 PM »
Give TED Notepad a try:

http://jsimlo.sk/notepad/


Best plain text editor ever ;-)

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #4 on: February 18, 2017, 08:23 PM »
Give TED Notepad a try:

http://jsimlo.sk/notepad/
Great tip!

Best plain text editor ever ;-)
We'll see about that...


Now let's try this TED Notepad... :tellme:

- Open the file
- Select All (Ctrl-A)
- Select Tools/Lines/Columns, Numbers... (Alt-T,L,N or Alt-Ctrl-Y)
- Change Output mask to (Line length right aligned with zeros, separator |, original line)
Code
%+l0|%0
- Press Cut (Alt-C), length and a separator are inserted in each line
- Select All (Ctrl-A)
- Sort Ascending (Tools/Sort/Ascending, Alt-T,S,A or Alt-Ctrl-A)
- Select All (Ctrl-A)
- Select Tools/Lines/Columns, Numbers... (Alt-T,L,N or Alt-Ctrl-Y)
- Change Output mask to
Code
%1
- Change settings on %1 tab
  - Select 'Entire line'
  - Check: 'Use only characters from
  - set: 'position' to 5
  - set: 'to' to 999 (assuming no line is longer than 999 characters, or use 9999)
(Have Preview checked, then the preview should show the result without length and separator, if a column is missing change 5 to 4 or 3)
- Press Cut (Alt-C)
- Save result (Ctrl-S or Ctrl-B, Save as...)
- Job well done :D

NB: The use of a separator is entirely optional, ofcourse ;)

I kinda like this TED Notepad, looks like something safe enough for @Contro to handle ;D
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #5 on: February 18, 2017, 09:51 PM »
Give TED Notepad a try:

http://jsimlo.sk/notepad/
Great tip!

Best plain text editor ever ;-)
We'll see about that...


Now let's try this TED Notepad... :tellme:

- Open the file
- Select All (Ctrl-A)
- Select Tools/Lines/Columns, Numbers... (Alt-T,L,N or Alt-Ctrl-Y)
- Change Output mask to (Line length right aligned with zeros, separator |, original line)
Code
%+l0|%0
- Press Cut (Alt-C), length and a separator are inserted in each line
- Select All (Ctrl-A)
- Sort Ascending (Tools/Sort/Ascending, Alt-T,S,A or Alt-Ctrl-A)
- Select All (Ctrl-A)
- Select Tools/Lines/Columns, Numbers... (Alt-T,L,N or Alt-Ctrl-Y)
- Change Output mask to
Code
%1
- Change settings on %1 tab
  - Select 'Entire line'
  - Check: 'Use only characters from
  - set: 'position' to 5
  - set: 'to' to 999 (assuming no line is longer than 999 characters, or use 9999)
(Have Preview checked, then the preview should show the result without length and separator, if a column is missing change 5 to 4 or 3)
- Press Cut (Alt-C)
- Save result (Ctrl-S or Ctrl-B, Save as...)
- Job well done :D

NB: The use of a separator is entirely optional, ofcourse ;)

I kinda like this TED Notepad, looks like something safe enough for @Contro to handle ;D

We are entushiastic of software !!!!!!
another notepad : pspad, notepad++, ted notepad .....

Running to try
First downloading the editor

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #6 on: February 19, 2017, 11:27 AM »
I have tried. But I think i am doing something wrong.
Simple don't get results .

And try to apply all the steps !!!
:-[

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #7 on: February 19, 2017, 12:43 PM »
Simple don't get results .
Huh? You do select all text (Ctrl-A) before running any of the tools? It makes working with the preview of "Tools/Lines/Columns, Numbers" possible, so you should see a preview while entering the Output mask.

You can attach a sample file here, or PM me for my e-mail, and I'll verify if the file is causing the trouble. Current TED Notepad seems to have issues with UTF-8 files without a BOM, and you might have such a file, but you should be able to use File/Re-open as UTF-8 and it could resolve your issue.
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #8 on: February 19, 2017, 12:51 PM »
I have tried. But I think i am doing something wrong.
Uhm, did you retype the Output mask values, or copy/paste from this page?
Copy/paste is the least error-prone, especially as the first sequence is: percent, plus, lowercase-L, zero, vertical bar, percent, zero
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #9 on: February 19, 2017, 02:51 PM »
Though it worked fine for me, using TED Notepad, I wanted to resolve this one using Notepad++ too.
It won't be possible to use the, quite limited, macro feature of Npp, so I used a scripting plugin: Notepad++ Python Script

[One time only]
- Install the Notepad++ Python Script plugin, using the MSI installer, not using the plugin manager. It can be downloaded from here. Close Notepad++ before the installer is run.
- Open Notepad++
- Check if Python Script is working correctly by opening the console: Plugins/Python Script/Show Console, en verifying that it shows the Python version, something like this:
Code
Python 2.7.6-notepad++ r2 (default, Apr 21 2014, 19:26:54) [MSC v.1600 32 bit (Intel)]
Initialisation took 125ms
Ready.
- Choose Plugins/Python Script/New Script, type a filename: sort-by-length.py, and press Save. The file is created and opened in Notepad++
- Paste this script into sort-by-length.py:
Code: (python)
# Ath: Found this in the notepad-plus forum on sourceforge.net, modified as suggested in the comments there
editor.beginUndoAction()
if editor.getSelText(): # grab the lines
    linee = editor.getSelText().splitlines()
else:
    linee = editor.getText().splitlines()
sorted_lines=sorted(linee,key=lambda x:len(x)) # add parameter reverse=True, to sort descending by length
editor.clearAll() # wipe lines in editor
for line in sorted_lines:
    print(line) # put all lines back in the editor
editor.endUndoAction()
- Make sure the code is not indented (so each line starting on column 1) except for lines 4, 6 and 10 as they must be indented.
- Save the file
- The script should now be available in the menu Plugins/Python Script/Scripts/ (don't select it, it will execute immediately!)

[Process a file]
- Open the file to sort, and make sure it is the selected file
- Select Plugins/Python Script/Scripts/sort-by-length
- The file will be emptied and filled with all lines again, shortest first (or longest first if reversed=True was set). It may take some time, as Python (Script) doesn't seem very fast in this configuration
- If an error occurs during processing, it will be shown in the Python Script console (see above how to open that)
- Save the file
Done :D

Edit: Added sentence about the code needing to be at column 1
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)
« Last Edit: February 20, 2017, 08:07 PM by Ath »

anandcoral

  • Honorary Member
  • Joined in 2009
  • **
  • Posts: 802
    • Participated in NANY Challenge Thirteen Times
Re: Sort lines of a txt file by lenght of the string
« Reply #10 on: February 19, 2017, 05:37 PM »
Hi Contro

You can try http://www.miniwebtool.com/sort-text-by-length/

I got below result,

2017-02-19_230714.png

Regards,

Anand

Lintalist

  • Participant
  • Joined in 2015
  • *
  • Posts: 122
Re: Sort lines of a txt file by lenght of the string
« Reply #11 on: February 19, 2017, 07:47 PM »
For reference: short AutoHotkey example (one of several you can find there on the forum) https://autohotkey.com/board/topic/23093-sort-a-text-file-according-to-line-length/?p=149560

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #12 on: February 19, 2017, 07:51 PM »
Simple don't get results .
Huh? You do select all text (Ctrl-A) before running any of the tools? It makes working with the preview of "Tools/Lines/Columns, Numbers" possible, so you should see a preview while entering the Output mask.

You can attach a sample file here, or PM me for my e-mail, and I'll verify if the file is causing the trouble. Current TED Notepad seems to have issues with UTF-8 files without a BOM, and you might have such a file, but you should be able to use File/Re-open as UTF-8 and it could resolve your issue.
I am going to try.
I was making by hand , not copy / paste.
I will put screenshots .

Trying !

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #13 on: February 19, 2017, 08:09 PM »
Though it worked fine for me, using TED Notepad, I wanted to resolve this one using Notepad++ too.
It won't be possible to use the, quite limited, macro feature of Npp, so I used a scripting plugin: Notepad++ Python Script

[One time only]
- Install the Notepad++ Python Script plugin, using the MSI installer, not using the plugin manager. It can be downloaded from here. Close Notepad++ before the installer is run.
- Open Notepad++
- Check if Python Script is working correctly by opening the console: Plugins/Python Script/Show Console, en verifying that it shows the Python version, something like this:
[Select]

Python 2.7.6-notepad++ r2 (default, Apr 21 2014, 19:26:54) [MSC v.1600 32 bit (Intel)]
Initialisation took 125ms
Ready.

- Choose Plugins/Python Script/New Script, type a filename: sort-by-length.py, and press Save. The file is created and opened in Notepad++
- Paste this script into sort-by-length.py:
Code: Python [Select]

    # Ath: Found this in the notepad-plus forum on sourceforge.net, modified as suggested in the comments there
    editor.beginUndoAction()
    if editor.getSelText(): # grab the lines
        linee = editor.getSelText().splitlines()
    else:
        linee = editor.getText().splitlines()
    sorted_lines=sorted(linee,key=lambda x:len(x)) # add parameter reverse=True, to sort descending by length
    editor.clearAll() # wipe lines in editor
    for line in sorted_lines:
            print(line) # put all lines back in the editor
    editor.endUndoAction()

- Save the file
- The script should now be available in the menu Plugins/Python Script/Scripts/ (don't select it, it will execute immediately!)

[Process a file]
- Open the file to sort, and make sure it is the selected file
- Select Plugins/Python Script/Scripts/sort-by-length
- The file will be emptied and filled with all lines again, shortest first (or longest first if reversed=True was set). It may take some time, as Python (Script) doesn't seem very fast in this configuration
- If an error occurs during processing, it will be shown in the Python Script console (see above how to open that)
- Save the file
Done :D
I will try too.

The other method with notepad ted give me no results.

The zeros stay in the final result ?



Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #14 on: February 19, 2017, 08:14 PM »
AsusPortatil - 19_02_2017 , 19_54_59.pngAsusPortatil - 19_02_2017 , 19_55_55.pngAsusPortatil - 19_02_2017 , 19_56_30.pngAsusPortatil - 19_02_2017 , 19_56_41.pngAsusPortatil - 19_02_2017 , 19_56_46.pngAsusPortatil - 19_02_2017 , 19_56_57.pngAsusPortatil - 19_02_2017 , 19_57_02.pngAsusPortatil - 19_02_2017 , 19_57_09.pngAsusPortatil - 19_02_2017 , 19_57_20.pngAsusPortatil - 19_02_2017 , 19_57_46.pngAsusPortatil - 19_02_2017 , 19_58_10.pngAsusPortatil - 19_02_2017 , 19_58_40.pngAsusPortatil - 19_02_2017 , 19_59_12.pngAsusPortatil - 19_02_2017 , 20_00_21.png

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #15 on: February 19, 2017, 08:15 PM »
Hi Contro

You can try http://www.miniwebtool.com/sort-text-by-length/

I got below result,

[attachment 1 not found]

Regards,

Anand
This method works fine.

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #16 on: February 19, 2017, 08:16 PM »

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #17 on: February 19, 2017, 08:18 PM »
For reference: short AutoHotkey example (one of several you can find there on the forum) https://autohotkey.com/board/topic/23093-sort-a-text-file-according-to-line-length/?p=149560
Where have I to put the name of my txt file in the script ?

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,649
    • Participated in NANY Challenge Eleven Times
    • Coding Snacks
    • Linux User
    • Hardware Hacker
Re: Sort lines of a txt file by lenght of the string
« Reply #18 on: February 19, 2017, 08:36 PM »
If you apply the description of my TED Notepad procedure, copy/pasting the 'Output mask' values from here, you should be fine, I think I see at least 3 typos in your first screenshot, and then it only gets worse from there...
/Ton
Ath's software collection, Quote: "A problem well stated is a problem half-solved." (Charles Kettering)

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #19 on: February 19, 2017, 08:43 PM »
I am doing bad. I obtain an error with the python script.

The screenshots :

AsusPortatil - 19_02_2017 , 20_31_44.pngAsusPortatil - 19_02_2017 , 20_38_48.pngAsusPortatil - 19_02_2017 , 20_39_45.pngAsusPortatil - 19_02_2017 , 20_40_18.pngAsusPortatil - 19_02_2017 , 20_42_25.png

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #20 on: February 19, 2017, 08:47 PM »
If you apply the description of my TED Notepad procedure, copy/pasting the 'Output mask' values from here, you should be fine, I think I see at least 3 typos in your first screenshot, and then it only gets worse from there...
Don't worry I keep trying.

But it's strange for me. I think i am doing well.
Any option left ?

Lintalist

  • Participant
  • Joined in 2015
  • *
  • Posts: 122
Re: Sort lines of a txt file by lenght of the string
« Reply #21 on: February 19, 2017, 08:58 PM »
Where have I to put the name of my txt file in the script ?
The first line says
Code: ( autohotkey)
FileRead, text, %A_ScriptFullPath%
replace it with
Code: ( autohotkey)
FileRead, text, pathtoyour\file.txt
Assuming you want to save it replace MsgBox %text% with
Code: ( autohotkey)
FileDelete, pathtoyour\sortedfile.txt
FileAppend, %text%, pathtoyour\sortedfile.txt

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #22 on: February 19, 2017, 09:36 PM »
Where have I to put the name of my txt file in the script ?
The first line says
Code: ( autohotkey)
FileRead, text, %A_ScriptFullPath%
replace it with
Code: ( autohotkey)
FileRead, text, pathtoyour\file.txt
Assuming you want to save it replace MsgBox %text% with
Code: ( autohotkey)
FileDelete, pathtoyour\sortedfile.txt
FileAppend, %text%, pathtoyour\sortedfile.txt
Trying. Best Regards

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #23 on: February 19, 2017, 09:42 PM »
Where have I to put the name of my txt file in the script ?
The first line says
Code: ( autohotkey)
FileRead, text, %A_ScriptFullPath%
replace it with
Code: ( autohotkey)
FileRead, text, pathtoyour\file.txt
Assuming you want to save it replace MsgBox %text% with
Code: ( autohotkey)
FileDelete, pathtoyour\sortedfile.txt
FileAppend, %text%, pathtoyour\sortedfile.txt
Trying. Best Regards
I think I got. Is fast and easy. Best Regards

Contro

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 3,947
Re: Sort lines of a txt file by lenght of the string
« Reply #24 on: February 19, 2017, 09:43 PM »
If you apply the description of my TED Notepad procedure, copy/pasting the 'Output mask' values from here, you should be fine, I think I see at least 3 typos in your first screenshot, and then it only gets worse from there...
I think very interesting to load a python script.
It's new for me.

Can I try again ?
:-*

Original address: https://www.donationcoder.com/forum/index.php?topic=43525.0