Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6754[/thread]

Vergleich von Zahlen und Buchstaben??



<< >> 6 Einträge, 1 Seite
Andreas
 2005-03-02 08:51
#52229 #52229
User since
2003-09-24
111 Artikel
BenutzerIn
[default_avatar]
Hallo an alle,

folgende Problemstellung:

ich habe jeweils einen neuen und einen alten Stand eines Programmes in einer Datenbank stehen, der Stand kann in Buchstaben oder in Zahlen stehen:
z.B:

01
AA
AB
09

jetzt muß ich rausbekommen ob das Programm aktueller ist oder nicht, dabei gilt.
AA ist älter AB ist älter AC ....
01 ist älter 02 ist älter 03 ...
und das ganze umgekehrt.

ich stell mir vor das ich bei einem Vergleich eine -1 für älter und eine 1 für neuer bekomme.

Hat von euch einer eine Ahnung wie ich das lösen könnte?

Danke schon mal

Andreas
renee
 2005-03-02 09:05
#52230 #52230
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl

use strict;
use warnings;

my $var1 = 'AB';# oder eine 02
my $var2 = 'AA'; # oder 01...

my $aelter = $var1 gt $var2 ? $var2 : $var1;

print $aelter," ist älter\n";
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/
Taulmarill
 2005-03-02 11:59
#52231 #52231
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ergänzend zu renees antwort:

der operator der -1, 0, oder 1 ausgibt ist cmp für strings und <=> für numerische werte. du musst aber nicht selbst sortieren, dafrür gibt's sort.

Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;

my @foo = qw/BA JK YD AB AA PP/;
my @bar = qw/10 46 23 79 46 88/;

print join(", ", sort{$a cmp $b} @foo), "\n";
print join(", ", sort{$a cmp $b} @bar), "\n";

du solltest nur darauf achten, dass die numerischen werte auch immer zweistellig sind (evtl, führende nul anfügen) da cmp wie gesagt eine alphabetische sortierung durchführt.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Ishka
 2005-03-02 15:33
#52232 #52232
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ansonsten könntest du noch mit
Code: (dl )
$a <=> $b || $a cmp $b

vergleichen, da ein numerischer vergleich von nichtnumerischen Werten gleichheit zurückgibt.
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}
pq
 2005-03-02 18:26
#52233 #52233
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Ishka,02.03.2005, 14:33]da ein numerischer vergleich von nichtnumerischen Werten gleichheit zurückgibt.[/quote]
und jede menge warnings!
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2005-03-02 22:06
#52234 #52234
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wozu gibt's denn no warnings :-)
<< >> 6 Einträge, 1 Seite



View all threads created 2005-03-02 08:51.