Hallo,
ich habe einen Roman in digitaler Form in einer Textdatei, wo ich nun die Zeichenhäufigkeit der einzelnen Zeichen ermitteln möchte.
Die Ausgabe soll in einer Liste erfolgen, wo alle ASCII-Zeichen Aufgelistet werden. Ist eins von den Zeichen auch in dem TExt vorhanden steht dort hinter die Häufigkeit.
Diesen Code habe ich entwickelt:
<code>
my $kapitel = "";
Textdatei zum Lesen öffnen, wenn nicht vorhanden Fehlermeldung ausgeben und beenden
open(GEDICHT, "<Stechlin-01.txt") || die "Das Gedicht wurde nicht gefunden\n";
undef $INPUT_RECORD_SEPARATOR; # satzweises Lesen unterdrücken
$kapitel = <GEDICHT>; # Eingabedatei wird vollständig in
# diese Zeichenkette eingelesen
Datei schließen
close(GEDICHT);
Länge des Skalars bestimmen
my $laenge = length($kapitel);
my %haeufig = ();
Häufigkeiten für jedes Zeichen in den Hash schreiben
for(my $i=0; $i<$laenge; $i++) {
my $tmp = chop($kapitel);
$haeufig{$tmp} += 1;
}
Ausgeben der Häufigkeiten
my $anzahl = "";
for(my $i=0; $i<=255; $i++) {
my $tmp = chr($i);
if($haeufig{$tmp}) {
$anzahl = $haeufig{$tmp};
}
else {
$anzahl = "";
}
#print $hallo . "\n";
my $ASCII_Zeichen = chr($i);
print sprintf("%#2x", $i) . " " . $ASCII_Zeichen . ": " . $anzahl . "\t\t";
if($i%4==0) {
print "\n";
}
}
</code>
Es funktioniert soweit alles, bis auf das die Ausgabe nicht, da einige Steuerzeichen die Ausgabe "verunstalten".
Wie muss ich den sprintf Aufruf anders tätigen, damit alles ordentlich formatiert ausgegeben wird?
Danke