http://www.perlmonks.org?node_id=920305


in reply to Re^2: Sorting dates with the Schwartzian Transform
in thread Sorting dates with the Schwartzian Transform

I've Googled and tried a lot last week, but I'm stuck (on the syntaxis).

I hope you understand my message despite the wording

Actually it seems more like you're stuck on syntax and arrays.

You need to read perlintro and Basic debugging checklist and How do I post a question effectively? and References quick reference

Also, when you have a program, with real, named variables, talking about columns can get confusing , talk about your variables instead ;)

The code you pasted will never have a 12 element array, nor do you want one.

I would go back to

my @sorted = map substr($_, 8), sort map join('', (/(..)-(..)-(....)/)[2,1,0], $_), @dates; # DD-MM-YYYY
Don't get it? To understand, you would write a program like this
#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; my @dates = qw[ 08-15-2011 08-10-2011 08-05-2011 ]; print "\ndates ", Dumper( \@dates ); #~ my @firstTransform = map join('', (/(..)-(..)-(....)/)[2,1,0], $_) +, @dates; # DD-MM-YYYY my @firstTransform = map join('', ReorderForCmp($_), $_), @dates; # +DD-MM-YYYY print "\nfirstTransform ", Dumper( \@firstTransform ); my @firstSorted = sort @firstTransform ; print "\nfirsSorted ", Dumper( \@firstSorted ); my @finalTransform = map substr($_, 8), @firstSorted ; print "\nfinalTransform ", Dumper( \@finalTransform ); sub ReorderForCmp { my( $one ) = @_; my @date = $one =~ /(..)-(..)-(....)/; #~ return @date[2,1,0]; return $date[2], $date[1], $date[0]; } __END__
which produces this output
dates $VAR1 = [ '08-15-2011', '08-10-2011', '08-05-2011' ]; firstTransform $VAR1 = [ '2011150808-15-2011', '2011100808-10-2011', '2011050808-05-2011' ]; firsSorted $VAR1 = [ '2011050808-05-2011', '2011100808-10-2011', '2011150808-15-2011' ]; finalTransform $VAR1 = [ '08-05-2011', '08-10-2011', '08-15-2011' ];
So yes, it is possible to "map two columns date and time", just adjust sub ReorderForCmp to return iso-8601 style datetime ( YYYYMMDDHHMMSS)

Replies are listed 'Best First'.
Re^4: Sorting dates with the Schwartzian Transform
by Wobbel (Acolyte) on Aug 16, 2011 at 19:17 UTC

    I think it is time to make some excuses. I guess I'm a little bit desperate because of complete exhaustion. The last nine years I wrote a couple of Perlscripts and read/practised on a regular basis. Even our first two babyboys were no problem at all. But since eleven weeks, we got a lovely babygirl.

    Sleep(10000); doesn't work for her....

    If I look at my old code, It's easy to understand.

    But a new improvent with only a half line of code...(OK, three lines. I'm not a pro)

    I just don't see it anymore!

    Thanks for your patience and the advice / links. I know them all and a few more.

    Let me sleep for a week in a monastery or so and I will finish the last lines of code :-) .