UUGRN Stammtisch.sh: Unterschied zwischen den Versionen

Aus UUGRN
(Script und Funktionsweise.)
 
(Neuer Termin und Neue Location für den UNIX Stammtisch in Mannheim, neues Script)
Zeile 1: Zeile 1:
Dieses Script ermittelt durch Ausnutzen von Seiteneffekten die [[UUGRN:Stammtisch|Stammtischtermine]] in Mannheim und Heidelberg und gibt passenden SQL-Code für die Kalender-Tabelle aus.  
Dieses Script ermittelt die [[UUGRN:Stammtisch|Stammtischtermine]] in Mannheim gibt passenden SQL-Code für die Kalender-Tabelle aus.  


== Funktionsweise ==
== Funktionsweise ==
Mittels [[gdate|GNU date]] wird für alle in Frage kommenden Tage der Wochentag ''%u'' ausgegeben, dieser wird von folgenden [[sed]]-Ausdruck mit 3 für Mittwoch = Heidelberg und 4 für Donnerstag = Mannheim umgewandelt. Durch die ''for D''-Schleife werden nur die in Frage kommenden Tage durchlaufen, daher kann es keine ''false positives'' geben.
; gegeben:
Der Stammtisch findet immer am 2. Mittwoch im Monat um 20 Uhr in der Tomate in Mannheim (ORT_ID=7) statt.
; Bedingungen:
Der 2. Wochentag eines Monats ist immer zwischen dem 8. und dem 14., der Mittwoch ist Wochentag Nummer 3.


Die abschließende ''while''-Schleife übernimmt die Ausgabe von ''sed'' und erzeugt das passende, hier ''unix epoch''-Zeitformat und die restlichen Felder.
; Code:
Die beiden for-Schleifen durchlaufen für alle Monate alle Tage von 8 bis 14. Dabei wird für ein gegebenes Jahr ein Datum im ISO-Format erzeugt und an GNU-date übergeben.
GNU-date erzeugt das Ausgabeformat
Wochentag|ISO-Datum|UNIX-Timestamp


== Script ==
Mit grep werden alle Zeilen ausgefischt, die mit 3 beginnen, das ist jeweils der Mittwoch. Alle anderen Zeilen werden verworfen.
    1  #! /bin/sh
Die folgende while-Schleife erzeugt den SQL-Output für die Kalender-Tabelle.  
    2  #
 
    3  # Berechnet die UUGRN-Stammtische und erzeugt das SQL für die Datenbank
Dabei wird das ISO-Datum hier nicht verwendet, es dient lediglich der Kontrolle. Sollte eine Tabelle gefüllt werden, die statt eines Integer-Wertes (Timestamp) ein echtes Datum erwartet, kann dieses hier verwendet werden.
    4  #
 
    5  # Jeden 2. Donnerstag im Monat um 19 Uhr in Mannheim (ORT=5)
 
    6  # Jeden 4. Mittwoch im Monat um 20 Uhr in Heidelberg (ORT=6)
== Bourne-Shell-Code ==
    7  #
  J=2009
    8  # Das Scriptgeht von der Annahme aus, dass der 2. Donnerstag im Monat immer zwischen dem 8. und 14. liegen muss
  for M in 1 2 3 4 5 6 7 8 9 10 11 12; do  
    9  # und dass der 4. Mittwoch im Monat immer zwischen 22. und 28. liegt.
   for T in 8 9 10 11 12 13 14 ; do  
    10  # Die Schleifen als auch der egrep | sed Ausdruck gehen direkt darauf ein.
     gdate "+%w|%Y-%m-%d %H:%M:%S|%s" --date "$J-$M-$T 20:00:00"  
    11  #
   done  
    12  #
  done |  
    13  # Raphael.Becker <rabe@uugrn.org>
  grep ^3 |  
    14
  while IFS='|' read WT DAT TS; do
    15 JAHR=2007
  echo "insert into KALENDER set ID=0, DATUM=$TS, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';"
    16
done
    17 for M in 01 02 03 04 05 06 07 08 09 10 11 12; do
 
    18   for D in 08 09 10 11 12 13 14 22 23 24 25 26 27 28 ; do
 
    19     gdate "+%u %d %Y-%m-%d" --date "$JAHR-$M-$D"
== Ausgabe für 2009 ==
    20   done
