Bücher online kostenlos Kostenlos Online Lesen
Perl Programmierung - Grundkurs

Perl Programmierung - Grundkurs

Titel: Perl Programmierung - Grundkurs
Autoren: Barbara Hohensee
Vom Netzwerk:
vorkommen darf. Bei unserer Wahl ist das aber ziemlich unwahrscheinlich.
Schreiben Sie zwei Programme. Das erste Programm, add_user.pl , soll die notwendigen Angaben, also wirkliche Namen und Gruppe erfragen, und dann einen Benutzer anlegen. Die laufende Nummer ist die erste, positive Nummer, die noch nicht belegt ist. Denken Sie daran, dass eventuell auch Benutzer gelöscht wurden. Wenn ein Benutzer zweimal eingegeben wird, kann der erste Eintrag ruhig überschrieben werden, damit das Programm nicht gar zu kompliziert wird.
Das zweite Programm, find_user.pl , verlangt einen Benutzernamen und gibt die zugehörigen Informationen auf dem Bildschirm aus.
Am Besten fangen Sie mit dem Suchen an, denn das ist einfacher. Leider können Sie es erst ausprobieren, wenn auch das Addieren funktioniert.

 

Lösungsblatt 5
     
    Lösung zu Übung 1: Binär kopiert
     
    #!/usr/bin/perl
    use strict;
    print "Anwendung: $0 original kopie"
    if (@ARGV < 2);
    my $quelle = $ARGV[0];
    my $ziel = ">$ARGV[1]";
    open QUELLE, $quelle or die "Kann die Datei $quelle nicht oeffnen: $!\n"; binmode(QUELLE);
    open AUSGABE, ">$ziel" or die "Kann die Datei $ziel nicht oeffnen: $!\n"; binmode(AUSGABE);
    while (my $zeile = ) {
    print AUSGABE $zeile or die "Kann in die Datei $ziel nicht schreiben: $!\n"; }
    close (QUELLE);
    close (AUSGABE) or die "Kann in die Datei $ziel nicht schreiben: $!\n";
     
     

Lösung zu Übung 2: Serienbrief
     
    #!/usr/bin/perl -w
    use strict;
    #
    # Wir nennen die Eintraege im Serienbrief
    # stellvertretend Adressen, obwohl auch
    # BETREFF, GRUSS usw. enthalten sind.
    # Zuerst die Adressen lesen
    #
    my $adressen_name = "serienbrief_adressat.txt";
    open DATEI, $adressen_name or die "Kann $adressen_name nicht oeffnen: $!\n";
    my @adressen = ;
    # Zeilenenden gleich abschneiden
    chomp @adressen; close DATEI;
    #
    # Jetzt die Schablone lesen
    # aber als ein String -> $/ = undef...
    #
    my $schablone_name = "serienbrief_schablone.txt";
    open DATEI, $schablone_name or die "Kann $schablone_name nicht oeffnen: $!\n";
    $/ = undef;
    my $schablone = ;
    close DATEI;
    #
    # Jetzt haben wir die Adress-Angaben in einer Liste,
    # die Schablone in einer skalaren Variablen.
    # Wir bauen uns ein Woerterbuch auf.
    # Sobald wir dabei auf das Wort ERZEUGE stossen,
    # schreiben wir den aktuellen Stand auf die
    # Festplatte.
    my %Woerterbuch;
    for my $zl (@adressen) {
    # An dem ersten Leerzeichen splitten
    # Maximal 2 Teile zulassen
    my ($wort, $text) = split / /, $zl, 2;
    # Erzeugen? Wenn nein, ab damit ins
    # Woerterbuch
    if ($wort eq 'ERZEUGE') {
    # Datei zum Schreiben anlegen
    open AUSGABEDATEI, ">$text" or die "Kann $text nicht schreiben: $!\n";
    # Text ersetzen
    my $text = $schablone;
    for my $k (keys %Woerterbuch) {
    $text =~ s/$k/$Woerterbuch{$k}/g; }
    # Schreiben print AUSGABEDATEI $text or die "Kann $text nicht schreiben: $!\n";
    # Schliessen
    close AUSGABEDATEI or die "Kann $text nicht schliessen: $!\n";
    }
    else {
    $Woerterbuch{$wort} = $text;
    }
    }
     
     

Lösung zu Übung 3: Zerlegen
     
    #!/usr/bin/perl -w
    use strict;
     
    my $dir = 'ex';            # Verzeichnis
    my $anfang = '^(=FILE');       # Anfangsmarke
    my $end ='=[A-Z]+';
     
    mkdir $dir, 0744 if not -d $dir;
    die "Aufruf: $0 DATEI" if @ARGV < 1;
     
    open DATEI, $ARGV[0]
        or die "Kann $ARGV[0] nicht oeffnen: $!\n";
     
    my $teil_name=undef;
    my $in_file=0;
    while (my $zeile = ) {
        if ($zeile =~ /$anfang\s+(\w+)\.(\w+)/) {
            $teil_name = $2;
            my $ext = $3;
            print "$teil_name\n";
            open OFILE, ">$dir/$teil_name.$ext"
                or die "$teil_name: $!\n";
            $in_file = 1;
        } elsif ($zeile =~ /$end/) {
            $in_file = 0;
            close OFILE;
        } else {
            print OFILE $zeile if $in_file;
        }
    }
     
    close DATEI;
     
     

Lösung zu Übung 4: Eine Benutzerdatenbank
     
    #!/usr/bin/perl -w
    use strict;
     
    # So etwas merkt man sich
    # besser nur an einer Stelle!
    # Das Trennzeichen ist ~~
    my $trenn = '~~';
     
    my $dname = 'userdb';
    my %user;
     
     
    dbmopen(%user,"$dname",0644)
        or die "Kann Datenbank $dname nicht oeffnen: $!\n";
     
     
    print "Geben Sie Ihre User-ID ein: ";
    my $uid = ;
    chomp $uid;
     
     
    if (not exists $user{ $uid } ) {
        print <    Ich kann $uid nicht finden....
    Vielleicht haben Sie sich vertippt.
    MARKE
        exit
Vom Netzwerk:

Weitere Kostenlose Bücher