« Februar 2006 | Main | Mai 2006 »

22.03.06

Info-AG I am Samstag den 01.04.06 - FÄLLT AUS...

Die Info-AG am Samstag den 01.04.06 fällt leider aus, da ich einen anderen Termin wahrnehmen muss. Verschoben wird die AG nicht, da alle kommenden Samstage relativ ungünstig liegen und auch noch das ICYS stattfindet. Somit ist unser nächster AG-Termin erst wieder der 06.05.2006. Ich wünsch euch bis dahin eine gute Zeit.

Posted by e0 at 16:47 | Comments (2) | TrackBack

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 05:46 | Comments (1) | TrackBack

Info-AG I am kommenden Samstag den 18.03.06

Nächsten Samstag ist wieder Info-AG. Gleiche Zeit gleicher Ort, alles gleich wie sonst auch. Nur unser Thema nicht. Ich möchte mit euch die Schleifen endlich abschließen und dann mit euch eventuell ein kleines Projekt angehen. Das Skript vom letzten Mal stelle ich bis dahin noch online. Bis Samstag, ich hoffe auf zahlreiches erscheinen...

Posted by e0 at 05:41 | TrackBack