Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Sorting one column of results

by perlnoobster (Sexton)
on Nov 12, 2012 at 10:35 UTC ( #1003409=perlquestion: print w/replies, xml ) Need Help??
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 (Chancellor) 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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1003409]
Approved by Corion
[marinersk]: sub newtest{my $expected_result = &target('foo'); my $actual_result = &target('foo'); if ($actual_result eq $expected_result) { &tdd_success(); } else { &tdd_fail(); } } # Test works after three years!
[choroba]: or nobody bothered...
[choroba]: The problem was bigger, as the test tried to call a method that didn't exist anymore
[marinersk]: :: ducking ::
[choroba]: because, someone renamed the method, but didn't notice it was used in the test, as the test was skipped
[marinersk]: Well, if the method doesn't exist, it would be hard to pass the test.
[choroba]: later, someone removed the new method, as all its usage places were safe, but didn't notice the test still used the old name
[choroba]: fortunately, it wasn't that hard to replace the method and fix a few remaining failures due to the changes we did to the codebase over the years
[marinersk]: choroba Sounds like a process improvement opportunity; tests may not all need to be run, but they should all be compiled with perl -c before check-in/promotion happens.
[choroba]: so, now I have the test, so I can start making changes in the code. Back to the original ticket, yay!

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (15)
As of 2017-05-25 15:12 GMT
Find Nodes?
    Voting Booth?