Über's Holzschnitzen und Textschnitzen
"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
- Bergrettungssteig
- Emmysteig
- Fadensteig
- Ferdinand Mayr-Weg
- Fischersteig
- Franz-Josef-Promenade
- Hotelries
- Hochgang
- Krummbachgraben
- Kuhschneeberg
- Kuhsteig
- Lärchkogelgrat
- Nandlgraben
- Nandlgrat
- Nandlgrat (Alter Nandlsteig)
- Niederlauf
- Novembergrat
- Nördlicher Grafensteig
- Oberer Herminensteig
- Oktobergrat
- Stadelwandgraben
- Südlicher Grafensteig
- Unterer Herminensteig
- Waxriegel
- Weichtalklamm
Raxsteige
- Alpenvereinssteig
- Altenbergsteig
- Bärenlochsteig
- Brandschneide
- Camillo Kronich-Steig
- Gaisloch
- Gamsecksteig
- Gretchensteig
- Göbl Kühn-Steig
- Großes Fuchsloch
- Großes Wolfstal
- Großer Kesselgraben
- Ho Chi Minh Pfad
- Hoyossteig
- Karl Kantner-Steig
- Kaisersteig
- Kontruszsteig
- Kronich Eisenweg
- Martinsteig
- Peter Jokel-Steig
- Preinerwandsteig
- Raxenmäuersteig
- Reisstalersteig
- Rudolfsteig
- Schlangenweg
- Staudengraben
- Wildfährte
- Teufelsbadstubensteig
- Törlweg
- Waxriegelsteig
- Wachthüttelkamm
Geführte Touren
- Schneeberg Oktobergrat
- Gösing Hoyos-Steig
- Gösing und Flatzer Wand
- Gösing Hoyos-Steig
- Kienberg und Himberg
- Flatzer Wand und Gösing
- Gösing Hoyos-Steig
- Gahns Saurüssel
- Rax mit Schneeschuhen
- Himberg und Kienberg
- Flatzer Wand und Gösing
- Gösing Hoyossteig
- Prettschachersteig und Krummbachstein
- Schneeberg Oktobergrat
- Gösing Hoyossteig
- Semmering Bahnwanderweg
- Miesenbach Biedermeierrunde
- Gösing Hoyossteig
- Rax mit Schneeschuhen
- Flatzer Wand und Gösing
- Gösing Hoyossteig
- Schneeberg Novembergrat
- Schneeberg Grafensteig und Hengst
- Schneeberg Nandlgrat
- Gösing Hoyossteig
- Gahns Saurüssel
- Biedermeierrunde Miesenbach
- Gösing Hoyossteig
- Gösing Hoyossteig
- Rax mit Schneeschuhen
- Gahns Saurüssel
- Rax mit Schneeschuhen
- Gösing Hoyossteig
- Schneeberg Novembergrat
- Krummbachstein
- Schneeberg Oktobergrat
- Schneeberg Alter Nandlsteig
- Schneeberg Herminensteig
- Gösing und Flatzer Wand
- Rax mit Schneeschuhen
- Gösing Hoyossteig
- Schneeberg_Novembergrat
- Schneeberg Alter Nandlsteig
- Schneeberg Herminensteig
- Schneeberg Brandmauer und Stadelwand
- Schneeberg und Hengst
- Gösing Hoyos-Steig
- Rax mit Schneeschuhen
- Schneeberg Herminensteig und Hengst
- Schneeberg Novembergrat
- Schneeberg Herminensteig
- Schneeberg Herminensteig
- Schneeberg Alter Nandlsteig
- Miesenbach Biedermeierrunde
- Flatzer Wand und Gösing
- Dürre Leiten mit Schneeschuhen
- Rax mit Schneeschuhen
- Dürre Leiten mit Schneeschuhen
- Schneeberg Brandmauer
- Schneeberg Novembergrat
- Miesenbach Biedermeierrrunde
- Gahns Eng und Saurüssel mit Schneeschuhen
- Kuhschneeberg mit Schneeschuhen
- Novembergrat
- Nördlicher Grafensteig und Hengst
- Miesenbach Biedermeierrunde
- Flatzer Wand und Gösing
- Großes Wolfstal
- Alter Nandlsteig
- Herminensteigvariationen
- Gahns Saurüssel mit Schneeschuhen
- Dürre Leiten mit Schneeschuhen
- Kuhschneeberg mit Schneeschuhen
- Flatzer Wand und Gösing
- Großes Wolfstal
- Alter Nandlsteig
- Biedermeierrunde in Miesenbach
- Gahns Saurüssel und Eng