« Info-AG I am kommenden Samstag den 18.03.06 | Main | Info-AG I am Samstag den 01.04.06 - FÄLLT AUS... »
16.03.06
Script Info I-AG 04.02. 2006 (Milan)
Inhaltsübersicht:
- Lesen der ersten Zeile einer Datei
- Lesen einer ganzen Datei
- Lesen einer Zeile aus einer Datei
- Element eines Arrays ändern
- Neue Datei erstellen
- Bedingungen
- Vergleichsoperatoren
- Logische Verknüpfungen
Also, auf ein neues.
Heute gehts weiter mit dem Programmieren in Perl. Dazu ist es ganz nützlich, sich noch mit dem Editor VIM auszukennen, mit dem wir uns ja bereits beschäftigt haben.
Um die Programme auszuführen, speichert man sie in eine Datei, z. B. mein_skript.pl, und führt sie dann mit dem Kommando perl mein_skript.pl aus.
- Lesen der ersten Zeile einer Datei
(Der Dateiname muss auf der Konsole angegeben werden.)
#!/usr/bin/perl
use strict;
# Dateiname einlesen
my $fn = Größerzeichen STDIN Kleinerzeichen;
chomp($fn);
# Datei oeffnen
open TMP, "< s1.pl";
# Datei einlesen
my $r = Größerzeichen TMP Kleinerzeichen;
# Datei wieder schliessen
close(TMP);
# Eingelese Daten ausgeben
print "$r";
- Komplette Datei auslesen
#!/usr/bin/perl
use strict;
# Dateiname einlesen
my $fn = Größerzeichen STDIN Kleinerzeichen;
chomp($fn);
# Datei oeffnen
open SRC, "< $fn";
# Zeilen in ein array einlesen
my @lines = Größerzeichen SRC Kleinerzeichen;
# Datei schliessen
close(SRC);
# Zeilen ausgeben
print @lines;
Die Datei wird in ein sog. array eingelesen. Ein array kann man sich wie folgt vorstellen:
@mein_array:
$mein_array[0]
$mein_array[1]
$mein_array[2]
...
$mein_array[n]
Ein Array ist also eine Liste von Variablen; auf die einzelnen Variablen der Liste kann man über die Nummerierung zugreifen.
- Spezielle Zeile einer Datei ausgeben
#!/usr/bin/perl
use strict;
# Dateiname einlesen
my $fn = Größerzeichen STDIN Kleinerzeichen;
chomp($fn);
# Zeilennummer einlesen
my $lineno =
chomp($lineno);
# Datei oeffnen
open SRC, "< $fn";
# Zeilen in ein array einlesen
my @lines = Größerzeichen SRC Kleinerzeichen;
# Datei schliessen
close(SRC);
# Angefordertes Element des Arrays ausgeben
print $lines[$lineno];
- Element eines Arrays ändern
#!/usr/bin/perl
use strict;
# Dateiname einlesen
my $fn = Größerzeichen STDIN Kleinerzeichen;
chomp($fn);
# Zeilennummer einlesen
my $lineno =
chomp($lineno);
# Datei oeffnen
open SRC, "< $fn";
# Zeilen in ein array einlesen
my @lines = Größerzeichen SRC Kleinerzeichen;
# Datei schliessen
close(SRC);
# Angefordertes Element des Arrays aendern
$lines[$lineno] = "Ein wenig Schachsinn am Samstag morgen =)\n";
# Geaendertes Array ausgeben
print @lines
- Neue Datei erstellen
Dieses Programm zeichnet sich dadurch aus, dass es dem Benutzer nun auch sagt, was er denn bitte eingeben soll :) (printf vor den Zeilen mit Größerzeichen STDIN Kleinerzeichen)
#!/usr/bin/perl
use strict;
# Dateiname einlesen
printf "Dateiname der Quelldatei eingeben: ";
my $fn = Größerzeichen STDIN Kleinerzeichen;
chomp($fn);
# Zeilennummer einlesen
printf "Nummer der Zeile, die geaendert werden soll, eingeben: ";
my $lineno = Größerzeichen STDIN Kleinerzeichen;
chomp($lineno);
# Zieldateiname einlesen
printf "Dateiname der Zieldatei eingeben: ";
my $target_fn = Größerzeichen STDIN Kleinerzeichen;
chomp($lineno);
# Datei oeffnen
open SRC, "< $fn";
# Zeilen in ein array einlesen
my @lines = Größerzeichen SRC Kleinerzeichen;
# Datei schliessen
close(SRC);
# Angefordertes Element des Arrays aendern
$lines[$lineno] = "Ein wenig Schachsinn am Samstag morgen =)\n";
# Geaenderte Daten in neuer Datei speichern
# Datei oeffnen
open DST, "> $target_fn";
# Inhalt in Datei speichern
print DST @lines;
# Datei wieder schliessen
close(DST);
Schreibt man statt open DST, "> $target_fn"; open DST, ">> $target_fn";, wird der neue Inhalt an das Ende der Datei angehängt, wenn die Datei schon existiert. (Mit einer spitzen Klammer wird eine evtl. existierende Datei überschrieben.)
- Bedingungen
#!/usr/bin/perl
use strict;
print "Zahl eingeben: ";
my $number = Größerzeichen STDIN Kleinerzeichen;
chomp($number);
if ($number < 0) {
print "Die Zahl ist kleiner als 0.\n";
}
elsif ($number > 0) {
print "Die Zahl ist groesser als 0.\n";
}
else {
print "Die Zahl ist 0.\n";
}
Wenn die Bedinung in Klammern ($number < 0) wahr ist, wird der Code in den gescheiften Klammern (print "Die Zahl ist kleiner als 0.\n";) ausgeführt.
Ist die erste Bedinung nicht erfüllt (und nur dann), wird die Bedinung bei elsif überprüft und ggf. der dazugehörige Code ausgeführt. Es ist möglich, vor dem else-Teil eine weitere elsif-Bedingung zu notieren. Diese wird dann nur überprüft und ggf. ausgeführt, wenn sowohl die Bedinung bei if als auch die Bedingungen bei allen vorangehenden elsif nicht zutreffen.
Ist keine der Bedinungen erfüllt, wird schließlich der Code bei else ausgeführt.
Es ist auch möglich, die elsif- oder else-Teile wegzulassen. Beispiel:
if ($number < 0) {
print "Die Zahl ist kleiner als 0.\n";
}
elsif ($number == 1) {
print "Die Zahl ist 1.\n";
}
elsif ($number > 0) {
print "Die Zahl ist groesser als 0, aber nicht 1.\n";
}
if ($number < 0) {
print "Die Zahl ist kleiner als 0.\n";
}
else {
print "Die Zahl ist 0 oder groesser als 0.\n";
}
- Vergleichsoperatoren
In den genannten if-Bedingungen (und an allen anderen Orten, wo Bedinungen verwendet werden, z. B. bei Schleifen) lassen sich u. a. die folgenden Operatoren verwenden:
Methode Operatoren Alternativer Operator
gleich == eq (für equal)
ungleich != neq (für not equal)
kleiner < lt (für lower than)
größer > gt (für greater than)
kleinergleich <= le (für lower or equal)
größergleich >= ge (für greater or equal)
- Logische Verknüpfungen
Methode Operatoren Alternativer Operator
und && and
oder || or
Beispiel:
...
# "Wenn $number1 gleich 4 und $number groessergleich 7
if (($number1 eq 4) and ($number2 >= 7)) {
...
}
...
Zu guter letzt der Tafelcode, wer meine Originale haben möchte:
Arrays
#!usr/bin/perl
use strict;
#Wir lesen Dateiinhalte in Arrays ein.
print "Bitte Dateinamen angeben:\n";
my $Dateiname = Größerzeichen STDIN Kleinerzeichen;
chomp($Dateiname);
open TEMP, "< $Dateiname";
my @ErstesArray = Größerzeichen TEMP Kleinerzeichen;
close(TEMP);
print @ErstesArray;
#Wir geben nun eine spezielle Zeile des Arrays aus
my $Zeilennummer = Größerzeichen STDIN Kleinerzeichen;
chomp($Zeilennummer);
print "In Zeile $Zeilennummer stand:\n";
print "$ErstesArray[$Zeilennummer]\n";
#Wir aendern nun den Inhalt von $Zeilennummer
$ErstesArray[$Zeilennummer] = "Das hier ist die geänderte Zeile mit wirrem Text.\n";
print @ErstesArray;
#Geänderte eingelesene Datei zurück in eine neue Datei schreiben
print "Bitte neuen Dateinnamen angeben:\n";
my $neueDatei = Größerzeichen STDIN Kleinerzeichen;
chomp($neueDatei);
open TEMP2, ">> $neueDatei";
print TEMP2 @ErstesArray;
close(TEMP2);
if-else
#!usr/bin/perl
#Die If-Elsif-Else-Anweisung
print "Bitte eine Zahl angeben:\n";
$zahl1 = Größerzeichen STDIN Kleinerzeichen;
chomp($zahl1);
if ($zahl1 == 5) {
print "Die Zahl war tatsächlich 5!\n";
# } elsif ($zahl1 < 5) {
# print "Die Zahl ist kleiner als 5.\n";
} elsif (($zahl1 > 5) and ($zahl1 != 666)) {
print "Die Zahl ist größer als 5.\n";
} elsif ($zahl1 == 666) {
print "Du bist mit dem Teufel im Bunde.\n";
} else {
print "Du bist noch nicht wach. Weiter probieren!\n";
}
Testdatei
Das ist hier ist die Testdatei
Zeile 2.
Zeile 3.
Zeile 4.
Zeile 5.
Zeile 6.
Schon wieder Zeile 6.
Zeile wird noch gefertigt.
Zeile neuneinhalb.
Eigentlich die 10.
Posted by e0 at 16.03.06 05:46
Trackback Pings
TrackBack URL for this entry:
http://www.theofel.de/mt-cgi/mt-tb.cgi/2853
Comments
Hello!Very nice, beautiful and interesting site!Respect you! This is my site: http://colored-contact-lenses.blogspot.com
Posted by: Maxell at 10.04.06 08:02