Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Wörter zählen

Es soll eine Textdatei eingelesen werden, von jeder Zeile die Wörter gezählt und diese Anzahl aufsummiert werden. Diese Gesamtanzahl der Wörter wird ausgegeben.
 

Programm

use strict;
use warnings;

# hier wird der Name der Datei angegeben, die eingelesen werden soll
my $datei = 'gausssumme.pl';

open FILE, '<', $datei or die "konnte $datei nicht zum Lesen oeffnen. $!\n";
my @zeilen = <FILE>;             # wir lesen die Datei ein
close FILE;                           # wir schliessen das Dateihaendel

# globale Variable
my ($anzahl_in_zeile, $anzahl_gesamt, @temp);

# für jede Zeile tuen wir
foreach my $zeile (@zeilen) {
  chomp $zeile;                     # wir entfernen das Zeilenende
  @temp = split / /, $zeile;      # wir zerlegen die Zeile an den Leerzeichen
  $anzahl_in_zeile = scalar @temp;
  $anzahl_gesamt  += $anzahl_in_zeile;
}

print "Die Datei \"$datei\" hat $anzahl_gesamt Woerter. \n";

__END__

 

Der Aufruf sah bei mir so aus:


Anmerkung: für große Textdateien wie z.B. Logfiles sollte man die Dateien mit einer while-Schleife einlesen. siehe textdatei.html

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen.
  2. Testen Sie das Programm mit einer anderen Datei.
  3. Überprüfen Sie durch nachzählen, ob die ermittelte Anzahl korrekt ist. Erklären Sie das Problem, welches insbesondere bei Quelltexten auftritt.
  4. Damit das Programm von sich selbst die Wörter zählt, verwenden Sie die Variable $0 für den Namen der Datei.
  5. Ändern Sie die Zeile mit split so ab:   @temp = split / +/, $zeile;   Testen Sie!
  6. In der Ausgabe werden 2 Variable genutzt. Der Dateiname wird in doppelten Anführungsstrichen geschrieben. Erklären Sie dabei die Verwendung der Backslashs.
  7. Ändern Sie das Programm so ab, dass der Dateiname der einzulesenden Datei als Parameter übergeben wird.

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   17.05.2015