insert into KALENDER set ID=0, DATUM=1231959600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    21 done |
insert into KALENDER set ID=0, DATUM=1234378800, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    22 egrep "^(4 [01]|3 2)"  |
insert into KALENDER set ID=0, DATUM=1236798000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    23 sed -e 's,^3 [0-9]* ,20:00:00|6|"kleiner" Stammtisch|,;
insert into KALENDER set ID=0, DATUM=1239213600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    24          s,^4 [0-9]* ,19:00:00|5|Stammtisch|,;'  |
insert into KALENDER set ID=0, DATUM=1242237600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    25 while IFS='|' read ZEIT ORT BEZ DATUM junk; do
insert into KALENDER set ID=0, DATUM=1244656800, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    26    echo "insert into KALENDER set ID=0, DATUM=$(gdate +%s --date "$DATUM $ZEIT"), ORT_ID=$ORT, TEXT='$BEZ';"
  insert into KALENDER set ID=0, DATUM=1247076000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
    27 done
  insert into KALENDER set ID=0, DATUM=1250100000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1252519200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1255543200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1257966000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
  insert into KALENDER set ID=0, DATUM=1260385200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';


== Ausgabe für 2007 ==
$ '''bin/uugrn_stammtischkalender.sh'''
insert into KALENDER set ID=0, DATUM=1168538400, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1169665200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1170957600, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1172689200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1173376800, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1175104800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1176397200, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1177524000, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1178816400, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1179943200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1181840400, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1182967200, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1184259600, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1185386400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1186678800, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1187805600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1189702800, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1190829600, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1192122000, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1193248800, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1194544800, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1196276400, ORT_ID=6, TEXT='"kleiner" Stammtisch';
insert into KALENDER set ID=0, DATUM=1197568800, ORT_ID=5, TEXT='Stammtisch';
insert into KALENDER set ID=0, DATUM=1198695600, ORT_ID=6, TEXT='"kleiner" Stammtisch';


[[Kategorie:Script]]
[[Kategorie:Script]]
[[Kategorie:Verein]]
[[Kategorie:Verein]]

Version vom 18. Juni 2008, 19:40 Uhr

Dieses Script ermittelt die Stammtischtermine in Mannheim gibt passenden SQL-Code für die Kalender-Tabelle aus.

Funktionsweise

gegeben

Der Stammtisch findet immer am 2. Mittwoch im Monat um 20 Uhr in der Tomate in Mannheim (ORT_ID=7) statt.

Bedingungen

Der 2. Wochentag eines Monats ist immer zwischen dem 8. und dem 14., der Mittwoch ist Wochentag Nummer 3.

Code

Die beiden for-Schleifen durchlaufen für alle Monate alle Tage von 8 bis 14. Dabei wird für ein gegebenes Jahr ein Datum im ISO-Format erzeugt und an GNU-date übergeben. GNU-date erzeugt das Ausgabeformat

Wochentag|ISO-Datum|UNIX-Timestamp

Mit grep werden alle Zeilen ausgefischt, die mit 3 beginnen, das ist jeweils der Mittwoch. Alle anderen Zeilen werden verworfen. Die folgende while-Schleife erzeugt den SQL-Output für die Kalender-Tabelle.

Dabei wird das ISO-Datum hier nicht verwendet, es dient lediglich der Kontrolle. Sollte eine Tabelle gefüllt werden, die statt eines Integer-Wertes (Timestamp) ein echtes Datum erwartet, kann dieses hier verwendet werden.


Bourne-Shell-Code

J=2009 
for M in 1 2 3 4 5 6 7 8 9 10 11 12; do 
  for T in 8 9 10 11 12 13 14 ; do 
    gdate "+%w|%Y-%m-%d %H:%M:%S|%s" --date "$J-$M-$T 20:00:00" 
  done 
done | 
grep ^3 | 
while IFS='|' read WT DAT TS; do 
  echo "insert into KALENDER set ID=0, DATUM=$TS, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';"
done


Ausgabe für 2009

insert into KALENDER set ID=0, DATUM=1231959600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1234378800, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1236798000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1239213600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1242237600, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1244656800, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1247076000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1250100000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1252519200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1255543200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1257966000, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';
insert into KALENDER set ID=0, DATUM=1260385200, ORT_ID=7,TEXT='UNIX Stammtisch',EVENT_LINK='http://stammtisch.uugrn.org/';