Thread Modulversion vergleichen
(15 answers)
Opened by bianca at 2010-11-28 08:35
Damit komme ich natürlich nicht weiter, wie ich selbst feststelle.
Dies hier ist ein funktionierender Ansatz. Frage in die Runde: Ist diese Interpretation der Versionsnummern korrekt? Von links nach rechts den ersten Unterschied finden und dann bei unterschiedlich langem Aufbau am Ende auf != 0 untersuchen? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 #!/usr/bin/perl -w use strict; use warnings; my %tests = ( 1 => { a => '0.710.08', b => '0.710.09', erwartet => '<', }, 2 => { a => '0.710.00', b => '0.710.00', erwartet => '=', }, 3 => { a => '0.710.00', b => '0.710', erwartet => '=', }, 4 => { a => '0.710.09', b => '0.710.08', erwartet => '>', }, 5 => { a => '0.710', b => '0.710.00', erwartet => '=', }, 6 => { a => '1.93_99', b => '1.93_099', erwartet => '=', }, 7 => { a => '1.93_99', b => '1.94', erwartet => '<', }, 8 => { a => '2', b => '1', erwartet => '>', }, ); foreach my $nr (keys %tests) { my $erg = versionsvergleich($tests{$nr}{a},$tests{$nr}{b}); print "$tests{$nr}{a} / $tests{$nr}{b} => '$erg' " . ($erg eq $tests{$nr}{erwartet} ? 'passed' : 'FAILED!!!') . "\n"; } ############################################################################### sub versionsvergleich { # # Rückgabe: # ========= # > = linke Version ist höher # = = Versionen sind gleich # < = rechte Version ist höher # E = Fehler aufgetreten # return 'E' if !defined $_[0] || $_[0] eq '' || !defined $_[1] || $_[1] eq ''; my @teil; @{$teil[0]} = split /[^0-9]/,$_[0]; @{$teil[1]} = split /[^0-9]/,$_[1]; my $ret = ''; my $kuerzer = (scalar @{$teil[0]} <= scalar @{$teil[1]} ? 0 : 1); for (my $z = 0; $z < scalar @{$teil[$kuerzer]}; $z ++) { # von links den ersten Unterschied finden if ($teil[0][$z] > $teil[1][$z]) { $ret = '>'; last; } elsif ($teil[0][$z] < $teil[1][$z]) { $ret = '<'; last; } } if ($ret eq '') { # bis hierher gleich if (scalar @{$teil[0]} == scalar @{$teil[1]}) { # müssen gleich sein $ret = '='; } else { # andere Länge my $laenger = ($kuerzer ? 0 : 1); # der längere ist der der nicht der kürzere ist my $start = scalar @{$teil[$laenger]} - (scalar @{$teil[$laenger]} - scalar @{$teil[$kuerzer]}); # Beginn ab dem überschüssigen Teil for (my $z = $start; $z < scalar @{$teil[$laenger]}; $z ++) { if ($teil[$laenger][$z] > 0) { $ret = ($laenger ? '<' : '>'); last; } } $ret = '=' if $ret eq ''; } } return $ret; } 10 print "Hallo"
20 goto 10 |