Stringabfrage mit unless oder if
Peter
- perl
0 Cheatah
Hi Leute!
Ich habe mal wieder ein Problem als PERL-Anfänger und hoffe auf Eure Mithilfe. Ich habe eine Art kleine Datenbank konzipiert, die auch fehlerfrei funktioniert. Nur wollte ich jetzt die Datenauflistung formatieren und das gelingt mir einfach nicht.
Ich wollte z.B., wenn in den Daten keine eMail-Adresse eingegeben wurde, auch keinen Eintrag im Suchergebnis haben. Zur näheren Erklärung: Ich möchte ein Bild (im Beispiel mail.jpg) nur anzeigen, wenn auch ein eMail-Eintrag in den Daten vorhanden ist.
Hier nun mein PERL-Skript:
$fname = $FORM{'name'};
open(IN,'<daten.csv') or die 'Daten können nicht geoeffnet werden: '.$!;
my($eingangszeile);
while($eingangszeile = <IN>)
{
my($name,$vorname,$strasse,$ort,$plz,$url,$email,$telefon,$sperre,$id) = split(/;/,$eingangszeile,10);
if($fname eq $name) {
$er = "okay";
print "<font color=ffc0c0>$name, $vorname, $strasse, $plz $ort, $telefon, <a href=$url target=_blank><img src=homepage.jpg></a>";
unless($email eq "") { print ", <a href=mailto:$email><img src=mail.jpg></a>"; }
print "<br>";
}
}
close(IN) or die 'Daten können nicht geschlossen werden: '.$!;
<
In der automatisch generierten Datei 'daten.scv' ist eine Liste mit den Daten. Die Datenfelder sind durch Semikola getrennt und ein leeres Feld ist ohne ein Leerzeichen (also z.B. http://www.homepage.de;;) formatiert.
Ich hoffe, Ihr versteht, wie ich es meine.
Vielen Dank für Eure schnelle Unterstützung.
Ciao
Peter
Hi,
Ich habe eine Art kleine Datenbank konzipiert,
Pawlow hat mich erwischt: Datei != Datenbank.
Nur wollte ich jetzt die Datenauflistung formatieren und das gelingt mir einfach nicht.
Hm. Woran liegt das Deiner Meinung nach?
$fname = $FORM{'name'};
Ich vermute, Du möchtest ganz, ganz, ganz dringend
perldoc CGI
lesen.
open(IN,'<daten.csv') or die 'Daten können nicht geoeffnet werden: '.$!;
Schön!
my($eingangszeile);
Listenkontext (Klammern) ist hier zwar nicht falsch, aber auch nicht nötig. Erst wenn Du mehrere Variablen in einer 'my'-Anweisung deklarierst, brauchst Du ihn.
while($eingangszeile = <IN>)
Du kannst übrigens auch schreiben:
while (my $eingangszeile = <IN>) {
Beachte übrigens, dass ich perldoc perlstyle
-konform hinter while ein Leerzeichen gelassen und die geschweiften Klammern in der selben Zeile begonnen habe :-)
my($name,$vorname,$strasse,$ort,$plz,$url,$email,$telefon,$sperre,$id) = split(/;/,$eingangszeile,10);
Hast Du Dich darum gekümmert, dass keine ";" innerhalb der einzelnen Felder vorkommen können? Falls ja, hast Du offenbar die Dekodierung vergessen; falls nicht, hast Du ein Problem.
Die Datenfelder sind durch Semikola getrennt und ein leeres Feld ist ohne ein Leerzeichen (also z.B. http://www.homepage.de;;) formatiert.
Ja - das nennt sich CSV ;-) Vielleicht ist der Tabulator als Trennzeichen geeigneter; bedenke aber, dass man selbst in Browser-Eingabefeldern dieses Zeichen unterbringen kann.
Ich hoffe, Ihr versteht, wie ich es meine.
Ich nehme an Du möchtest wissen, wie Du auf die Existenz einer Mailadresse prüfst. Dazu findest Du in
perldoc perldata
einen Absatz, der beschreibt, wann ein Skalar als TRUE gilt (und genau das kannst Du ja mit if abprüfen).
Cheatah
Hast Du Dich darum gekümmert, dass keine ";" innerhalb der einzelnen Felder vorkommen können? Falls ja, hast Du offenbar die Dekodierung vergessen; falls nicht, hast Du ein Problem.
Schon mal einen Namen gesehen der ein Semikolon enthält? :)
Vielleicht werden ja auch einfach alle schon bei der Eingabe entfernt, ohne dass sie irgendwie kodiert werden... Ich weiß es nicht.
Was mich jedenfalls interessieren würde, wo hat Peter denn seinen Fehler gemacht?
unless ($email eq "") { ... }
Sollte (zumindest mal auf den ersten Blick) die bedingte Anweisung dann ausführen, wenn in $email nicht nichts steht. Also so wie
if ($email ne '') { ... }
Oder liegt sein Fehler schon darin, dass in E-Mail etwas drinsteht, auch wenn er es nicht erwartet?
Gruß,
Stefan
Hi,
Schon mal einen Namen gesehen der ein Semikolon enthält? :)
nein, aber eine URL.
Vielleicht werden ja auch einfach alle schon bei der Eingabe entfernt, ohne dass sie irgendwie kodiert werden... Ich weiß es nicht.
Das wäre in dem Fall fatal...
Cheatah
Hoi,
Beachte übrigens, dass ich
perldoc perlstyle
-konform hinter while ein
Leerzeichen gelassen und die geschweiften Klammern in der selben Zeile
begonnen habe :-)
Zum Glueck ist 'perldoc perlstyle' nicht Massstab der Dinge ;-)
Aus perldoc perlstyle:
Each programmer will, of course, have his or her own
preferences in regards to formatting, but there are some
general guidelines that will make your programs easier to
read, understand, and maintain.
[...]
Larry has his reasons for each of these things, but he
doesn't claim that everyone else's mind works the same as
his does.
;-)
Gruesse aus dem schoenen LH,
c.j.k