Schrift
[thread]6236[/thread]

String - Zahl (Int)



<< >> 8 Einträge, 1 Seite
Gast Gast
 2004-05-07 10:02
#82060 #82060
Hi!

Suche eine Möglichkeit zu Unterscheiden, ob es sich bei $_->[1] um eine Zahl oder um einen String handelt.

Beispiele für Belegung
- 13 -->Zahl als Antwort
- Test 32 text -->String als Antwort

In anderen Sprachen gabs doch da was mit NaN.
Finde nichts passendes.

Danke schon mal.

Hat jemand eine Idee
renee
 2004-05-07 10:27
#82061 #82061
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst mit RegExp überprüfen, ob nur Zahlen vorkommen. ist dies der Fall, dass ist es eine Zahl, wenn noch etwas anderes als Zahlen vorkommt, dann ist es ein String
Code: (dl )
1
2
3
if($_->[1] =~ /\D/){
print "Ist ein String...";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Marcus
 2004-05-07 10:53
#82062 #82062
User since
2004-05-03
18 Artikel
BenutzerIn
[default_avatar]
Hallo,

falls Du noch pingeliger werden willst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;

sub ist_zahl {
 if ( $_[0] =~ /^-?\d+\.?\d+$/ ) { return 1; }
 return 0;
}

my $str = '123';
ist_zahl($str) or print "$str ist keine Zahl\n";
$str = '-123';
ist_zahl($str) or print "$str ist keine Zahl\n";
$str = '12.3';
ist_zahl($str) or print "$str ist keine Zahl\n";
$str = '-12.3';
ist_zahl($str) or print "$str ist keine Zahl\n";
$str = '1.2.3';
ist_zahl($str) or print "$str ist keine Zahl\n";

Gruß Marcus
jan
 2004-05-07 11:02
#82063 #82063
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
if(int($string) eq $string)
{
print "ist int\n";
}

oder etwa nicht?
Strat
 2004-05-07 13:09
#82064 #82064
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
da muss man sich nicht jedesmal selbst regulaere Ausdruecke ausdenken; die gibt es schon und sind im Modul CPAN:Regexp::Common gesammelt...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
jan
 2004-05-07 13:24
#82065 #82065
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
wozu bei sowas überhaupt einen regulären ausdruck bemühen, was spricht gegen o.g. vergleich? wo scheitert der?
Strat
 2004-05-07 14:07
#82066 #82066
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=jan,07.05.2004, 11:24]wozu bei sowas überhaupt einen regulären ausdruck bemühen, was spricht gegen o.g. vergleich? wo scheitert der?[/quote]
er findet integer, das ist korrekt. aber fuer den rest muss man sich doch was zusammenbasteln.

Marcus
Code: (dl )
$_[0] =~ /^-?\d+\.?\d+$/ ) 

Die RE von oben er findet z.B. 10. nicht, was in Perl eine gueltige floatzahl ist... und auch mit einstelligen Zahlen funktioniert er nicht...

Ein- oder zweimal ist es fuer das Verstaendnis von REs sicher nicht schlecht, wenn man sich solche Patterns zusammenbastelt (habe mir z.B. auch schon REs fuer die Validierung von IP-Adressen gebastelt), aber wieso nicht fertige, gut getestete Funktionalitaet verwenden, wenn sie so einfach verfuegbar ist?\n\n

<!--EDIT|Strat|1083924668-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2004-05-07 17:17
#82067 #82067
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das könnte man jetzt mit dem "fehlenden" Fragezeichen hinter dem letzten Plus ausmerzen, aber wie Strat schon sagte ist es besser, eine schon auf Herz und Nieren geprüfte RE aus Regexp::Common zu nehmen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 8 Einträge, 1 Seite



View all threads created 2004-05-07 10:02.