[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sorting lines by length

From: Pascal J. Bourguignon
Subject: Re: Sorting lines by length
Date: Wed, 17 Sep 2014 04:14:26 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

"Loris Bennett" <address@hidden> writes:

> Hi,
> Is there a canonical way of sorting lines by length, longest first?
> I have a file with which might look like this:
> 7-Jan-2013 node025 node061
> 14-Jan-2013 node025 node034 node061
> 21-Jan-2013 node025 node034 node050 node061
> 28-Jan-2013 node025 node034 node061
> 4-Feb-2013 node025 node034 node061
> 11-Feb-2013 node025 node034 node061
> 18-Feb-2013 node034
> 25-Feb-2013 node034
> 11-Mar-2013 node025
> I actually just need the longest line first.  For the example above this
> is quite easy to see, but in the real file, there are around 100 lines
> and the longest might have around 1000 characters.
> My use case is reading the data into an R data frame.  The number of
> columns in the resulting data frame seems to be determined by the number
> of items in the first line.

You want the longest line.  This is quite different than wanting to sort

Finding the longest line is a O(n) operation.
Sorting lines is a O(n*log(n)) operation.

(defun goto-longest-line () 
  (let ((max-line-start 0)
        (max-line-length 0))
    (goto-char (point-min))
    (while (< (point) (point-max))
      (let ((start (point)))
        (let ((length (- (point) start)))
          (if (< max-line-length length)
             (setf max-line-length length
                   max-line-start  start)))))
    (goto-char max-line-start)
    (set-mark (+ max-line-start max-line-length))))

__Pascal Bourguignon__       
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk

reply via email to

[Prev in Thread] Current Thread [Next in Thread]