[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" <loris.bennett@fu-berlin.de> 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
lines.
Finding the longest line is a O(n) operation.
Sorting lines is a O(n*log(n)) operation.
(defun goto-longest-line ()
(interactive)
(let ((max-line-start 0)
(max-line-length 0))
(goto-char (point-min))
(while (< (point) (point-max))
(let ((start (point)))
(forward-line)
(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__ http://www.informatimago.com/
“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