#!/usr/bin/perl -w
# Hauptvariablen; sie sind an andere Anforderungen anzupassen.
   $LatexFile="Einladung.tex";
   $Abfrage='select * from adressen';
   $OutFile="Einl_";
   $WhatToDo="tv";
   
   # Mal eben die LaTeX-Datei einlesen
   open(LATEX, "< $LatexFile");
   $j="";
   while(defined($i=<LATEX>))
   {
      $j.=$i;
   }
   close(LATEX);

   use Pg;# Das PosgreSQL-Modul wird geladen.
   
   # Die Datenbank-Verbindung wird aufgebaut.
    $conn = Pg::connectdb("dbname=adressen");
   Pg::doQuery($conn, $Abfrage, \@ary); # Referenz der Antwort-Tabelle wird übergeben. 
         # Das Ergebnis wird als "Liste von Listen" zurückgegeben.


    for $i ( 0 .. $#ary )
    {
        for $j ( 0 .. $#{$ary[$i]} )
        {
         # Überflüssige Leerzeichen werden entfernt.
            $ary[$i][$j]=~ s/\s*(.*)\s*/$1/;
        }
    }
   for $i ( 0 .. $#ary )
   {
   # Variablen werden aus der Datenbank mit Werten gefüllt.
      ($Vorname, $Nachname, $Abteilung, $Organisation, $Strasse, $Hausnummer, $Postfach, $Postleitzahl, $Ort, $Tel, $Fax, $email, $HTTP, $weiblich)=@{$ary[$i]};
      # Sonderinhalte werden speziell verändert.
      $Abteilung=&ol($Abteilung); $Organisation=&ol($Organisation); $Postfach=&ol($Postfach);
      # Das Ergebnis wird ausgegeben.
      &drucke_Einladung;
   }

sub drucke_Einladung()
{
   $PostgresAdresse="$Vorname $Nachname\\\\\n$Abteilung$Organisation$Strasse $Hausnummer\\\\\n$Postfach$Postleitzahl $Ort";
#  print $PostgresAdresse;

   if($weiblich eq "t")
   {
      $PostgresAnrede="Sehr geehrte Frau $Vorname $Nachname,";
   }
   else
   {
      $PostgresAnrede="Sehr geehrter Herr $Vorname $Nachname,";
   }
#  print $PostgresAnrede;
   # Hier werden die "$Postgres"-Zeichen in der LaTeX-Datei interpretiert.
   ($out=$j)=~ s/PostgresAdresse/$PostgresAdresse/gs;
   ($out=$out)=~ s/PostgresAnrede/$PostgresAnrede/gs;
   open(LATEXOUT, "> $OutFile$i.tex");
   print LATEXOUT ("$out");
   close(LATEXOUT);
   system("$WhatToDo $OutFile$i.tex");
}

sub tw
{
   my $a=shift;
   $a =~ /\s*(.*)\s*/;
   
   return $1;
}

sub ol
{
   my $a=shift;
   if(defined($a) && length($a)!=0)
   {
      $a.="\\\\\n";
   }
   return $a;
}