Holladiho
Ich habe mir vor einer Weile mal eine Funktion geschrieben, die eine Artikelnummer um eins erhöht.
Also wenn die Artikelnummer 9 ist, so soll die neue Artikelnummer 10 sein.
Problematisch ist, dass die Artikelnummer jeden beliebigen Wert haben können. Also zum Beispiel "ap123", "54cd88", "132-22"
Meine Sub reagiert auf all diese verschiedenen Typen - aus ap123 wird ap124 - aus 54cd88 wird 54cd89, usw.
Endet die Artikelnummer auf ein nicht numerisches Zeichen, wird eine 1 rangeklatscht.
Das klappt alles.
Vor einer Woche bin ich aber auf eine Eventualität gestoßen, die ich in meiner Funktionslogik vergessen habe.
Wenn ein - gefolgt von einer 0 vorkommt (was nur selten der Fall ist), also z.B. 124-07, dann gibt meine Funktion als erhöhte Artikelnummer die 124-8 aus. Die 0 wird abgeschnitten.
Hier fällt mir keine Lösung ein, wie ich diesen Fall abfangen und dann auch behandeln kann, damit mir die 0 nicht abhanden kommt.
Fällt jemandem etwas ein?
Ich habe mir vor einer Weile mal eine Funktion geschrieben, die eine Artikelnummer um eins erhöht.
Also wenn die Artikelnummer 9 ist, so soll die neue Artikelnummer 10 sein.
Problematisch ist, dass die Artikelnummer jeden beliebigen Wert haben können. Also zum Beispiel "ap123", "54cd88", "132-22"
Meine Sub reagiert auf all diese verschiedenen Typen - aus ap123 wird ap124 - aus 54cd88 wird 54cd89, usw.
Endet die Artikelnummer auf ein nicht numerisches Zeichen, wird eine 1 rangeklatscht.
Das klappt alles.
Vor einer Woche bin ich aber auf eine Eventualität gestoßen, die ich in meiner Funktionslogik vergessen habe.
Wenn ein - gefolgt von einer 0 vorkommt (was nur selten der Fall ist), also z.B. 124-07, dann gibt meine Funktion als erhöhte Artikelnummer die 124-8 aus. Die 0 wird abgeschnitten.
Hier fällt mir keine Lösung ein, wie ich diesen Fall abfangen und dann auch behandeln kann, damit mir die 0 nicht abhanden kommt.
Fällt jemandem etwas ein?
VB.NET-Quellcode
- Private Function increaseArtNR(ArtNr As String) As String
- Dim Number As Integer
- Dim i As Integer
- Dim NewArtNr As String
- 'Wenn Artikelnummer numerisch ist, um eins erhöhen und zurückgeben
- Dim ArtNrLenght As Integer = ArtNr.Length
- If Integer.TryParse(ArtNr, Number) Then
- NewArtNr = (Number + 1).ToString
- Else
- 'ArtNr von hin1ten nach vorne durchlaufen und Zahl auslesen
- Dim Tempnumber As Integer
- For i = 1 To ArtNr.Length
- Number = Tempnumber
- If Not Integer.TryParse(ArtNr.Substring(ArtNrLenght - i), Tempnumber) Then
- i -= 1
- Exit For
- '''Hier in Kommentaren mein bester Lösungsansatz - aber es bleibt leider beim Ansatz
- 'oben Dim StringNumber as string
- 'Else
- 'Stringnumber = ArtNr.Substring(ArtNrLenght - i)
- 'Nun hab ich beim verlassen der Schleife den kompletten Teil der Artikelnummer, der erhöht werden muss, also bei "124-07" hätte ich "-07"
- 'aber wie weiter machen? Und vorallem wie differenzieren, ob ich gerade überhaupt mit String arbeiten muss. Also ob -0 vorkommt, oder evtl. -000000 oder wieviele 0 auch immer, oder ob ich normal weiter machen kann.
- End If
- Next
- 'Wenn Number 0 bleibt ist das letzte Zeichen ein String
- If Number = 0 Then
- NewArtNr = ArtNr & 1
- Else
- If Number < 0 Then
- NewArtNr = (ArtNr.Substring(0, ArtNrLenght - i) & (Number - 1)).ToString
- Else
- NewArtNr = (ArtNr.Substring(0, ArtNrLenght - i) & (Number + 1)).ToString
- End If
- End If
- End If
- 'Prüfen ob ArtNr bereits vergeben, wenn ja Funktion neu aufrufen
- If Not ArtNrExists(NewArtNr) Then
- Return NewArtNr
- Else
- Return increaseArtNR(NewArtNr)
- End If
- End Function