The following code is hanging up the browser and I think it has something to do with the hash having keys array and values array. There is no error message, just the browser taking a really long time. Any help would be appreciated. Works fine with 3 line, 12 word 1 kb text file but not with 7 kb text file.
#SNIP_OF_CODE_WHERE_HANGING_UP_BROWSER my %uniqueHash = (); my @uniqueArray; my @countsArray; @[EMAIL PROTECTED] = @countsArray;
for my $word (sort sort_values keys %uniqueHash) { $percentage = $uniqueHash{$word}/($totalcount); printf "%-15s %5d %5.3f \%\n", "$word", $uniqueHash{$word}, $percentage*100; if ($uniqueHash{$word} >= $mostvalue) { $mostvalue = $uniqueHash{$word}; $mostArray[$count] = $word; $mostValues[$count] = $uniqueHash{$word}; $mostHash{$mostArray[$count]} = $mostValues[$count]; $count++; } }
sub sort_values { $uniqueHash{$b} <=> $uniqueHash{$a} }
#SNIP_END#ALL_CODE #!/usr/bin/perl -w #file: wordcount2.cgi
use CGI qw/:standard/; use CGI::Carp 'fatalsToBrowser'; use strict;
print "Content-type: text/html \n\n";
my $file = param('upload');
my %uniqueHash = ();
my @uniqueArray;
my @countsArray;
@[EMAIL PROTECTED] = @countsArray;print_results() if param;
sub sort_values { $uniqueHash{$b} <=> $uniqueHash{$a} }
sub print_results {
print start_html(-title=>'Word Count 2'); if (!$file)
{
print "<h2>No file uploaded.</h2>";
return;
}#END IF print h2('File name'),$file;
print h2('File MIME type'),
uploadInfo($file)->{'Content-Type'};my $dashes = "----------------------------------------\n";
print "<h3>Processed:</h3>";
print "<h3>Extra Credit Sort by Descending Values</h3>"; if (param)
{
print "<p>$file</p>";
}
else
{
print "<p>the_raven.txt</p>";
} my $linescount = 0;
my $word;
my @totalArray;
my $totalcount = 0;
my $unique = 0;
my $nonunique = 0;
my $percentage = 0.00; while (<$file>)
{
chomp(@totalArray = split(/\W+/, "$_")); foreach $word (@totalArray)
{
$totalcount++;
$word = lc $word;
unless (exists $uniqueHash{"$word"} && $uniqueHash{$word} > 0)
{
$uniqueArray[$unique] = $word;
$countsArray[$unique] = 1;
$uniqueHash{$uniqueArray[$unique]} =
$countsArray[$unique];
$unique++;
}#END UNLESS
else
{
$uniqueArray[$nonunique] = $word;
$countsArray[$nonunique] = $uniqueHash{$word} + 1;
$uniqueHash{$uniqueArray[$nonunique]} =
$countsArray[$nonunique];
$nonunique++;
}#END ELSE
}#END FOREACH $linescount++;
}#END WHILE
my @mostArray;
my $mostword;
my @mostValues;
my $mostvalue = 0;
my $count = 0;
my $mostpercentage = 0;
my %mostHash = ();
@[EMAIL PROTECTED] = @mostValues;print "<pre>";
printf "%-15s %-10s %-10s\n", 'Word','Count','Percentage';
printf "%-35s", $dashes; my $i = 0;
for my $word (sort sort_values keys %uniqueHash)
{
$percentage = $uniqueHash{$word}/($totalcount);
printf "%-15s %5d %5.3f \%\n", "$word", $uniqueHash{$word},
$percentage*100;
if ($uniqueHash{$word} >= $mostvalue)
{
$mostvalue = $uniqueHash{$word};
$mostArray[$count] = $word;
$mostValues[$count] = $uniqueHash{$word};
$mostHash{$mostArray[$count]} = $mostValues[$count];
$count++;
} }#END FOREACH
printf "%-35s", $dashes;
printf "%-30s %-5d\n", "Total Number of Lines: ", $linescount; #ck
printf "%-30s %-5d\n", "Total Number of Words: ", $totalcount; #ck
printf "%-30s %-5d\n", "Total Number of Unique Words:", $unique;$i = 0;
for $mostword (sort keys %mostHash)
{
++$i;
printf "%-30s %-4s\n", "Most Used Word $i: ", "$mostword";
printf "%-30s %-5d\n", "Most Used Word $i Count: ",
$mostHash{$mostword};$mostpercentage = ($mostHash{$mostword}/$totalcount)*100;
printf "%-30s %-5.3f \%\n", "Most Used Word $i Percentage: ", $mostpercentage;
}
printf "%-35s", $dashes;
print "</pre>"; #check for matching tag
print end_html;}#END SUB exit(0); #END PROGRAM
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>
