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

Perl Programmierung - Grundkurs

Titel: Perl Programmierung - Grundkurs
Autoren: Barbara Hohensee
Vom Netzwerk:
Textdatei auf dem Bildschirm ausgibt. Es ist möglich, mit einer Anweisung auszukommen.

 

Übung 3: Duplikate
     
    Schreiben Sie ein Programm, das alle Wörter einer Textdatei auflistet, die genau zweimal vorkommen. Der Name der Textdatei soll als Argument in der Kommandozeile angegeben werden.
 
     
     

Lösungsblatt 3
     

Lösung zu Übung 1: Zuweisen
     
    my @Liste = (1,2,3);
    my @Liste2 = ("Eins","Zwei","Drei");
    my $Scalar1 = "Hallo";
    my $Scalar2 = "Fertig";
    my @neue_liste = @Liste;
    @neue_liste = reverse(@Liste[1,2]);       # 3 2
    @neue_liste = ($Scalar1, @Liste[1,1]);    # Hallo 2 2
    @neue_liste[2,1,3] = @Liste[1,2,1];       # Hallo 3 2 2
    @Liste=(@Liste,4);                        # 1 2 3 4
    my($Dummy, $Ergebnis) = @Liste;           # 1, 2
    $Ergebnis = @Liste;                       # 4
    ($Ergebnis) = @Liste2;                    # Eins
    ($Ergebnis) = @Liste[1..2];               # 2
    $Ergebnis = $Liste2[$Liste[$Liste[0]]];   # Drei
    $Ergebnis=$Liste2[3];                     # undef
    my %hash = (@Liste,5);                    # 1=>2,3=>4,5=>undef
    @Liste = undef;                           # (undef)
     

Lösung zu Übung 2: Zeilenzahl
     
    print scalar(my @liste = <>),"\n";
     
    1. Schritt: Einlesen der Datei in eine Liste
                  my @liste = <>;
     
    2. Schritt: Bestimmen der Anzahl der Elemente in der Liste
                  my $anzahl = scalar(@liste);
     
    3. Schritt: Ausgeben der Anzahl
                  print $anzahl,"\n";
    Kopieren Sie jetzt den ersten Schritt in den zweiten und diesen in den letzten, dann bleibt eine einzige Anweisung.
Wenn Sie nicht auf einer Anweisung bestehen, können wir eine Lösung mit zwei Anweisungen formulieren, die viel weniger Speicherplatz braucht. Dazu lesen wir Zeile für Zeile, ohne uns überhaupt für das Ergebnis zu interessieren. Trotzdem wird der interne Zeilenzähler $. aktualisiert. Das ist eine von Perl vordefinierte Variable, die Sie bereits in den Übungsaufgaben kennen gelernt hatten.
     
    while (<>) {}
    print "$.\n";
     
    Stattdessen hätten wir natürlich auch einen eigenen Zähler definieren können.
     
    my $no=0;
    while (<>) {++$no}
    print "$no\n";
     
     

Lösung zu Übung 3: Duplikate
     
    #!/usr/bin/perl -w
    use strict;
     
    # Hash fuer die Worte anlegen
     
    my %wort_anzahl;
     
    while (<>)          # Einlesen in $_
    {
        my @F = split;     # In Worte zerlegen
        for my $wort (@F) {
        ++$wort_anzahl{$wort};
        }
    }
     
    while (my ($key,$wert) = each %wort_anzahl)
    {
        if ($wert == 2) { print "$key\n"; }
    }
    __END__
    Testdaten
    das das der der der
    die er er die er das
     
     
     
     

Übungsblatt 4
 
Übung !: Wie oft?
     
    Wie oft werden die folgenden Anweisungen ausgeführt?
     
    for (my $no1=0; $no1 < 5; ++$no1) {
        for (my $no2=0; $no2 < 3; ++$no2) {
            print "wie oft?";
        }
    }
     
     
    for (my $no1=0; $no1 < 3; ++$no1) {
        for (my $no2=0; $no2 < $no1; ++$no2) {
            print "wie oft?";
        }
    }
     
     
    for (my $no1=0; $no1 < 3; ++$no1) {
        for (my $no2=0; $no2 >= $no1; ++$no2) {
            print "wie oft?";
        }
    }
     
     

Übung 2: Bis dahin
     
    Schreiben Sie ein Programm, das alle Zeilen einer Textdatei auf dem Bildschirm ausgibt, bis eine Zeile mit dem folgenden Aufbau in der Datei gefunden wird:
     
    __END__
     
    Es soll also das Wort __END__ am Anfang einer sonst leeren Zeile stehen. Die abschließende Zeile selbst soll nicht ausgegeben werden.
Den Namen der Datei übernehmen Sie wie gewohnt als Argument in der Kommandozeile.
__END__ ist ein reserviertes Wort in Perl, das bewirkt, dass der Rest der Datei ignoriert wird. Sie können so zum Beispiel Testdaten im Programmtext selbst unterbringen.
 
     

Lösungsblatt 4
     
    Lösung zu Übung 1:
     
    for (my $no1=0; $no1 < 5; ++$no1) {
        for (my $no2=0; $no2 < 3; ++$no2) {
            print "wie oft?";           # 15 Mal
        }
    }
     
    Die Schleife wird 15-mal ausgeführt. Wenn Sie zwei Schleifen ineinander schachteln, von denen die erste 5-mal und die innere Schleife 3-mal ausgeführt wird, dann bekommen Sie 3*5, also 15 Durchläufe. Nur der Deutlichkeit halber sei es gesagt: Das gilt nicht, wenn Sie die Schleifen nacheinander ausführen, also zuerst
Vom Netzwerk:

Weitere Kostenlose Bücher