Vergleiche von Zahlen und Buchstaben
G. Thomas
- perl
0 Frank Schönmann0 Calocybe0 Peter Squentz0 Calocybe
Hi,
also langsam verzweifle ich daran...
man vergleicht Zahlen doch so:
if ($Zahl1 == $Zahl2) {}
und Buchstaben
if ($Word1 eq Word2)
ABER wie macht man es wenn man nicht weiß ob man Zahlen, Buchstaben oder alphanumerische Datensätze hat?
Situation ist folgende, ein User gibt via Formular einen Suchbegriff ein der in einer Textdatenbank gesucht wird, stimmt der Suchbegriff mit dem Wert der ersten Spalte überein wird die gesamte Zeile ausgegeben. Leider klappt das irgendwie nicht :(
Ich habe zur Zeit folgende Funktion:
if ($Line[1]=~ /[a-z]/)
{
print "$Line[1]";
if (lc($Line[1]) eq lc($Search))
{
$zaehler++;
&search;
last;
}
}
elsif (lc($Line[1]) == lc($Search))
{
$zaehler++;
&search;
last;
}
Schön wärs, aber wenn ich nach Ba12bns suche findet er trotzdem irgendwelchen Schrott.
Beispiel der Datensätze (1. Spalte)
801234
803444
leer
Abv34nn3
balsdff
.
.
.
Jemand einen Vorschlag?
mfg
G. Thomas
hi!
man vergleicht Zahlen doch so:
if ($Zahl1 == $Zahl2) {}
und Buchstaben
if ($Word1 eq Word2)
"eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)
Beispiele:
"text" eq "text" -> 1
"text" eq "Text" -> 0
"text" == "text" -> 1
"text" == "Text" -> 1
bye, Frank!
Hi Frank!
"eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)Beispiele:
"text" eq "text" -> 1
"text" eq "Text" -> 0
"text" == "text" -> 1
"text" == "Text" -> 1
Haeh? Das ist mir aber neu. Eigentlich vergleicht == numerisch und eq stringwise (case-sensitive).
Wenn Du das da oben ausfuehrst, bekommst Du die Warnung Argument "text" isn't numeric in eq.
Natuerlich kann man Zahlen auch mit eq vergleichen, denn sie haben ja eine Stringrepraesentation. Nur sind dann "001234" und "01234" halt veschiedene Dinge.
Wenn man trotzdem unbedingt wissen will, ob ein Skalar eine Zahl darstellt, moege man dies mit dem Ausdurck /^\d+$/ pruefen.
So long
"eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)
So ein Schmarrn! eq ist ein Operator zum String-Vergleich, == dagegen einer zum numerischen Vergleich. Mit Gross- und Kleinschreibung hat das nichts zu tun.
if ('lsadhfjd' == 'hjgzgu') { # uebersetzt 0 == 0
print 'gleich?';
}
Wenn ich den -w Switch setze (und das ist *sehr* ratsam), erhalte ich übrigens folgende Warnung:
Argument "hjgzgu" isn't numeric in eq at test.pl line 3.
Argument "lsadhfjd" isn't numeric in eq at test.pl line 3.
Peter
Hallo Peter!
Schoen, dass Du auch eine Meinung hast, aber warum liesst Du nicht einfach erstmal den Thread durch, bevor Du anderer Leute Antworten wiederholst? Siehe auch http://www.teamone.de/selfaktuell/forum/forumsfaq_2.htm#naq6.
So long
Schoen, dass Du auch eine Meinung hast, aber warum liesst Du nicht einfach erstmal den Thread durch, bevor Du anderer Leute Antworten wiederholst? Siehe auch http://www.teamone.de/selfaktuell/forum/forumsfaq_2.htm#naq6.
Wo war der Switch -w erwaehnt?
Peter
Wo war der Switch -w erwaehnt?
Hehe, schoen rausgeredet. Und dafuer nochmal so ein langes Posting? Warum nur glaube ich das nicht? :-)
So long