Perl: sort string alphabetically, or remove dupe chars?
Nikolas Britton
nikolas.britton at gmail.com
Thu Apr 27 20:10:38 UTC 2006
On 4/27/06, Andrew Reitz <ajr9 at po.cwru.edu> wrote:
>
> On Apr 26, 2006, at 12:34 AM, Nikolas Britton wrote:
>
> > On 4/25/06, Parv <parv at pair.com> wrote:
> [snip]
> > Thanks parv... I meant the algorithm was clunky, not the code... I'm
> > so new at this that I can't read your code, and I have a hard enough
> > time reading mine own :-).
> >
> > I've got another simple problem now. How do I get this code to stop
> > printing everything on a newline, I'm not using \n in my print
> > statement so why does it do that and how do I get it to stop?
> >
> > @wordlist1 = `sed /^$sedstring1\\\$/\\!d < enable2k_wordlist`;
> > foreach (@wordlist1) {
> > $string = $_;
> > $string =~ s/[$solvedletters1]//g;
> > my @chars = split("", $string);
> > $string = ""; @chars = sort (@chars);
> > foreach (@chars) {
> > $string .= $_;
> > }
> > $string =~ tr///cs;
> > print "$string";
> > }
>
> Hi Nikolas,
>
> Most likely, your input has '\n' characters at the end of every line,
> and you aren't doing anything in perl to strip those away. Try adding
> a 'chomp($string);' line before you print.
>
Hey thanks, I think I did try that already... anyways... it doesn't
matter now because I reworked the code block, this is what I have so
far:
open(DATA, "< $wordlistfile")
or die "Couldn't open $wordlistfile for reading: $!\n";
$regex = qr{^$sedstring1$};
my %freq; #keys = characters, values = frequency count
while (<DATA>) {
chomp;
if (/$regex/) {
push @guesswords, "\n$_";
$_ =~ s/[$solvedletters1]//g;
my @chars = split("", $_);
$_ = ""; @chars = sort (@chars);
foreach (@chars) {
$foobar3 .= $_;
}
$_ = "$foobar3"; $foobar3 = "";
$_ =~ tr///cs;
#print "$_\n"; # For debugging
$freq{$_}++ for split(//, lc $_);
}
}
$_ = scalar @guesswords;
print " Guesswords in list: $_\n";
if (@guesswords <= "20") {
print "@guesswords\n\n";
}
# Print probabilities list.
foreach $_ (sort {$freq{$a} <=> $freq{$b}} (keys(%freq))) {
print " $_\t=>\t$freq{$_}\n";
}
--
BSD Podcasts @ http://bsdtalk.blogspot.com/
More information about the freebsd-questions
mailing list