Universität Ulm - Abteilung Angewandte Informationsverarbeitung

 


12. Übungsblatt zur Vorlesung Allgemeine Informatik III


Abgabetermin: Dienstag, 03.01.2004


Cut    (10 Punkte)



Unter Unix zählen viele Kommandos zu den Filtern. Ein Filter liest Daten von der Standardeingabe (stdin) ein, bearbeitet bzw. ,, filtert`` diese Daten und gibt das Ergebnis auf der Standardausgabe (stdout) wieder aus. Fehler werden auf die Fehlerausgabe (stderr) geschrieben.


Ein bekanntes Filterkommando zum Bearbeiten von sog. ,,kleinen Unix-Datenbanken`` ist cut. Diese Textdateien enthalten pro Zeile einen Datensatz, wobei die Attributwerte durch ein Trennzeichen getrennt sind. Beispiel (Inhalt der Datei logins):

lob:Bettina Milchglas:3.2.1981
thomas:Thomas Muster:17.11.1977
rubby:Ulrike Huber:13.2.1978
aber:Markus Lüge:1.1.1980
ray:Raimund Zurzel:3.5.1979

Mit cut können nun einzelne Spalten aus einer solchen Tabelle in Textform gefiltert werden.


Implementieren Sie eine vereinfachte Version von cut, mit folgenden Optionen:


Im Hauptprogramm soll stets von stdin gelesen und nach stdout geschrieben werden. Alles andere soll über Umlenkungen (von Standardeingabe und Standardausgabe) realisiert werden. Von Standardeingabe können sie nach einer Umlenkung immer noch wie gehabt mit fgets(), etc. lesen und auf die Standardausgabe können Sie nach der Umlenkung ebenfalls wie gehabt mit printf(), etc. schreiben. Die Argumentverarbeitung soll mit getopt() realisiert werden. Siehe hierzu die Beispiele in den Übungen.

Sie dürfen vereinfachend annehmen, dass eine Zeile nie länger als 1000 Zeichen ist.


Beispiele:


cut -d: -f3 logins: Extrahiert aus der Datei logins die 3. Spalte:

3.2.1981
17.11.1977
13.2.1978
1.1.1980
3.5.1979


cut -d: -f3,1,2 logins: Extrahiert aus der Datei logins die Spalten 3, 1 und 2 (aber in der Reihenfolge 1, 2, 3!):

lob:Bettina Milchglas:3.2.1981
thomas:Thomas Muster:17.11.1977
rubby:Ulrike Huber:13.2.1978
aber:Markus Lüge:1.1.1980
ray:Raimund Zurzel:3.5.1979

Tipp: Einfach mal in die Manpage von cut reinschauen und das Kommando testen. Wir implementieren jedoch eine vereinfachte Version!



Viel Erfolg!



Hans Braxmeier