Aufgabe 11

2. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.2
#Findet alle Überschriften

use strict;

my ($line,$regex);

open(IN,"<:utf8","polt.html") or die "file not found!";

while($line = <IN>) {
  for(my $i=1;$i<=4;$i++) {
    $regex = "<h".$i.".*</h".$i.">";
    if($line =~ /$regex/) {
      print $line;
    }
  }
}

3. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.3
#Extrahiert den Wert des title-Attributs

use strict;

my ($line,$regex);

open(IN,"<:utf8","polt.html") or die "file not found!";

while($line = <IN>) {
  for(my $i=1;$i<=4;$i++) {
    $regex = "<h".$i.".*</h".$i.">";
    if($line =~ $regex) {
      if($line =~ /title=\"(.*?)\"/) {
        print $1."\n";
      }
    }
  }
}

4. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.4
#Extrahiert alle Links

use strict;

my ($line);

open(IN, "<:utf8","polt.html") or die "file not found!";
open(OUT,">:utf8","links.txt");

while($line = <IN>) {
  if($line =~ /href=\"(.*?)\"/) {
    my $tmpLine = $1;
    if($tmpLine =~ /http/ || /www/ ) {
      print OUT $tmpLine."\n";
    }
  }
}

5. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.5
#Extrahiert alle Zeilen, in denen ">Bearbeiten<" steht

use strict;

my ($line);

open(IN, "<:utf8","polt.html") or die "file not found!";

while($line = <IN>) {
  if($line =~ />Bearbeiten</) {
    print $line."\n";
  }
}

6. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.6
#Findet alle Wörter im Text, die genau 2mal vorkommen

use strict;

my ($line,@words,%wordlist,@sortedWords,$word);

open(IN, "<:utf8","polt.html") or die "file not found!";

while($line = <IN>) {
  $line = lc($line);
  @words = split(/[\p{Z}\p{P}\s]+/,$line);
  foreach $word(@words) {
      $wordlist{$word}++;
  }
}

@sortedWords = sort {$wordlist{$a} <=> $wordlist{$b}} keys %wordlist;

foreach $word(@sortedWords) {
  if($wordlist{$word} == 2) {
    print "Das Wort \"$word\" kommt genau $wordlist{$word}mal im Text vor.\n";
  }
}

7. Frage

Lösung

~ $ lynx -dump polt.html -assume_charset=UTF-8 -hiddenlinks=ignore -nolist -verbose > polt.txt

8. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.8
#Erzeugt eine Frequenzliste aller großgeschriebenen Wörter, die länger als 5 Buchstaben sind

use strict;

my ($line,@words,%wordlist,@sortedWords,$word);

open(IN, "<:utf8","polt.txt") or die "file not found!";

while($line = <IN>) {
  @words = split(/[\p{Z}\p{P}\s]+/,$line);
  foreach $word(@words){
    if($word =~ /^\p{Lu}\p{L}{5,}$/) {
      $wordlist{$word}++;
    }
  }
}

@sortedWords = sort {$wordlist{$a} <=> $wordlist{$b}} keys %wordlist;

foreach $word(@sortedWords){
  print "Das Wort \"$word\" kommt $wordlist{$word}mal im Text vor.\n";
}

9. Frage

Lösung

$anzahl = keys(%worthash);

10. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.10
#Gibt die Wörter einer Zeile in umgedrehter Reihenfolge aus (mit Subroutine)

use strict;
{
  my ($line);

  print "Bitte geben Sie eine Textzeile ein >>> ";
  chomp($line = <>);

  print &reverse($line);
}

sub reverse($) {
  my $line = $_[0];
  my $reverseLine = "";
  my @words = split(/ /,$line);
  for(my $i = (scalar(@words)-1); $i >= 0; $i--) {
    if($i==(scalar(@words)-1)) {
      $reverseLine = $words[$i];
    }
    else {
      $reverseLine = "$reverseLine $words[$i]";
    }
  }
  return $reverseLine."\n";
}

11. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 11.11
#Gibt jedes Element einer Liste zusammen mit seiner Position aus

use strict;
{
  my @words = ("Thorin","Balin","Dwalin","Fili","Kili","Dori","Nori"
,"Ori","Oin","Gloin","Bifur","Bofur","Bombur");

  print &print_words_with_index(@words);
}

sub print_words_with_index(@) {
  my @words = @_;
  for(my $i=1;$i<=scalar(@words);$i++) {
    print "Wort $i = $words[$i-1]\n";
  }
}