Über's Holzschnitzen und Textschnitzen

Dieses Buch bei Amazon "So wie der Schreiner das Holz bearbeitet, bearbeiten pragmatische Programmierer Text", schreiben Andrew Hunt und David Thomas in ihrem bekannten Buch "Der Pragmatische Programmierer". Mit mächtigen Scriptsprachen mit Fähigkeiten zur effizienten Textbearbeitung und mit regulären Ausdrücken ist es gar nicht schwer, "wie mit der Fräsmaschine" über Texte herzufallen. Dazu ein keines Beispiel mit perl: :

Ein Text soll in Stücke "gehauen" werden. jedes Stück soll nicht länger als 130 Zeichen sein, und es sollen keine Wörter zertrennt werden. Diese Beispiel ist nicht aus der Luft gegriffen,sondern stammt aus einem E-Mail/SMS Gateway, programmiert mit perl und gnokii, dem GNU Nokia Toolkit.

In der ersten Zeile wird eine als Parameter übergebene Datei, oder bei deren Abwesenheit alles was von STDIN kommt, in die Variable $input eingelesen.

Daran anschließend wird der Text dann entsprechend der oben spezifizierten Regeln aufgespalten. Dank der mächtigen regulären Ausdrücke in perl ist dies in einer einzigen Zeile möglich: Der Ausdruck .{1,130}\s passt auf jedes Stück Text, welches aus beliebigen Zeichen besteht, zwischen einem und hundertdreißig Zeichen lang ist, und mit einem Leerzeichen aufhört. Alle so gefundenen Stücke werden von perl "automagisch" an ein Array @splitted übergeben.

Am Ende wird dann alles in einer kleinen Schleife ausgegeben.

#!/usr/bin/perl

my $input = join ("",<>);
my @splitted = $input =~ m/.{1,130}\s/gs;

foreach(@splitted) {
  print $_ . "\n" . "-" x 60 . "\n";
};
Füttert man das Programm mit dem folgenden Beispieltext (Aus der xskat(6) man page) Text
Jeder Spieler, beginnend mit Vorhand, darf den Skat aufnehmen
und 2 Karten verdeckt weitergeben. Es ist nicht erlaubt,
Buben zu schieben. Der Spielwert wird verdoppelt für jedes
Mal, das ein Spieler den Skat nicht aufnimmt. Spiele keinen
Schieberamsch (Voreinstellung). Am Ende des Ramschspiels geht
der Skat an den(die) Verlierer, wodurch sich der Verlust
erhöht. Der Skat geht an den Gewinner des letzten Stichs
(Voreinstellung). Er- laube den Gegnern 'Kontra' zu sagen,
was den Wert des Spiels ver- doppelt. Der Alleinspieler kann
mit 'Re' antwortet, was eine weitere Verdoppelung bewirkt.
Verbiete Kontra (Voreinstellung). Nur ein Gegner der
wenigstens 18 gesagt hat, darf 'Kontra' sagen. Spiele eine
Bock-Runde nach einem besonderen Ereignis. Der Spielwert der
folgenden 3 Spiele wird verdoppelt. Wenn innerhalb einer
Bock-Runde ein weiteres Bock-Ereignis eintritt oder mehrere
Bock-Ereignisse gleichzeitig geschehen, wird die
entsprechende Zahl Bock-Runden zusätzlich gespielt. Spiele
keine Bock-Runden (Voreinstellung). Spiele eine Runde Ramsch
nach jeder Bock- Runde. Bevor ein Ramsch beginnt, darf jeder
Spieler, beginnend mit Vorhand, erklären, ob er lieber Grand
Hand spielen will. Nach einem Grand Hand gibt derselbe
Spieler nochmal, weil dieses Spiel nicht zu den 3 Spielen
der Ramsch-Runde zählt.
so liefert es dieses Ergebnis:
Jeder Spieler, beginnend mit Vorhand, darf den Skat aufnehmen
und 2 Karten verdeckt weitergeben. Es ist nicht erlaubt,
Buben zu 
------------------------------------------------------------
schieben. Der Spielwert wird verdoppelt für jedes
Mal, das ein Spieler den Skat nicht aufnimmt. Spiele keinen
Schieberamsch 
------------------------------------------------------------
(Voreinstellung). Am Ende des Ramschspiels geht
der Skat an den(die) Verlierer, wodurch sich der Verlust
erhöht. Der Skat geht an 
------------------------------------------------------------
den Gewinner des letzten Stichs
(Voreinstellung). Er- laube den Gegnern 'Kontra' zu sagen,
was den Wert des Spiels ver- doppelt. 
------------------------------------------------------------
Der Alleinspieler kann
mit 'Re' antwortet, was eine weitere Verdoppelung bewirkt.
Verbiete Kontra (Voreinstellung). Nur ein Gegner 
------------------------------------------------------------
der
wenigstens 18 gesagt hat, darf 'Kontra' sagen. Spiele eine
Bock-Runde nach einem besonderen Ereignis. Der Spielwert der

------------------------------------------------------------
folgenden 3 Spiele wird verdoppelt. Wenn innerhalb einer
Bock-Runde ein weiteres Bock-Ereignis eintritt oder mehrere

------------------------------------------------------------
Bock-Ereignisse gleichzeitig geschehen, wird die
entsprechende Zahl Bock-Runden zusätzlich gespielt. Spiele
keine Bock-Runden 
------------------------------------------------------------
(Voreinstellung). Spiele eine Runde Ramsch
nach jeder Bock- Runde. Bevor ein Ramsch beginnt, darf jeder
Spieler, beginnend mit 
------------------------------------------------------------
Vorhand, erklären, ob er lieber Grand
Hand spielen will. Nach einem Grand Hand gibt derselbe
Spieler nochmal, weil dieses Spiel 
------------------------------------------------------------
nicht zu den 3 Spielen
der Ramsch-Runde zählt.

------------------------------------------------------------
Nichts als "saubere Schnitte" sozusagen. Einige Nacharbeiten mit "feinerem Schleifpapier" wie zum Beispiel das Entfernen mehrfacher Leerzeichen oder der Zeilenumbrüche sind hier allerdings noch erforderlich.

Alle Touren

Schneebergwege

Raxsteige

Geführte Touren

Perl

Literatur

Musik