Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Textdatei einlesen und Zeilen nummerieren

Es soll eine Textdatei eingelesen werden, vor jede Zeile die Zeilennummer gesetzt werden und dann diese nummerierten Zeilen wieder ausgegeben werden.
 

einfaches Programm (nur für kleine Dateien)

use strict;
use warnings;

my $datei = $0;        # in der Spezialvariablen $0 steht der Name der Datei

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

# fuer jede Zeile setzen wir die Zeilennummer davor und geben diese aus
my $nummer = 1;                  # Initialisieren
foreach my $zeile (@zeilen) {
  print $nummer . ': ' . $zeile; # Ausgabe
  $nummer++;                     # Zeilennummer incrementieren
}

__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. z.B. so:

my @zeilen = ();
open FILE, '<', $datei or die "konnte $datei nicht zum Lesen oeffnen. $!\n";
while (my $zeile = <FILE>) {
  push @zeilen, $zeile;
}
close FILE;

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen.
  2. Ersetzen Sie das Einlesen durch die angegebene Variante mit der while-Schleife.
  3. Zeichnen Sie zu diesem Programm ein Struktogramm
  4. Verwenden Sie statt der Variablen $0 den Namen der Datei.
  5. Provozieren Sie eine Fehlermeldung, indem Sie den Dateinamen bewußt falsch schreiben.
  6. Informieren Sie sich über die Spezialvariable $0 und $! z.B. hier.
  7. Leiten Sie die Ausgaben in eine Datei um.
  8. Ergänzen Sie das Programm so, dass am Ende auch die Anzahl der Zeilen ausgegeben werden.

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   11.01.2015