Am Ende des Semesters möchten Sie bestimmt einen Schein für die Übungen. Dann stehen wir wieder vor der Aufgabe, ihre Punkte bei den Übungsblättern zu zählen. Dazu schreiben Sie jetzt schon ein Perl-Skript, um uns dabei zu unterstützen.
Gegeben ist eine (etwas veränderte Version) der kleinen Unix-Datenbank Ass_Done.db, die unter anderem die Spaltennamen nicht mehr enthält. Schreiben Sie ein Perl-Skript, das als (Kommandozeilen-)Argumente die Vorlesungs-ID, das Semester und den Login (des Studenten) erhält und dann die Punkte in allen Blättern (positive Nummern! - Klausuren haben negative Nummern) dieses Studenten in der angegebenen Vorlesung aufsummiert und ausgibt. Gibt es kein Blatt, so soll dies durch eine andere Ausgabe deutlich gemacht werden. Stimmt die Anzahl der Argumente nicht, so soll eine ,,Usage``-Meldung ausgegeben werden.
Beispiel:
theseus$ sum.pl Usage: ./sum.pl <lid> <semester> <login> theseus$ sum.pl CS104 SS2003 norm norm has 18 points. theseus$ sum.pl CS104 SS2003 abba No entry for abba. theseus$
Tipps:
^
ein Meta-Symbol in
regulären Ausdrücken ist.
my $var;
angelegte Variable ist noch nicht
initialisiert und hat den Wert undef
.
Dies kann mit dem defined
-Operator abgefragt werden.
Schreiben Sie ein kleines Perl-Skript, mit dem man eine kleine
Unix-Datenbank auf ein paar Spalten projezieren kann. Auf der
Kommandozeile muss als erstes Argument der Dateiname der Tabelle
und als weitere - mindestens eines - Argumente die Indizes der
Spalten in der Ausgabetabelle angegeben werden. Als Spaltentrenner
wird ^
verwendet. Die Ausgabetabelle soll keine Zeile mehrfach
enthalten. Die Spaltenindizes können in beliebiger Reihenfolge
angegeben werden und auch doppelt vorkommen.
Beispiel:
theseus$ cut.pl Usage: ./cut.pl <db> <index> {<index>} theseus$ cut.pl 1 Usage: ./cut.pl <db> <index> {<index>} theseus$ cut.pl Usage: ./cut.pl <db> <index> {<index>} theseus$ cut.pl Ass_Done.db 0 CS101 CS104 theseus$ cut.pl Ass_Done.db 1 0 1 SS2003^CS101^SS2003 SS2003^CS104^SS2003 theseus$
Tipps:
@liste[(0, 2, 4)]
erhalten Sie die Teilliste von
@liste
, die nur das erste, dritte und fünfte Element
enthält.
join
kann die Elemente einer Liste zu einem String
zusammen fügen.
sort
sortiert die Zeilen in der
Standardeingabe und schreibt sie auf die Standardausgabe.
Das Unix-Kommando uniq
eliminiert mehrfaches Autreten
derselben Zeile nacheinander und liest von STDIN und
schreibt nach STDOUT.
open(OUT, "| command");
kann man an eine
Kommandozeile ,,pipen``.
Viel Erfolg!