Schrift
[thread]6345[/thread]

Strings: und Variablen

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
dax42
 2004-06-17 16:56
#83528 #83528
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
Hallo,

noch einmal ein Problem zu Eingabestrings.
Also ich habe in einem Hash viele, viele Eingabewerte zu stehen, die alle folgendermaßen anzusprechen sind:
$entry{'Feld1'}
$entry{'Feld2'}
...
$entry{'Feld144'}

Da würde ich jetzt gern überprüfen, ob sich nicht irgendwelche unerlaubten Zeichen eingeschlichen haben, genauer: es sind nur Zahlen erlaubt.

Kann man etwas machen wie zum Bsp:
for($i = 1; $i < 145; $i++){
if($entry{'Feld$i'} =~ /[^0-9]+/ig){
... }
}

??
Danke für Eure Hilfe!
GH@NDI
 2004-06-17 17:06
#83529 #83529
User since
2003-09-21
16 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mit keys kannst du dir von einem Hash eine Liste mit allen Schlüsseln zurückgeben lassen.

Code: (dl )
1
2
3
4
5
foreach(keys %entry) {
if($entry{$_} =~ /\D/g) {
# tu was
}
}


Wobei dein Beispiel auch funktionieren sollte, wenn du die ' bei $entry{'...'} durch " ersetzt, also $entry{"Feld$i"}.

Innerhalb einfacher Quotes werden Variabeln nämlich nicht interpoliert (zu ihren Werten aufgelost) sondern im Klartext hingeschrieben.
renee
 2004-06-17 17:06
#83530 #83530
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
foreach my $key(keys(%entry)){
  if($entry{$key} =~ /[^\d]/){
[...]
}
}
\n\n

<!--EDIT|renee|1087477750-->
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/
ronald
 2004-06-18 12:55
#83531 #83531
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
foreach (keys %entry) {
if ($entry{$_} =~ /\D/) {
[...]
}
}
Crian
 2004-06-19 01:47
#83532 #83532
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Oder Du arbeitest mit
Code: (dl )
1
2
3
4
5
while (my ($key, $value) = each %hash)) {
if ($value =~ /\D/) {
[...]
}
}

Nur um mal an each zu erinnern =)
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
renee
 2004-06-19 14:15
#83533 #83533
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, each ist noch schneller...
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/
ptk
 2004-06-21 13:57
#83534 #83534
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,19.06.2004, 12:15]Ja, each ist noch schneller...[/quote]
Der Vorteil von each ist nicht unbedingt die Geschwindigkeit (im Endeffekt sollten keys oder each gleich schnell sein), sondern der geringere Speicherverbrauch, was sich bei grossen Hashes bemerkbar machen kann.
Ishka
 2004-06-22 10:21
#83535 #83535
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
nope - for(keys %..) optimiert.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
ptk
 2004-06-22 14:12
#83536 #83536
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Ishka,22.06.2004, 08:21]nope - for(keys %..) optimiert.[/quote]
Das waere eine gute Nachricht --- hast du eine Referenz dazu? Wird nur bei echten Perl-Hashes optimiert oder gilt das auch fuer DB_File und Co.?
Oesi50
 2004-06-22 15:17
#83537 #83537
User since
2004-05-15
33 Artikel
BenutzerIn
[default_avatar]
[quote=renee,19.06.2004, 12:15]Ja, each ist noch schneller...[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl
use Benchmark qw(:all :hireswallclock);
$count = 1000;
for(1..$count){
$hash{$_} = $_;
}
timethese($count, {
'each' => sub {
while (my ($key, $value) = each %hash) {
$hash{$key} = 1;
}
},
'foreach keys' => sub {
foreach (keys %hash) {
$hash{$_} = 1;
}
},
'for keys' => sub {
for (keys %hash) {
$hash{$_} = 1;
}
},
} );


Code: (dl )
1
2
3
4
Benchmark: timing 1000 iterations of each, for keys, foreach keys...
each: 3.46613 wallclock secs ( 3.40 usr + 0.01 sys = 3.41 CPU) @ 292.83/s (n=1000)
for keys: 1.98373 wallclock secs ( 1.97 usr + 0.00 sys = 1.97 CPU) @ 507.10/s (n=1000)
foreach keys: 2.02901 wallclock secs ( 1.98 usr + 0.00 sys = 1.98 CPU) @ 504.54/s (n=1000)
\n\n

<!--EDIT|Oesi50|1087903747-->
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-06-17 16:56.