#!/usr/bin/perl -w
use strict;
print "Enter a filename to analyze: ";
my $file_read = <STDIN>;
chomp $file_read;
my %w_counter = ();
my %c_counter = ();
my $totalcount = 0;
my $charcount = 0;
my $p_val = 0;
my $var;
my $avglen;
open(FILE, "$file_read") or die "Could not open file: $!\n";
my @array = <FILE>;
close FILE;
foreach (@array) {
if (/\b\w+\-\w+\-$/) {
s/\n/ /sg;
$var .= $_;
}
elsif (/\b-$/) {
s/\b\-\n+/ /sg;
$var .= $_;
}
else {
s/\n/ /sg;
$var .= $_;
}
}
$var =~ s/-{2}/ /g;
$var =~ tr/[A-Z]/[a-z]/;
my $expr = q/([\w]+[-]?[']?(?:\w*)?[-]?(?:\w*)?)/;
my $subexpr = qr/$expr/;
while ($var =~ /$subexpr/g) {
$w_counter{$1}++;
}
sub sort_byval_w {
$w_counter{$b} <=> $w_counter{$a};
}
open(RESULTS, ">results.txt");
foreach my $key (sort sort_byval_w(keys %w_counter)) {
print RESULTS "The word $key was seen $w_counter{$key} times\n";
$totalcount += $w_counter{$key};
}
open(FILE, "$file_read") or die "Could not open file: $!\n";
while (<FILE>) {
while(/(.)/sg) {
$c_counter{$1}++;
}
}
close FILE;
sub sort_byval_c {
$c_counter{$b} <=> $c_counter{$a};
}
foreach my $key (sort sort_byval_c(keys %c_counter)) {
my $space = " ";
if ($key =~ /\t/) {
$p_val = $c_counter{$key};
delete $c_counter{$key};
$key = "<TAB>";
$c_counter{$key} = "$p_val";
}
elsif ($key eq "$space") {
$p_val = $c_counter{$key};
delete $c_counter{$key};
$key = "<SPACE>";
$c_counter{$key} = "$p_val";
}
elsif ($key =~ /\n/) {
$p_val = $c_counter{$key};
delete $c_counter{$key};
$key = "<NEWLINE>";
$c_counter{$key} = "$p_val";
}
elsif ($key =~ /\r/) {
$key = "<RETURN>";
$p_val = $c_counter{$key};
delete $c_counter{$key};
$c_counter{$key} = "$p_val";
}
print RESULTS "The char $key was seen $c_counter{$key} times\n
+";
$charcount += $c_counter{$key};
}
## Get avg numb words per sentance
my $sentences = $c_counter{"."} + $c_counter{"?"} + $c_counter{"!"};
my $avgwords_sent = $totalcount / $sentences;
my $avgwords_tot = $charcount / $totalcount;
print RESULTS "\n";
print RESULTS "-----------------------------\n";
print RESULTS "Total characters are: $charcount\n";
print RESULTS "Total words: $totalcount\n";
print RESULTS "Average words per sentence is: $avgwords_sent\n";
print RESULTS "Average length of words is: $avgwords_tot\n";
close RESULTS;
print "See results.txt for your results\n";
-
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.
|