Programmiersprachen
LVA 185.208, VL 2.0, 2009 S
3. Übungsaufgabe
Schreiben Sie ein Werkzeug zum händischen Klassifizieren von Dateien in einer dynamisch typisierten Scripting-Sprache (z.B. Perl, Python, PHP, Ruby, AWK), eventuell auch unter Zuhilfenahme von Shell-Scripts.
Das Werkzeug soll auf folgende Weise verwendbar sein:
- Das Werkzeug zeigt dem Benutzer den Inhalt von Dateien, eine Datei nach der anderen, erlaubt möglicherweise Änderungen der gerade gezeigten Datei und erwartet eine Eingabe die besagt, ob und wohin die Datei kopiert werden soll.
- Alle wichtigen Daten, die das Werkzeug benötigt, stehen in einer Konfigurationsdatei.
Diese Datei enthällt zumindest folgende Daten:
- Namen von Quelldateien, die vom Werkzeug nacheinander geöffnet werden sollen.
Diese Namen können Wildcards enthalten, sodass ein Name viele Dateien beschreiben kann - z.B. bilder/2009-04-*/*.jpg.
- Der Programmaufruf, der gemacht werden soll, um dem Benutzer eine Datei (einer bestimmten Art) zu zeigen und möglicherweise Änderungen zu erlauben.
Beispielsweise könnte eine Zeile jpg: gimp % in der Konfigurationsdatei bedeuten, dass für jede Datei mit der Endung jpg das Programm gimp mit dem Dateinamen als Argument aufzurufen ist.
Für Dateien mit anderen Endungen können andere Aufrufe spezifiziert sein.
- Kurzbezeichnungen für Zielordner, in die Dateien kopiert werden können.
Zum Beispiel könnte o bilder/ostern2009 spezifizieren, dass o für bilder/ostern2009 steht.
- Für jede in der Konfigurationsdatei angegebene Quelldatei erfolgt genau ein ebenso in der Konfigurationsdatei angegebener Programmaufruf in beliebiger Reihenfolge.
Nach Beendigung des aufgerufenen Programms erwartet das Werkzeug die Eingabe beliebig vieler Kurzbezeichnungen für Zielordner, in die die gerade behandelte Datei kopiert werden soll.
Es ist zu beachten, dass der Programmaufruf die Datei möglicherweise verändert; in diesem Fall soll die veränderte Datei (mit unverändertem Namen) in die angegebenen Zielordner geschrieben werden.
Falls ein und dieselbe Quelldatei durch verschiedene Namen in der Konfigurationsdatei spezifiziert wird, soll die Datei trotzdem nur ein einziges mal behandelt werden.
- Es kann zu Namenskonflikten in Zielordnern kommen.
In diesem Fall (und nur in diesem) sollen Dateien automatisch so umbenannt werden, dass die Namen eindeutig sind.
Es ist kein fixes Namensschema für umbenannte Dateien vorgegeben; legen Sie selbst eines fest.
Wenn zwei Dateien, die mit demselben Namen in denselben Zielordner kommen sollen, auch denselben Inhalt haben, dann soll keine Umbenennung erfolgen; es handelt sich nur um eine Datei.
- Zielordner und Quellordner können gleich sein.
Um dadurch mögliche Konflikte zu vermeiden, soll die Menge der zu bearbeitenden Dateien bereits unmittelbar nach Aufruf des Werkzeugs ermittelt und danach nicht mehr geändert werden.
Während der Ausführung des Werkzeugs hinzugekommene Dateien bleiben unberücksichtigt.
- Bei Beendigung des Werkzeugs wird ein Protokoll geschrieben.
Darin ist verzeichnet, welche Datei verändert, wohin kopiert und wie umbenannt wurde.
Ebenso sollen hier Fehler und Konflikte der Art gemeldet werden, dass eine zu bearbeitende Datei zum Zeitpunkt der Bearbeitung nicht existiert hat oder das ausgeführte Programm einen Fehlercode zurückgegeben hat.
Lösen Sie möglichst viele Teilaufgaben durch Verwendung der von der Programmiersprache und dem Betriebssystem (inklusive Systemwerkzeugen) bereitgestellten Resourcen.
Je kleiner und einfacher das Werkzeug wird, umso besser.