View
109
Download
3
Category
Preview:
Citation preview
1
Tagesüberblick 2
• Lösung Hausaufgabe/Fragen
• Datei- ein- und ausgabe
• Schleifen
• Vergleiche
• Wahrheit
2
Dateien öffnen und schreiben
open (INFO, $file); # Eingabe
open (INFO,">$file"); # Ausgabe
open (INFO,">>$file"); # Anhängen
open (INFO,"<$file" ); # Eingabe Version 2
close (INFO); # Niemals das # Schließen vergessen
# Merke INFO ist nur Beispiel, Großbuchstaben!
3
Sonderfälle
$file="-";
open (INFO, "$file"); # STDIN
open (INFO, ">$file"); # STDOUT
# Eine Art Systemkommandos zu rufen
open (INFO,"dir |"); # pipe am Bsp. dir
open (INFO,"| more"); # pipe am Bsp. more
4
Beispiel ( type / cat )
$file = "daten";
open(XYZ,$file) || die "Oeffnen $file $!";
# Fehler stets abfangen
@lines=<XYZ>; # Einlesen aus der Datei
close(XYZ); # geöffnete Dateien
# immer schließen
print @lines;
5
Datei schreiben
$out = "daten";
open (OUT,">$out") || die "Oeffnen $out $!";
print OUT "#$lines"; # Schreiben der Datei
close (OUT);
6
foreach
foreach $zeile (@lines){
$a= length($zeile);
print "$a\n";
}
foreach $i (1..5,9,20..23,$a){
print "$i\n";}
# foreach und for sind Synonyme
7
Aufgaben
• Fragen Sie den Namen einer Datei vom Benutzer ab. ( Der Name lautet: daten2-1.txt)
• Öffnen Sie die Datei und lesen sie ein.
2-1 Geben Sie alle Zeilen gefolgt von jeweils einer Leerzeile aus.
2-2 Geben Sie alle Zeilen in eine zweite Datei aus und stellen Sie jeweils ein # an das Ende jeder Zeile.
8
Vergleiche
$a == $b # $a numerisch gleich $b?
# Achtung: nicht = verwenden!
$a != $b# $a numerisch ungleich $b?
$a < $b # $a numerisch kleiner als $b?
$a > $b # $a numerisch größer als $b?
$a eq $b # $a textgleich $b?
$a ne $b # $a textungleich $b?
$a lt $b # $a textkleiner $b?
$a gt $b # $a textgrößer $b?
9
Weitere Vergleichsoperationen
($a && $b) # Sind $a und $b wahr?
($a || $b) # Ist $a oder $b wahr?
($a) # Ist $a wahr?
(! $a) # Ist $a falsch?
# Möglich aber unüblich
($a and $b) # Sind $a und $b wahr?
($a or $b) # Ist $a oder $b wahr?
(not $a) # Ist $a falsch?
10
Wahrheit@a = ('',' ','0',0,1,'PERL','UNWAHR');
foreach $aa (@a){
if ($aa){ print"|$aa| ist wahr\n";
}
else { print"|$aa| ist falsch\n";
}
}
11
Ergebnis
|| ist falsch
| | ist wahr
|0| ist falsch
|0| ist falsch
|1| ist wahr
|PERL| ist wahr
|UNWAHR| ist wahr
12
if else
$a=<STDIN>;
chomp $a; # chomp hier sehr wichtig
# sonst ist $a immer wahr
if (!$a) {
print "Leere Zeichenkette!\n";
}
else {
print "$a\n"; # Zeilenvorschub muß
} # wieder dran
13
if elsif else$a=<STDIN>;
chomp $a;
if (!$a) { print "Leere Zeichenkette!\n";
}
elsif (length($a) < 10) { print "Kurze Zeichenkette!\n";
}
else { die "Zeile zu lang\n"; # Stets else Zweig auswerten
# Hier: Programmabbruch
}
14
if und unless
@a = ('',' ','0',0);
if ($a[0]) {print 0}; #\ äquivalent
print 0 if ($a[0]); #/
if (!$a[1]) {print 1}; #\
print 1 unless ($a[1]); # > äquivalent
unless ($a[1]) {print 1}; #/
15
for
for ($i = 0; $i < 10; $i++) { # hier entpricht
print "$i\n"; # ++$i $i++
} # Beachte: Feld-
# trenner ;
# foreach und for sind Synonyme
16
while
print "Bitte Kennwort eingeben:";
$a = <STDIN>;
chomp $a;
while ( $a ne "bla") {
print "Falsch, bitte erneut versuchen:";
$a = <STDIN>;
chomp $a;
}
17
do while
do { print "Kennwort:";
$a = <STDIN>;
chomp $a;
}
while ( $a ne "bla");
18
do until
do {
print "Kennwort:";
$a = <STDIN>;
chomp $a;
}
until ( $a eq "bla");
19
Exkurs one-liner
@a = ('',' ','0',0);
foreach $aa (@a){
if ($aa){
print"|$aa| \n";
}
}
20
Äquivalent
@a = ('',' ','0',0);
foreach $aa (@a) { if ($aa) { print"|$aa|\n" } }
Beachte: Das letzte Semikolon in einem Block
kann weggelassen werden, speziell nach einer
geschweiften Klammer ist es absolut unüblich.
21
Aufgabe 2-3
• Benutzen Sie Ihre Dateiöffnungsprozedur
• Geben Sie die Datei ganz ohne vollständig leere Zeilen aus und zählen Sie diese.
• Geben Sie die Anzahl der leeren Zeilen aus.
22
Aufgabe 2-4
• Benutzen Sie Ihre Dateiöffnungsprozedur.
• Geben Sie die Datei aus, bis Sie auf den Text: Schluss stoßen. Ab dieser Zeile geben Sie nicht mehr aus und beenden die Bearbeitung.
• Geben Sie die Anzahl der nicht leeren Zeilen aus. Die Zeile, die Schluss enthält, zählen Sie nicht mit.
23
Hausaufgabe 2-1
• Die Datei daten2-2.txt enthält jeweils eine Zahl in einer Zeile. Öffnen Sie diese Datei.
• Lesen Sie 7 Zahlen in einer Schleife aus der Datei ein.
• Speichern Sie die gelesenen Eingaben in einer Liste ab.
• Bilden Sie die Summe über die ganze Liste.
• Geben Sie die Liste aus.
• Geben Sie die Summe aus.
Recommended