Post on 06-Apr-2016
1
Tagesüberblick 7
• Lösung Hausaufgabe/Fragen• mehrdimensionale Datenstrukturen• Module• Fehlersuche• Zusammenfassung• Feedback
2
Mehrdimensionale Datenstrukturen
• List of Lists (LoL)• Hash of Hashs (HoH)• alle Mischformen möglich
• Zu beachten:Direktes Ausdrucken nicht möglich
3
List of Listsfor ($i=0;$i<3;$i++){ for ($j=0;$j<3;$j++){ $abc[$i][$j]=$i*$j}}$abc[2][0]=5;
for ($i=0;$i<3;$i++){ for ($j=0;$j<3;$j++){ print "$abc[$i][$j] "} print "\n"}
4
Ergebnis
0 0 0 0 1 2 5 2 4
5
List of Lists (Listenverarbeitung)@abc=(["ich","du","er"], ["Karl","Fritz"], [3,2,1], [1,2,"a","b"]); foreach $a(@abc){ @b=@{$a}; print "@b\n";}
6
List of Lists
@bce=("Cola","Fanta");$abc[5]=[@bce];$abc[7][1]=5;
foreach $a(@abc){ @b=@{$a}; print "@b\n";}
7
Ergebnis: Vorsicht Lücken (perl -w)
ich du erKarl Fritz3 2 11 2 a bUse of uninitialized value at test.pl line 10.Cola FantaUse of uninitialized value at test.pl line 10.Use of uninitialized value at test.pl line 11. 5
8
Behandlung undefinierter Werte
@bce=("Cola","Fanta");$abc[5]=[@bce];$abc[7][1]=5;
foreach $a(@abc){ if(defined($a)){ print "@{$a}\n"}}
9
Warum das?
ich du erKarl Fritz3 2 11 2 a bCola FantaUse of uninitialized value at test.pl line 12. 5
10
Lückenbehandlung komplett@bce=("Cola","Fanta");$abc[5]=[@bce];$abc[7][1]=5;
foreach $a(@abc){ if(defined($a)){ foreach $b(@{$a}){ if (defined($b)){print "$b "}} print "\n"}}
11
Aufgabe 7-1
Lesen Sie die Datei daten7-1.txt ein.In jeder Zeile sind 3 Zahlen, jeweils durch
Leerzeichen getrennt, enthalten.Speichern Sie diese Zahlen einzeln in einer List of
Lists (LoL) ab.Geben Sie anschließend die LoL aus.
12
Aufgabe 7-2
Lesen Sie die Datei daten7-1.txt ein.In jeder Zeile sind 3 Zahlen, jeweils durch Leerzeichen
getrennt, enthalten.Speichern Sie diese Zahlen einzeln in einer List of Lists
(LoL) ab.Multiplizieren Sie in einem Unterprogramm die Elemente
der Lol jeweils mit sich selbst.Geben Sie anschließend die LoL in die Datei out7-1.txt aus.
13
Dateiinformationen
$_="bla.txt";if (-e) {}; # existiertif (-z) {}; # Laenge 0if (-s) {}; # Laenge nicht 0if (-f) {}; # normale Datei (file)if (-d) {}; # Verzeichnis (directory)
14
File::Find#! perl -wsub gefunden{ print "$File::Find::name\n"}
use File::Find;print 'Ab welchem Verzeichnis soll gesucht werden?';$startdir=<STDIN>;chomp ($startdir);find(\&gefunden,$startdir);
15
File::Find (globale Var.)sub gefunden{if (-d) { push (@list, $File::Find::name.'/',"\n")}else {push (@list, $File::Find::name,"\n")}} # Achtung: große Systeme => @list großuse File::Find;print 'Ab welchem Verzeichnis soll gesucht werden?';$startdir=<STDIN>;chomp ($startdir);find(\&gefunden,$startdir);print @list;
16
Aufgaben
7-3 Suchen Sie innerhalb des Dateibaumes alle Dateien, deren Name die Sequenz win enthält. Geben Sie die Dateinamen aus.
7-4 Suchen Sie innerhalb des Dateibaumes alle Dateien, in deren Inhalt die Sequenz c: vorkommt. Geben Sie die Dateinamen aus.
17
Fehlersuche(1)
#! perl -wuse diagnostics;use strict;
18
Fehlersuche (2)
$test=1;...if($test) print ......if($test) print ....
19
Kontrolle des Dateiöffnens
open(XYZ,$file) || die "Oeffnen: $file $!\n";# Dateiname, Ursache
open(XYZ,$file) || die "Oeffnen: $file $!";# Dateiname, Ursache, rufendes Programm, Zeile
20
Häufige Schnitzer
• print STDOUT,$a;• Verwenden der falschen Vergleichsoperatoren (==
statt eq)• Semikolon vergessen• Bei Blöcken geschweifte Klammern vergessen• Bei local Vererbung vergessen• Klammerebenen durcheinander bringen• Durcheinanderbringen von $,@,%,&
21
Zusammenfassung I
• Philosophie von PERL• Bildschirmausgabe• Variablen und ihre Benutzung
Skalare, Felder ( Vektoren, Listen )• Einlesen größerer Datenmengen• Schleifen• Vergleiche• Wahrheit
22
Zusammenfassung II
• Mustervergleiche• Weitere Textfunktionen tr,split ...• Assoziative Vektoren• Spezielle Variable• Hier-Dokument• Unterprogramme• Mehrdimensionale Felder• Module
23
Feedback
• Was hat Ihnen gefallen?
• Was hat Sie gestört?
• Was hat Ihnen gefehlt?
24
Fragen, Anregungen und Hinweise
Bitte an mich senden:
lu.schreiber@arcor.de
Vielen Dank