1 tagesüberblick 3 lösung hausaufgabe/fragen zeilenweises lesen von dateien schleifenausbrüche...
TRANSCRIPT
![Page 1: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/1.jpg)
1
Tagesüberblick 3
• Lösung Hausaufgabe/Fragen
• Zeilenweises Lesen von Dateien
• Schleifenausbrüche
• Die Variable $_
• Textfunktionen
![Page 2: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/2.jpg)
2
Zeilenweise lesen aus Dateienwhile-Schleife
$file = "daten";
open (INFO,$file) || die "Oeffnen $file $!";
while ($a = <INFO>) # lese Zeile in Variable
print $a; # automatisch beendet bei EOF
}
close (INFO);
![Page 3: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/3.jpg)
3
Zeilenweise lesen aus Dateien do until-Schleife
$file = "daten";
open(ABC,$file) || die "Oeffnen $file $!";
do { # Der Parameter EOF wird gesetzt,
$c=<ABC>; # wenn beim Lesen das Datei-
print $c; # ende erreicht wird.
} # Es muss hier beachtet werden,
until(eof); # dass leere Dateien nicht sauber
close(ABC) # behandelt werden.
![Page 4: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/4.jpg)
4
Schleifenausbruch last
$file='daten2-1.txt';
open (INFO,$file) || die "Oeffnen $file $!";
while ($a = <INFO>) {
print $a;
chomp ($a);
last if ($a eq 'Schluss'); # Abbruch wenn
} # Bedingung erfüllt
close (INFO);
![Page 5: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/5.jpg)
5
Schleifenneustartnext
$file='daten2-1.txt';
open (INFO,$file) || die "Oeffnen $file $!";
while ($a = <INFO>) {
chomp ($a);
next if (length($a) == 0); # nächster Schleifen-
print "$a\n"; # durchlauf wenn Be-
} # dingung erfüllt.
close (INFO);
![Page 6: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/6.jpg)
6
Die besondere Variable $_ (I)
$file = "daten";
open (INFO,$file) || die "Oeffnen $file $!";
while ($_ = <INFO>) {
print $_;
}
close (INFO);
![Page 7: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/7.jpg)
7
Die besondere Variable $_ (II)
$file = "daten";
open (INFO,$file) || die "Oeffnen $file $!";
while (<INFO>) {
print;
}
close (INFO);
![Page 8: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/8.jpg)
8
Zu Beachten# $_ können sie nicht immer weglassen!
$file = "daten";
open (INFO,$file) || die "Oeffnen $file $!";
while (<INFO>) {
print "$_\n"; # Hier ist $_ nötig!
}
close (INFO);
![Page 9: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/9.jpg)
9
Textfunktionen
• split # teilt String in Liste
• join # verbindet Strings einer Liste
• tr #Translationsoperator für Zeichen
• substr #extrahiert Teilstring aus String
• index# Positon eines Strings in String
![Page 10: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/10.jpg)
10
split (I)
$info="Einstein:Albert:Nobelpreistraeger";
@wer=split(/:/,$info); # teilt an den :
# die Zeichenkette# $info auf
print "@wer";
# liefert: Einstein Albert Nobelpreistraeger
![Page 11: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/11.jpg)
11
split (II)#perl -w
$info="Einstein:Albert:Nobelpreistraeger";
($name,$vorname,$beruf)=split(/:/,$info);
# teilt an den : die Zeichenkette $info auf # falls links zu wenig Skalare stehen, wird # der Rest verschlucktprint "$name,$vorname,$beruf";
# liefert: Einstein,Albert,Nobelpreistraeger
![Page 12: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/12.jpg)
12
join
$abc=join(":",@wer); # Zusammenfuegen
# mit : als Trenner
$def=join("\n",@wer," ",$abc);
# Zusammenfuegen newline als
# Trenner und Leerzeichen
# für eine Leerzeile
# Beachte: mehrere Argumente
print "$abc\n$def";
![Page 13: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/13.jpg)
13
Ergebnis
Einstein:Albert:Nobelpreistraeger
Einstein
Albert
Nobelpreistraeger
Einstein:Albert:Nobelpreistraeger
![Page 14: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/14.jpg)
14
Aufgaben3-1 Die Datei daten3-1.txt enthält in jeder Zeile
einen Namen, einen Vornamen und ein Alter jeweils durch Komma getrennt. Lesen Sie dies ein und geben Sie alle Informationen jeweils in folgendem Format aus:Vorname Name:Alter
3-2 Speichern Sie jetzt die Daten in der ursprüng- lichen Reihenfolge, jedoch mit Semikolon als Trennzeichen in einer zweiten Datei ab.
![Page 15: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/15.jpg)
15
Aufgabe 3-3
• Die Datei daten3-2.txt enthält in jeder Zeile einen Namen, einen Vornamen, ein Kürzel für das Geschlecht (w,m) und ein Alter jeweils durch Komma getrennt. Lesen Sie dies ein und ermitteln Sie das Durchschnittsalter für das jeweilige Geschlecht.
3-3 Anschließend geben Sie das jeweilige Durchschnittsalter aus.
![Page 16: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/16.jpg)
16
tr (translate)• tr/Suchliste/Ersatzliste/[s][c]...
– Ersetzen der Zeichen in der Suchliste durch die Zeichen der Ersatzliste
– Wirkt normalerweise auf $_– c Entfernen der Suchliste aus dem gesamten
Zeichenvorrat und verwenden der resultierenden Zeichenkette als Suchliste (Negation)
– s Zusammenziehen aller mehrfach identischen Ersatzzeichen zu einem Ersatzzeichen
![Page 17: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/17.jpg)
17
Beispiel$_="*a*12345*b*cdefdg#\n";
tr/a-zäöü/A-ZÄÖÜ/; # Umlautproblematik
print; # in Windows !!
# Umwandlung von $_ in Großbuchstaben
tr/0-9/a-j/; # Umwandlung von 0-9 in a-j
print;
![Page 18: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/18.jpg)
18
Weitere Möglichkeiten
$xyz='ab*cdef1*2432543tr';
$xyz=~tr/\*/\#/; # tr/\*/\#/ ersetze Stern mit Lattenzaun
print "$xyz\n"; $num = ($xyz =~ tr/2/ä/); # ersetze 2 mit ä
print "Anzahl=$num\nXYZ=$xyz\n";
# Umwandlung aller 2 in ä in $xyz
# $num enthält die Anzahl der Translations
![Page 19: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/19.jpg)
19
Ergebnis
ab#cdef1#2432543tr
Anzahl=2
XYZ=ab#cdef1#ä43ä543tr
![Page 20: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/20.jpg)
20
Beispiele
tr/0-9/ /; # Ersetzt alle Zahlen durch
# jeweils eine Leerstelle
tr/0-9/ /c; # Ersetzt alle nicht-Zahlen
# durch jeweils eine Leerstelle
tr/0-9/ /s; # Ersetzt alle aufeinanderfolgenden # Zahlen durch genau eine Leerstelle
![Page 21: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/21.jpg)
21
substr (string,start,lenght)
$a="abcdefghijklmnopqrstuvwxyz";
$b=substr($a,3,4); # 4 Zeichen ab dem Vierten
$c=substr($a,7); # Alle Zeichen ab dem Achten
$d=substr($a,-8,5); # 5 Zeichen ab dem
# Achtletzten
print "$b:$c:$d"; # liefert:
# defg:hijklmnopqrstuvwxyz:stuvw
# Merke vorn wird ab 0 gezählt, hinten ab 1
![Page 22: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/22.jpg)
22
Besonderheiten von substr# Falls die Adressierung von substr außerhalb der Zeichen-
# kette liegt: Fehler. Unbedingt sicherstellen, daß die Zeichen-
# kette lang genug ist; oder Fehler abfangen.
$b=substr($a." "x7,3,4);
$c=substr($a." "x8,7);
$d=substr((" "x8).$a,-8,5);
$b=substr($a,3,4) || die "Fehler 4711" ;
if (length($a) > 6){$b=substr($a,3,4)} # Fehlerbehandlung
else{die '$a zu kurz';}
![Page 23: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/23.jpg)
23
indexDie Funktion index dient zum Suchen der Stelle
des ersten Auftretens einer Teilzeichenkette in
einer Zeichenkette.
index(zeichenkette,teilzeichenkette)
index(zeichenkette,teilzeichenkette,position)
zeichenkette In dieser Zeichenkette wird gesucht.
teilzeichenkette Diese Zeichenkette wird gesucht.
position Ab dieser Stelle wird gesucht.
![Page 24: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/24.jpg)
24
Beispiel#!perl -w
$a='abcdefghijklmnopqrstuvwxyzabc';$b=index($a,'b'); # erstes vorkommen von b
$c=index($a,'bc',7); # zweites Vorkommen von bc
$d=index($a,'789'); # string kommt nicht vor
print "\$b=$b \$c=$c \$d=$d";
#liefert: $b=1 $c=27 $d=-1
![Page 25: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/25.jpg)
25
Aufgaben• Lesen Sie die Datei daten3-3.txt ein
• Wandeln Sie alle Klein- in Großbuchstaben um (nur int. Alphabet).
3-4 Geben Sie jeweils das vierte bis siebte Zeichen jeder Zeile aus.
3-5 Geben Sie die letzten 6 Zeichen jeder Zeile aus.
![Page 26: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/26.jpg)
26
Aufgaben• Lesen Sie die Datei daten3-4.txt ein.
3-6 Wenn in einer Zeile die Zeichenkette auf enthalten ist geben sie die Zeilennummer und Position der Zeichenkette an.
![Page 27: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/27.jpg)
27
# Lösung 3-1a
#!perl -w$file='daten3-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while ($a=<INFO>) { @infos=split (/,/,$a); print "$infos[1] $infos[0]:$infos[2]";}close (INFO);
![Page 28: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/28.jpg)
28
# Lösung 3-1b
#!perl -w$file='daten3-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while (<INFO>) { ($name,$vorname,$alter)=split (/,/); print "$vorname $name:$alter";}close (INFO);
![Page 29: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/29.jpg)
29
#Lösung 3-2a #!perl -w$file='daten3-1.txt';$fileo='aufg3-2.out';open (INFO,$file) || die "Oeffnen $file $!";open (QWE,">$fileo") || die "Oeffnen $fileo $!";while ($a=<INFO>) { @infos=split (/,/,$a); print QWE join (';',@infos);}close (INFO);close (QWE);
![Page 30: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/30.jpg)
30
#Lösung 3-2b
#!perl -w$file='daten3-1.txt';$fileo='aufg3-2.out';open (INFO,$file) || die "Oeffnen $file $!";open (QWE,">$fileo") || die "Oeffnen $fileo $!";while (<INFO>) {print QWE join (';',split (/,/))}close (INFO);close (QWE);
![Page 31: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/31.jpg)
31
#Lösung 3-3 Seite 1
#!perl -w$file='daten3-2.txt';open (INFO,$file) || die "Oeffnen $file $!";$w=$wsum=$m=$msum=0;while (<INFO>) { ($a,$b,$gender,$age)=split (/,/);
![Page 32: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/32.jpg)
32
# Lösung 3-3 Seite 2 if ($gender eq 'w'){ $w++; $wsum+=$age} elsif ($gender eq 'm'){ $m++; $msum+=$age} else{ print "Geschlechtsmerkmal $gender", " unbekannt\n"}}}close (INFO);print "Durchschnittsalter:\nW:", $wsum/$w,"\nM:",$msum/$m;
![Page 33: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/33.jpg)
33
# Lösung 3-4
$file="daten3-2.txt";open(IN,$file) || die "Oeffnen von $file $!";while (<IN>){ chomp(); # wichtig wg. anhaengen tr/a-z/A-Z/; print substr($_." "x7,3,4),"\n";}close(IN);
![Page 34: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/34.jpg)
34
#Lösung 3-5$file="daten3-2.txt";
open(IN,$file) || die "Oeffnen von $file $!";
while (<IN>){
chomp(); # sonst erwischt man \n mit
tr/a-z/A-Z/;
print substr((" "x6).$_,-6),"\n";
}
close(IN);
![Page 35: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/35.jpg)
35
# Lösung 3-6$file='daten3-3.txt';$kette='auf';$zeilennr=0;open (XDF,$file) || die "Oeffnen $file $!";while ($fgh=<XDF>) { $zeilennr++; $a=index($fgh,$kette); if ($a > -1){ print "Zeilennummer: $zeilennr Position: $a\n"; }}close (XDF);
![Page 36: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/36.jpg)
36
Hausaufgabe 3-1• Lesen Sie die Datei daten3-4.txt ein.
• Wenn in einer Zeile die Zeichenkette auf enthalten ist, geben sie die Zeilennummer und auf die Zeichenkette folgenden 4 Zeichen in die Datei ha3-1.out aus.
![Page 37: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/37.jpg)
37
Lösung Hausaufgabe 3-1 Seite 1
#! perl -w
$file='daten3-4.txt';
$ofile='ha3-1.out';
$zeilennr=0;
open (XDF,$file) || die "Oeffnen $file $!";
open (RAUS,">$ofile") || die "Oeffnen $ofile $!";
![Page 38: 1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen](https://reader036.vdocuments.pub/reader036/viewer/2022070310/55204d8249795902118d5bdd/html5/thumbnails/38.jpg)
38
Lösung Hausaufgabe 3-1 Seite 2while ($fgh=<XDF>) {
$zeilennr++;
chomp($fgh);
$a=index($fgh,'auf');
if ($a > -1){ # Wenn Suchstring vorhanden
print RAUS 'Zeilennummer: ',$zeilennr,
' vier folgende Zeichen: ',
,substr($fgh." "x4,$a+3,4),"\n"}}
close (RAUS);