Thread Seriennummer (Buchstaben) hochzählen
(7 answers)
Opened by Gustl at 2014-01-27 14:27
Hallo,
ich möchte aus z.B. folgender Seriennummer 10011902APWPA die darauf folgenden 1000 Seriennumern ausgeben. Wobei die Zahl immer gleich bleibt und er die letzten 5 Chars zählen soll. Von A bis Z. Wenn dann der letzten Stelle ein Z steht und hochgezählt werden muss springt dieses auf A und die nächste Stelle wird hochgezählt. Beispiel: 10011902APYAW 10011902APYAX 10011902APYAY 10011902APYAZ 10011902APYBA 10011902APYBB Ich habe es auch schon mal hingepfuscht. Hier meine Lösung: 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 my @new_sn = get_new_numbers(1000, "10011902APWPA"); foreach(@new_sn){ print $_."\n"; } # A = 65 - Z = 90 sub get_new_numbers{ my $anzahl = shift; my $last_sn = shift; my @back_array; #print $last_sn."\n"; my ($mat, $last5); if( $last_sn =~ /(\w*)(\w{5})/ ) { $mat = $1; $last5 = $2; } my @c = split(//,$last5); foreach(@c){ $_ = ord($_); } foreach(1..$anzahl){ @c = reverse(@c); my $help_var = 0; foreach(@c){ ($help_var, $_) = count($_); last unless $help_var; } @c = reverse(@c); my $new_sn = $mat; foreach(@c){ $new_sn .= chr($_); } push(@back_array, $new_sn); } return @back_array; } sub count{ my $c_dec = shift; if( ++$c_dec > 90 ){ $c_dec = 65; return (1, $c_dec); } return (0, $c_dec); } Ich finde meine Lösung noch etwas umständlich, und ich denke dies wird auch leichter gehn, verständlicher, ohne 2x reverse in der schleife etc. Und Lernen will man ja auch noch. :) Wie würdet ihr das machen? Wer Lust und Zeit hat kann sich da mal bissl durchbeißen. Würde mich freuen. Gruß Gustl |