1 / 38

Tagesüberblick 3

Tagesüberblick 3. Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen. Zeilenweise lesen aus Dateien while-Schleife. $file = "daten"; open (INFO,$file) || die "Oeffnen $file $!"; while ($a = <INFO>) # lese Zeile in Variable

lobo
Download Presentation

Tagesüberblick 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tagesüberblick 3 • Lösung Hausaufgabe/Fragen • Zeilenweises Lesen von Dateien • Schleifenausbrüche • Die Variable $_ • Textfunktionen

  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);

  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.

  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);

  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);

  6. Die besondere Variable $_ (I) • $file = "daten"; • open (INFO,$file) || die "Oeffnen $file $!"; • while ($_ = <INFO>) { • print $_; • } • close (INFO);

  7. Die besondere Variable $_ (II) • $file = "daten"; • open (INFO,$file) || die "Oeffnen $file $!"; • while (<INFO>) { • print; • } • close (INFO);

  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);

  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

  10. split (I) • $info="Einstein:Albert:Nobelpreistraeger"; • @wer=split(/:/,$info); # teilt an den : • # die Zeichenkette # $info auf • print "@wer"; • # liefert: Einstein Albert Nobelpreistraeger

  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 verschluckt • print "$name,$vorname,$beruf"; • # liefert: Einstein,Albert,Nobelpreistraeger

  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";

  13. Ergebnis • Einstein:Albert:Nobelpreistraeger • Einstein • Albert • Nobelpreistraeger • Einstein:Albert:Nobelpreistraeger

  14. Aufgaben • 3-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.

  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.

  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

  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;

  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

  19. Ergebnis • ab#cdef1#2432543tr • Anzahl=2 • XYZ=ab#cdef1#ä43ä543tr

  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

  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

  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';}

  23. index • Die 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.

  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

  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.

  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.

  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);

  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);

  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);

  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);

  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 (/,/);

  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;

  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);

  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);

  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);

  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.

  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 $!";

  38. Lösung Hausaufgabe 3-1 Seite 2 • while ($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);

More Related