Einordnung

  • Interaktionsmodus: kommandozeilen-basiert/shell
  • geschätzter Zeitaufwand:
    • Sprachneulinge: 3 - 4 Stunden
    • Spracherfahrene: 1 - 2 Stunden
  • Sprachempfehlung:
    • Nicht-funktionale Sprachen

Aufgabe

printlns (sprich: “print lines”) soll dazu dienen bestimmte Zeilen einer Eingabedatei auszugeben. Das Verhalten ist ähnlich zu den Unix-Tools head und tail bezieht sich jedoch auf spezielle Zeilen und erlaubt relative Zeilenangaben sowohl relativ zum Anfang als auch zum Ende der Datei.

Nun zur Aufgabenstellung:

  • Gegeben sei eine Eingabedatei über STDIN (Standard Input) auf der Kommandozeile (z.B. über Unix-Pipes).
  • Das Kommando printlns bekommt Argumente die Zeilenangaben entsprechen, wobei 1 der ersten Zeile der Eingabe entspricht und -1 der letzten Zeile.
  • Das Programm soll die Zeilen, die über die Kommandozeilenargumente angegeben werden auf STDOUT (Standard Output) ausgeben. Die Reihenfolge der Kommandozeilenargumente ist hierbei ausschlaggegebend.
  • Zeilennummern können wiederholt werden (und sollen mehrfach ausgegeben werden)

Beispiele

Beispiel 1

  • Datei:

    Erste Zeile
    Zweite Zeile
    Dritte Zeile
    Vierte Zeile
    Fünfte Zeile - Letzte Zeile
    
  • Aufruf: printlns 1 -1 2
  • Ausgabe:

    Erste Zeile
    Fünfte Zeile - Letzte Zeile
    Zweite Zeile
    

Beispiel 2

  • Datei:

    Erste Zeile
    Zweite Zeile
    Dritte Zeile
    Vierte Zeile
    Fünfte Zeile - Letzte Zeile
    
  • Aufruf: printlns 1 1 -5 -4 5
  • Ausgabe:

    Erste Zeile
    Erste Zeile
    Erste Zeile
    Zweite Zeile
    Fünfte Zeile - Letzte Zeile
    

Erweiterung

Wer noch nicht genug hat kann folgende zusätzliche Funktionen implementieren:

  • Es soll eine Kommandozeilenoption -f pfad/zur/datei geben. Wird diese Option angegeben wird die Datei anstelle von STDIN gelesen.
  • Unterstützung von Bereichen/Ranges:
    • Eine Angabe von 4,6 würde die Zeilen 4, 5 und 6 ausgeben.
    • Eine Angabe von -2,-10 würde alle Zeilen von -2 bis -10 (inklusive) ausgeben.
  • Ein Ausnahmemodus: Wird die Option -e (für except) gelten alle Zeilenangaben als Ausnahmen. Das bedeutet, dass alle Zeilen ausgegeben werden, die nicht den angegebenen entsprechen.