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:
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";
}
sub get_new_numbers{
my $anzahl = shift;
my $last_sn = shift;
my @back_array;
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