#!/usr/bin/perl ######################################################################### # Programm Name: .pm # Autor: Thomas Schaaff # Erstellt am: <20.04.13> Version: <1.7> # # Programmaufruf: # usage: # use Ias Ias::funktion() ######################################################################### # # Programmbeschreibung: Perl Modul mit div. Funktionen, implementiert DBI # # Dieses Programm ist urheberrechtlich geschuetzt und kann unter den selben # Bedingungen wie Perl verbreitet werden. # Copyright 2012 Thomas Schaaff (c) # ######################################################################### package Ias; use strict; use warnings; use DBI; use encoding ':locale'; sub connect { # Verbindungsaufbau zur Datenbank und # DBI Funktionen zur Verfügung stellen # wichtige Angaben my $pfad = '/home/thomas/bin/'; open (CFG,'<',$pfad .'connect-db') || die "Oops: $!\n"; chomp (my $username = ); chomp (my $password = ); chomp (my $database = ); close(CFG); # Zusammenbau der Datasource DBI/Modul/Datenbank/Host my $dsn = 'DBI:mysql:'.$database.':127.0.0.1:3306'; return (DBI->connect ($dsn, $username, $password, { PrintError => 0, RaiseError => 1, AutoCommit => 0, mysql_enable_utf8 => 1, } )); } 1; sub rahmen { # gestaltet die Ausgabe des Ergebnisses # Referenz auf die Ermittelte spaltenbreite und # Referenz auf die Spaltenüberschriften my @breite = @{$_[0]}; my @spalte = @{$_[1]}; my @numeri = @{$_[2]}; # Datentypen for (my $i = 0; $i < @spalte; $i++) # für alle Spalten wird geprüft { if (length($spalte[$i]) > $breite[$i]) # ob Titel oder Wert länger ist { $breite[$i] = length($spalte[$i]); # längerer Wert wird übernommen } } my $wert; # für Tabelle my $wert_titel; # für Überschrift my $linie; my @ergebnis; # printf-formel wird von Spaltenbreite zu Spaltenbreite zusammengestellt # Gesamtwert der Tabellenbereite wird durch Addition erstellt foreach (@breite) { $wert_titel .= $_."s | %-"; # printf für Überschrift $linie += $_; } for (my $i = 0; $i < @breite; $i++) # printf für Tabelle { if ($numeri[$i] == 3) # Dezimal { $wert .= $breite[$i].".2f | %"; } else # String { $wert .= "-".$breite[$i]."s | %"; } } $linie += @breite * 3; # Tabellenbreite * 3, weil pro Spalte 3 Extrazeichen hinzukommen my $laenge = length($wert)-2; # Korrektur der printf-formel my $laenge_2 = length($wert_titel)-2; # Korrektur der printf-formel Überschrift $wert = substr($wert, 0,$laenge); # printf-formel um 2 Stellen kürzen $wert_titel=substr($wert_titel, 0,$laenge_2); # printf-formel um 2 Stellen kürzen Überschrift $wert= " %".$wert."\n"; # endgültige printf-formel $wert_titel= " %-".$wert_titel."\n"; # endgültige printf-formel Überschrift print "-" x $linie, "\n"; # Linie ausdrucken printf "$wert_titel", @spalte; # Spaltenüberschriften ausgeben mit printf print "-" x $linie, "\n"; # Linie ausgeben push @ergebnis,$wert, $linie; # Referenz auf 2 Werte (printf-formel und Lininebreite) zurückgeben return \@ergebnis; } 1; sub eingabe { # fragt die Eingabeparamter ab. # Wird aufgerufen, wenn keine Parameter eingegeben wurden. my ($name, $vorname, $kurs, $neu, @eingabe); my @program = @{$_[0]}; # Parameter für aufrufendes Programm if ($program[0] =~ /^wer$/) { while(1) # Endlosschleife-Ende mit last, Wdh. mit redo { print "Eingaben bitte immer mit ENTER abschliessen.\n\n"; print "Bitte geben Sie einen Namen ein dann ENTER:\n"; $name = ; if ($name =~ /^\s$/) # kein Name eingegeben { print "\t\tFEHLER! Bitte unbedingt einen Namen eingeben\n"; redo; } print "Kennen Sie auch einen Vornamen? sonst ENTER:\n"; $vorname = ; print "Kennen Sie auch ein Seminarkürzel? sonst ENTER:\n"; $kurs = ; chomp $name; @eingabe = $name; # 1.Eintrag in Array if (! ($vorname =~ /^\s$/) ) # keine Leerzeile { chomp $vorname; push(@eingabe, $vorname); # 2.Eintrag in Array } else { $vorname = '?'; # wenn Leerzeile } if (! ($kurs =~ /^\s$/)) { chomp $kurs; push(@eingabe, $kurs); # 3.Eintrag in Array } else { $kurs = '?'; # wenn Leerzeile } print "Name: $name \tVorname: $vorname \tKurs: $kurs - OK? ENTER sonst \'n\' für neu!\n"; # Kontrollabfrage $neu = ; if (!($neu =~ /^\s$/) ) # neue Eingabe { redo; } else { last; # Abfrage ausführen } } } if ($program[0] =~ /^such$/) { while(1) # Endlosschleife-Ende mit last, Wdh. mit redo { print "Bitte geben Sie einen Namen ein dann ENTER oder \'e\' zum Beenden:\n"; $name = ; if ($name =~ /^\s$/) # kein Name eingegeben { print "\t\tFEHLER! Bitte unbedingt einen Namen eingeben oder \'e\' zum Beenden:\n"; redo; } chomp $name; @eingabe = $name; # Eintrag in Array last; } } return \@eingabe; } 1;