Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Sorting - Help needed

Posted on 2006-11-28
8
Medium Priority
?
255 Views
Last Modified: 2010-03-05
My perl program parses data and outputs the relevant values I need into an array.
(code has a series of ifels conditions I check).

push (@array1,$var1, ",", $var2, ",", $var3, ",", $var4, ",", $var5, ",", $var6,"\n");


The output.csv file contains 6 columns, namely, var1, var2,....var6.
I need to sort my output.csv file first by $var4 and then by $var5. I would appreciate if you could:
1) Tell me what are the ways this can be achieved.

2) Code that would do this (with a brief explanation)


0
Comment
Question by:nathan_007
8 Comments
 
LVL 85

Expert Comment

by:ozo
ID: 18029316
while( <> ){
my ($var1, $var2, $var3, $var4, $var5, $var6) = split/,/;
push @array,"$var4\0$var5\0$var1, $var2, $var3,  $var4, $var5, $var6\n";
}
@array = map{/.*\0(.*)/s}sort @array;
print @array;

0
 

Author Comment

by:nathan_007
ID: 18031286
Thanks. In most cases $var4 and $var5 are 5 digit integers. However I enocuntered an issue when $var5 happened to be a 4 digit number.

10012, 3068 appeared after 10012, 10078

3068 needs to be as 03068 in the array.

How do I format $var4 and $var5 it in the array to be of 5 digits in length.....something similar to sprintf"%05d" ????
0
 
LVL 5

Expert Comment

by:Alkali_Guy
ID: 18031423
$var4 = "0".$var4 if (length($var4)==4);
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:nathan_007
ID: 18031600
Alkali_Guy:
I agree that it works if the length is 4 digits. Is there a generic check I can do and round it to 5 digits assuming $var5 can be of length 1 or 2 or 3 or 4 or 5.
0
 
LVL 28

Accepted Solution

by:
FishMonger earned 200 total points
ID: 18032171
$var5 = sprintf("%05d", $var5);
0
 
LVL 85

Assisted Solution

by:ozo
ozo earned 200 total points
ID: 18032196
push @array,sprintf"%6d\0%6d\0%s\n",$var4,$var5,"$var1, $var2, $var3,  $var4, $var5, $var6";
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Email validation in proper way is  very important validation required in any web pages. This code is self explainable except that Regular Expression which I used for pattern matching. I originally published as a thread on my website : http://www…
A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans

971 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question