I am trying to do the following
I have some data which looks like
1,ABC,X,1.203000e+02
1,ABC,Y,7.830000e+00
2,DEF,X,1.212400e+02
2,DEF,Y,8.810000e+00
3,GHI,X,1.180700e+02
3,GHI,Y,8.550000e+00
5,JKL,X,1.193500e+02
5,JKL,Y,7.270000e+00
.
.
.
Anyway, I want to use the first column in each line as a unique key for a hash, (e.g. 1,2,3,5 .. and so on). I am doing this as follows
while (<NEWDATA>){ # where NEWDATA points to a file with the comma del
+imited data
$currLine = $_; # current, comma-delimited line
chomp $currLine;
@formatDataArray = split(/,/,$currLine); #split at comma
push (@newArray, $formatDataArray[0]); # push first column into ne
+wArray
# print OUT "@newArray\n";
}
foreach my $item(@newArray){ # get unique array elements
$seen{$item}++;
}
# numerical sort on keys and add to array
@uniq = sort {$seen{$a} <=> $seen{$b} } keys %seen;
# print to see if things look right
foreach my $element(@uniq){
print OUT "$element\n";
}
the results of the print command at the end are still random, i.e. not
1
2
3
5
Any ideas. I am sure I am overlooking something very trivial.
mndoci
"What you do in this world is a matter of no consequence. The question is, what can you make people believe that you have done?"-Sherlock Holmes in 'A study in scarlet'
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.