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

perlnoobster has asked for the wisdom of the Perl Monks concerning the following question:

Hi Perl monks, I was wondering if someone could help me, I've constructed the following coding:
my $infile="orders.txt"; my $output2 = 'orders_today.txt'; open (OUT, "+>$output2"); open (FILE, $infile) or die "ERROR: File does not exist\n"; for (<FILE>) { my @text=(); #chomp; @text = split /\t/,$_; chomp @text; push (@connections,$text[0]); $sku{$text[0]}=$text[0]; $title{$text[0]}=$text[1]; print OUT "$text[10]\n$text[11]\nQuantity:$text[12]\n\n$text[16]\n +$text[17]\n$text[18]\n$text[19]\n$text[20]\n$text[21]\n$text[22]\n$te +xt[23]\n\n\n"; }
The coding basically opens a file and prints out another file with selected columns from the original file, all I need to do is sort it by $text 10 by (A to Z) Please can someone help me? Thank you

Replies are listed 'Best First'.
Re: Sorting one column of results
by choroba (Cardinal) on Nov 12, 2012 at 10:40 UTC
    Instead of printing to OUT, push [@text] to an array. Then, sort the array by { $a->[10] cmp $b->[10] } and print map @$_ it.
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      hello choroba, Thank you for replying, I have adjusted the coding to the following but it still does not work?, please help?
      my $infile="orders.txt"; my $output2 = 'orders_today.txt'; open (OUT, "+>$output2"); open (FILE, $infile) or die "ERROR: File does not exist\n"; for (<FILE>) { my @text =(); @text = split /\t/,$_; chomp @text; push (@text, $text[0]); push (@text, $text[1]); push (@text,$text[2]); push (@text,$text[3]); { $a->[10] cmp $b->[10] } print map @$_ }
        I assumed you knew more about Perl. My fault. When using a function you do not know yet, consult its documentation.
        Here is what I had in mind:
        #!/usr/bin/perl use warnings; use strict; my $infile = 'orders.txt'; my $output = 'orders_today.txt'; open my $IN, '<', $infile or die "ERROR: Cannot open '$infile': $!"; my @out; while (<$IN>) { chomp; my @text = split /\t/; push @out, [@text]; } open my $OUT, '>', $output or die "Cannot open '$output': $!"; print {$OUT} map "@$_\n", sort { $a->[10] cmp $b->[10] } @out;
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
Re: Sorting one column of results
by Anonymous Monk on Nov 12, 2012 at 10:41 UTC
    use sort, and then you're done