Home >Documents >Tages¼berblick 3

Tages¼berblick 3

Date post:11-Jan-2016
Category:
View:17 times
Download:2 times
Share this document with a friend
Description:
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 = ) # lese Zeile in Variable - PowerPoint PPT Presentation
Transcript:
  • Tagesberblick 3Lsung Hausaufgabe/FragenZeilenweises Lesen von DateienSchleifenausbrcheDie Variable $_Textfunktionen

  • Zeilenweise lesen aus Dateienwhile-Schleife$file = "daten";open (INFO,$file) || die "Oeffnen $file $!";while ($a = ) # lese Zeile in Variable print $a; # automatisch beendet bei EOF}close (INFO);

  • Zeilenweise lesen aus Dateien do until-Schleife$file = "daten";open(ABC,$file) || die "Oeffnen $file $!";do { # Der Parameter EOF wird gesetzt, $c=; # wenn beim Lesen das Datei- print $c; # ende erreicht wird.} # Es muss hier beachtet werden, until(eof);# dass leere Dateien nicht sauberclose(ABC)# behandelt werden.

  • Schleifenausbruch last$file='daten2-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while ($a = ) { print $a; chomp ($a); last if ($a eq 'Schluss');# Abbruch wenn}# Bedingung erflltclose (INFO);

  • Schleifenneustartnext$file='daten2-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while ($a = ) { chomp ($a); next if (length($a) == 0);# nchster Schleifen- print "$a\n";# durchlauf wenn Be-}# dingung erfllt.close (INFO);

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

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

  • Zu Beachten# $_ knnen sie nicht immer weglassen!

    $file = "daten";open (INFO,$file) || die "Oeffnen $file $!";while () { print "$_\n";# Hier ist $_ ntig!}close (INFO);

  • Textfunktionensplit# teilt String in Listejoin# verbindet Strings einer Listetr #Translationsoperator fr Zeichensubstr #extrahiert Teilstring aus Stringindex# Positon eines Strings in String

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

  • 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

  • join$abc=join(":",@wer);# Zusammenfuegen# mit : als Trenner$def=join("\n",@wer," ",$abc);# Zusammenfuegen newline als# Trenner und Leerzeichen# fr eine Leerzeile # Beachte: mehrere Argumente print "$abc\n$def";

  • ErgebnisEinstein:Albert:NobelpreistraegerEinsteinAlbertNobelpreistraeger

    Einstein:Albert:Nobelpreistraeger

  • Aufgaben3-1 Die Datei daten3-1.txt enthlt 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:Alter3-2 Speichern Sie jetzt die Daten in der ursprng- lichen Reihenfolge, jedoch mit Semikolon als Trennzeichen in einer zweiten Datei ab.

  • Aufgabe 3-3Die Datei daten3-2.txt enthlt in jeder Zeile einen Namen, einen Vornamen, ein Krzel fr das Geschlecht (w,m) und ein Alter jeweils durch Komma getrennt. Lesen Sie dies ein und ermitteln Sie das Durchschnittsalter fr das jeweilige Geschlecht. 3-3 Anschlieend geben Sie das jeweilige Durchschnittsalter aus.

  • tr (translate)tr/Suchliste/Ersatzliste/[s][c]...Ersetzen der Zeichen in der Suchliste durch die Zeichen der ErsatzlisteWirkt 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

  • Beispiel$_="*a*12345*b*cdefdg#\n";tr/a-z/A-Z/; # Umlautproblematikprint;# in Windows !!# Umwandlung von $_ in Grobuchstabentr/0-9/a-j/; # Umwandlung von 0-9 in a-jprint;

  • Weitere Mglichkeiten$xyz='ab*cdef1*2432543tr';$xyz=~tr/\*/\#/; # tr/\*/\#/ ersetze Stern mit Lattenzaunprint "$xyz\n"; $num = ($xyz =~ tr/2//); # ersetze 2 mit print "Anzahl=$num\nXYZ=$xyz\n";# Umwandlung aller 2 in in $xyz# $num enthlt die Anzahl der Translations

  • Ergebnisab#cdef1#2432543trAnzahl=2XYZ=ab#cdef1#43543tr

  • Beispieletr/0-9/ /;# Ersetzt alle Zahlen durch# jeweils eine Leerstelletr/0-9/ /c;# Ersetzt alle nicht-Zahlen# durch jeweils eine Leerstelletr/0-9/ /s;# Ersetzt alle aufeinanderfolgenden # Zahlen durch genau eine Leerstelle

  • 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# Achtletztenprint "$b:$c:$d";# liefert:# defg:hijklmnopqrstuvwxyz:stuvw# Merke vorn wird ab 0 gezhlt, hinten ab 1

  • Besonderheiten von substr# Falls die Adressierung von substr auerhalb 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)} # Fehlerbehandlungelse{die '$a zu kurz';}

  • indexDie Funktion index dient zum Suchen der Stelledes ersten Auftretens einer Teilzeichenkette ineiner 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.

  • 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 vorprint "\$b=$b \$c=$c \$d=$d";

    #liefert: $b=1 $c=27 $d=-1

  • AufgabenLesen Sie die Datei daten3-3.txt einWandeln Sie alle Klein- in Grobuchstaben 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.

  • AufgabenLesen 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.

  • # Lsung 3-1a

    #!perl -w$file='daten3-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while ($a=) { @infos=split (/,/,$a); print "$infos[1] $infos[0]:$infos[2]";}close (INFO);

  • # Lsung 3-1b

    #!perl -w$file='daten3-1.txt';open (INFO,$file) || die "Oeffnen $file $!";while () { ($name,$vorname,$alter)=split (/,/); print "$vorname $name:$alter";}close (INFO);

  • #Lsung 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=) { @infos=split (/,/,$a); print QWE join (';',@infos);}close (INFO);close (QWE);

  • #Lsung 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 () {print QWE join (';',split (/,/))}close (INFO);close (QWE);

  • #Lsung 3-3 Seite 1

    #!perl -w$file='daten3-2.txt';open (INFO,$file) || die "Oeffnen $file $!";$w=$wsum=$m=$msum=0;while () { ($a,$b,$gender,$age)=split (/,/);

  • # Lsung 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;

  • # Lsung 3-4

    $file="daten3-2.txt";open(IN,$file) || die "Oeffnen von $file $!";while (){ chomp();# wichtig wg. anhaengen tr/a-z/A-Z/; print substr($_." "x7,3,4),"\n";}close(IN);

  • #Lsung 3-5$file="daten3-2.txt";open(IN,$file) || die "Oeffnen von $file $!";while (){ chomp();# sonst erwischt man \n mit tr/a-z/A-Z/; print substr((" "x6).$_,-6),"\n";}close(IN);

  • # Lsung 3-6$file='daten3-3.txt';$kette='auf';$zeilennr=0;open (XDF,$file) || die "Oeffnen $file $!";while ($fgh=) { $zeilennr++; $a=index($fgh,$kette); if ($a > -1){ print "Zeilennummer: $zeilennr Position: $a\n"; }}close (XDF);

  • Hausaufgabe 3-1Lesen 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.

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

  • Lsung Hausaufgabe 3-1 Seite 2while ($fgh=) { $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);

    Stand 0209111801

    3. Veranstaltung: FolienT.:0109033. Veranstaltung: FolienT.:0109033. Veranstaltung: FolienT.:010903Beim Auffinden der Zeile Schluss wird die Schleife abgebrochen3. Veranstaltung: FolienT.:010903In diesem Beispiel werden alle leeren Zeilen bersprungen.3. Veranstaltung: Folien3. Veranstaltung: Folien3. Veranstaltung: Folien3. Veranstaltung: Folien3. Veranstaltung: FolienT: 02091118003. Veranstaltung: FolienT: 02091118003. Veranstaltung: FolienJoin kann ein oder mehrere Eingabefelder oder Skalare zusammenfgen mittels eines vorzuwhlenden Trennzeichens.

    Man beachte, da im zweiten Beispiel, diese Mglichkeit zum Erstellen einer Leerzeile benutzt wurde.3. Veranstaltung: Folien3. Veranstaltung: Folien- Einben von substr.

Embed Size (px)
Recommended