in reply to Re: difficulty in sorting
in thread difficulty in sorting

Tanktalus, Thanks for your code and the instructions are great.
As i mentioned earlier, I need to sort the lines that start with "<ref" and with in the <address>...</address> range. Though your code sorts, it is not checking the range <address>...</address>. i.e. if the data contains
<ref refid="aff2">2</ref> <ref refid="aff1">1</ref> <address> <state>address1</state> <ref refid="aff1">1</ref> <ref refid="aff2">2</ref> <ref refid="e2"/> <ref refid="e4"/> <ref refid="aff4">4</ref> </address>
the first two "<ref"s outside <address> is also getting sorted.

Replies are listed 'Best First'.
Re^3: difficulty in sorting
by RMGir (Prior) on Aug 21, 2008 at 09:21 UTC
    It sounds like all you need is a minor tweak to Tanktalus's code then:
    #! /usr/bin/perl -w use strict; my @sortable; my $inAddrRange=0; while ( <DATA> ) { # are we starting an <address> range? $inAddrRange=1 if /<address>/; # are we ending a range with </address>? $inAddrRange=0 if m{</address>}; # are we in the ref's AND in an addr range? if ($inAddrRange && /^\<ref/) { # keep track of it, but don't print it out yet. push @sortable, $_; next; } # else, are we done ref's? if (@sortable) { print for sort @sortable; # done with them, get rid of 'em. @sortable = (); } # this line can be printed out at this point. print; } __DATA__ [ same as yours, so I'm not repeating it ]
    I haven't tested this, but I think it'll do what you want...

    Mike