Thread Seriennummer (Buchstaben) hochzählen (7 answers)
Opened by Gustl at 2014-01-27 14:27

Gustl
 2014-01-27 14:27
#173235 #173235
User since
2011-01-27
441 Artikel
BenutzerIn
[Homepage]
user image
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

View full thread Seriennummer (Buchstaben) hochzählen