Dr. Andreas Borchert Institut für Angewandte
Informationsverarbeitung 23. Januar 2007
Christian Ehrhardt Blatt 11
Allgemeine Informatik III (WS 2006/2007)
Abgabetermin 30.01. 2006
Um Kommandozeilen-Optionen, wie sie bei UNIX-Kommandos üblich
sind, auf einfache Weise zu verarbeiten, gibt es die
Bibliotheksfunktion getopt. Lesen Sie bitte die
mittels man -s3c getopt auf unseren Suns abrufbare
Manualseite zu dieser Funktion durch.
Im nächsten Schritt, soll die Funktion getopt verwendet
werden, um die folgenden Kommandozeilen-Optionen eines Programms
zu verarbeiten. Im Falle von fehlerhaften Aufrufen soll eine
passende Fehlermeldung auf stderr ausgegeben werden.
Hier wird zunächst nur die Syntax der erlaubten Optionen beschrieben,
die dazugehörige Funktionalität folgt im nächsten Abschnitt.
- -h
- Wenn diese Option angegeben wurde, dann wird eine
kurze Hilfe zur Bedienung auf stderr ausgegeben
und das Programm beendet.
- -o datei
- Diese Option gibt die Datei an, in die
die normale Ausgabe des Programms erfolgen soll. Diese
Option darf höchstens einmal vorkommen und wenn sie vorkommt,
muß die angegebene Datei zum Schreiben geöffnet werden
können.
- -d zeichen
- Diese Option darf nur einmal vorkommen. Ihr
Argument ist ein einzelnes Zeichen, das später als
Spaltentrenner dient. Wird -d nicht angegeben, dann ist
die Voreinstellung ein Tabulator (
\t
). Ein Newline ist als
Argument für diese Option nicht zulässig.
- -c integer
- Diese Option kann mehrmals und muß mindestens
ein Mal angegeben werden. Jedes Mal muß das zugehörige
Argument eine positive ganze Zahl sein. Alle diese Zahlen
müssen unter Beibehaltung der Reihenfolge irgendwo
gespeichert werden.
- Dateiname
- Nach allen Optionen darf noch maximal ein
weiteres Argument folgen, das einen Dateinamen für die
Eingabe des Programms angibt. Wird keine Datei angegeben,
ist die Standardeingabe zu verwenden. Falls eine Datei
angegeben wurde, muß diese existieren und zum Lesen
geöffnet werden können.
Implementieren Sie zunächst ein Programm, das die Argumentverarbeitung
so wie hier beschrieben durchführt, ohne weitere Funktionalitäten
zu implementieren.
Jetzt soll noch etwas Funktionalität implementiert werden:
- Die auf der Kommandozeile angegebene Datei wird zeilenweise
eingelesen, bis das Dateiende erreicht ist.
- Jede Zeile wird in Spalten zerlegt, dabei dient das über
die Option -d angegebene Zeichen als Spaltentrenner.
- Die über die Option -c angegebenen Zahlen
sind Spaltennummern.
- Für jede per -c angegebenen Spalte wird
eine Summe über die Zahlen in dieser Spalte gebildet.
- Wenn der Anfang einer Spalte in einer Zeile nicht als
Zahl interpretiert werden kann, oder wenn die Spalte mit
der entsprechenden Nummer in einer Zeile garnicht vorkommt,
dann wird für diese Zeilen 0 addiert.
- Am Ende werden die errechneten Summen in die durch die
Option -o angegebene Datei geschrieben. Als Trenner
zwischen den einzelnen Summen dient wieder das Zeichen, das
per -d schon für die Eingabe als Trenner angegeben
wurde.
Wer die stralloc-Bibliothek verwenden möchte, sollte den
gcc wie folgt aufrufen:
gcc -I/usr/local/diet/include/ -Wall sum.c -L /usr/local/diet/lib/ -lowfat
Christian Ehrhardt
2007-01-23