in reply to Sort rows in a csv file based on a date column

Hello,

I was looking at this question and got curious, so I wrote the script below to solve this using Text::CSV. But I'm not sure if this is the efficient way of doing this especially at the last lines where I am re-creating the CSV file.

Not sure if I can use the Text::CSV->combine and Text::CSV->string methods to re-create the CSV file.

Any comments?

#!/usr/bin/perl use strict; use Text::CSV; my $old_string; my $csv = Text::CSV->new(); while ( my $line = <DATA> ) { $old_string = $old_string . join( " ", $csv->fields() ) . "\n" if ( $csv->parse( $line ) ); } my @new_string = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_, (split)[4]] } split( /\n/, $old_string ); # Recreating the CSV data. foreach my $i (@new_string) { my $j = join "\",\"", split( " ", $i); print "\"$j\" \n"; } __DATA__ "Task1,Task2",ABC,ABC,Mon 05/22/2009,mbm "Task3,Task4",XYZ,XYZ,Mon 05/20/2009,mbm "Task5,Task6",ABC,ABC,Mon 06/25/2009,mbm "Task7,Task8",ABC,ABC,Mon 03/28/2009,mbm

Replies are listed 'Best First'.
Re^2: Sort rows in a csv file based on a date column
by Anonymous Monk on Apr 17, 2009 at 16:55 UTC
    Hi, Thanks for the response. I am looking for sorting a csv file based on a column of dates in such a way that, the output csv file will have rows with sorted dates (ascending). I have perl 5.6 and perl 5.8.3. So can't use modules to do this.