Dr. Andreas Borchert Institut für Angewandte Informationsverarbeitung 23. Januar 2007
Christian Ehrhardt Blatt 11


Uni Logo



Allgemeine Informatik III (WS 2006/2007)


Abgabetermin 30.01. 2006

Spaltensummen

Die Funktion getopt

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.

Argumentverarbeitung

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.

Summen über Spalten

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.

Hinweis

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

Viel Erfolg!



Christian Ehrhardt 2007-01-23