Versionsnummer hochzählen

  • VBScript

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von sabrina123451.

    Versionsnummer hochzählen

    Guten Tag zusammen,

    Habe ein kleines Problem und zwar versuche ich mit Hilfe von einem VB Script eine Versionsnummer hochzuzählen das dies mit einer Schleife funktionieren wird, ist mir klar.

    Hier habe ich mal ein Beispiel:

    Visual Basic-Quellcode

    1. Dim sVersion
    2. ' Test 1 -> erwartetes Ergebnis 1.0.002
    3. sVersion = "1.0.001"
    4. sVersion = IncVersion(sVersion)
    5. MsgBox sVersion
    6. ' Test 2 -> erwartetes Ergebnis 1.91 (weil 1.10 kleiner ist als 1.9)
    7. sVersion = "1.9"
    8. sVersion = IncVersion(sVersion)
    9. MsgBox sVersion
    10. Function IncVersion(sVersion)
    11. Dim sNewVersion
    12. ' Hier wird dann der Code eingefügt
    13. sNewVersion = sVersion
    14. IncVersion = sNewVersion
    15. end function


    Wie schreibt man am besten diese Funktion?

    Ist leider das erste Mal das ich mit VB arbeite, habe sonst nur mit C# und Java programmiert.

    Wäre lieb wenn mir Jemand helfen könnte.

    LG Sabrina
    VisualStudio liefert in den Projekteigenschaften einen Versionszähler mit.
    Der Zählt Automatisch weiter wenn "Veröffentlicht" wird.

    edit: Sry, wer lesen kann ist klar im Vorteil!
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Schamash“ ()

    sabrina123451 schrieb:

    (weil 1.10 kleiner ist als 1.9)
    Wo das denn ?

    Also eine Version besteht meistens aus vier Teilen Major.Minor.Build.Release, du musst halt wissen welchen du inkrementieren willst, ggf. alle niedrigeren (rechten) zurücksetzen bei Inkrementierung. Ich würde die Version in nem String halten, den dann bei "." splitten (ich hoffe das geht in vbs) und halt das gewünschte hochzählen, und zusammenbasteln.

    @Schamash : Tag: VBScript ;)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Erstmal vielen Dank für die Antworten :)

    Ich verzweifel an dieser Sprache langsam, verstehe da ehrlich gesagt nur Bahnhof :(

    Könnte mir Jemand ein Beispielcode geben, um ein besseres Verständnis zu erlangen?
    Wäre echt total lieb.

    LG Sabrina
    Habe die Split Funktion hinbekommen, aber wie geht es nun weiter? :(

    Visual Basic-Quellcode

    1. Dim sVersion
    2. ' Test 1 -> erwartetes Ergebnis 1.0.002
    3. sVersion = "1.0.001"
    4. sVersion = IncVersion(sVersion)
    5. MsgBox(sVersion)
    6. ' Test 2 -> erwartetes Ergebnis 1.91 (weil 1.10 kleiner ist als 1.9)
    7. sVersion = "1.9"
    8. sVersion = IncVersion(sVersion)
    9. MsgBox(sVersion)
    10. Function IncVersion(sVersion)
    11. ' Hier muss der Code stehen
    12. Dim sNewVersion As String = "1.0.001"
    13. Dim split As String() = sVersion.Split(".")
    14. For Each s As String In split
    15. If s.Trim() <> "" Then
    16. Console.WriteLine(s)
    17. Console.ReadLine()
    18. End If
    19. Next s
    20. sNewVersion = sVersion
    21. IncVersion = sNewVersion
    22. End Function
    Du hast Erfahrung in C# verzweifelst aber in VBS ? ^^

    Ich bin echt nicht gut in VBS, aber es läuft, über die Qualität kann ich nicht viel sagen

    Visual Basic-Quellcode

    1. Dim version
    2. version = "1.2.3.4"
    3. MsgBox(version)
    4. version = IncreaseVersion(version, 2)
    5. MsgBox(version)
    6. Function IncreaseVersion(version, stelle)
    7. teile = Split(version, ".") 'In Teile teilen
    8. s = 1
    9. for each v in teile
    10. if s = stelle then 'Erhöhen wenn die Stelle erreicht wurde
    11. teile(s - 1) = teile(s - 1) + 1
    12. elseif s > stelle then 'Null setzen wenn wir nach der Stelle sind
    13. teile(s - 1) = 0
    14. end if
    15. s = s + 1
    16. next
    17. IncreaseVersion = Join(teile, ".") 'Wieder zusammensetzen
    18. End Function



    Mooooooment: Programmierst du jetzt in VB.NET oder in VBScript ??
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Funktioniert es denn so wie du willst ?

    Und wenn dir jemand geholfen hat, dann zögere nicht unten rechts am jeweiligen Post den Daumen-Hoch Button zu drücken ^^
    Sollte das Thema erledigt sein, scrolle hoch zu Thema bearbeiten -> Als Erledigt markieren oder doppelklicke auf das kleine rote Kästchen neben dem Titel.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    sabrina123451 schrieb:

    Ich verzweifel an dieser Sprache langsam
    VBS hat halt einen etwas eingeschränkten Funktionsumfang.
    Da musst du halt die Formatfunktion von Hand nachbilden.
    Aber ansonsten ist das alles lediglich etwas Stringverarbeitung und eine Addition.

    Visual Basic-Quellcode

    1. Function IncVersion(ByVal Version)
    2. SubVersionPos = InStrRev(Version, ".")
    3. MainVersion = Left(Version, SubVersionPos)
    4. SubVersion = Mid(Version, SubVersionPos + 1, 99)
    5. NewSubVersion = Right(String(Len(SubVersion), "0") & SubVersion + 1, Len(SubVersion))
    6. IncVersion = MainVersion & NewSubVersion
    7. End Function


    Es geht auch noch etwas kryptischer:

    Visual Basic-Quellcode

    1. ​Function IncVersion(ByVal Version)
    2. S = Split(Version, ".")
    3. S(UBound(S)) = Right(String(Len(S(UBound(S))), "0") & S(UBound(S)) + 1, Len(S(UBound(S))))
    4. IncVersion = Join(S, ".")
    5. End Function
    Such dir raus, was dir besser gefällt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Bei mir gibt der zweite Parameter ja an, welcher Teil der Version geändert werden soll. Wenn du den Parameter weglässt, dann muss halt die Stelle die geändert wird konstnat sin.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    sabrina123451 schrieb:

    Habe es soweit hinbekommen
    Mit welchem Code?
    Meine Beispiele zählen immer die letzte Subversion hoch, und zwar mit der richtigen Länge, was mit dem Code in Post #6 nicht gewährleistet ist.
    Da folgt nach 1.1.1.008 die 1.1.1.9
    Unschön.
    Und nach 1.1.1.9 die 1.1.1.10
    Schon hast du dein Sortierproblem wieder. ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Ich benutze deinen Code petaod.

    Soweit läuft es, nur wenn ich von 1.9 auf 1.10 gehen will zeigt er mir 1.0 an, wie kann ich das Problem beheben?
    Es soll aufjedenfall neutral gehalten werden. Das erste Beispiel funktioniert von 1.0.001 auf 1.0.002 aber wie gesagt nicht von 1.9 auf 1.10.

    LG Sabrina
    Hallo zusammen,

    habe nochmal ein wenig daran gearbeitet und würde gerne nach der UBound Funktion eine Schleife verwenden die das Ganze wieder zusammen setzt. Ist dies möglich? Wenn ja, wie? :)

    Meine Änderung würde ich gerne vornehmen, weil ich gemerkt habe das es mit diesem Programm so ist das er nur auf einen oder zwei Punkte bei der Versionsnummer zählt. Er sollte aber auch hochzählen wenn z.B. eine Versionsnummer 1.0.0.0.0.0.1 ist ... also soll jede letzte Stelle einer Versionsnummer erhöhen lassen. Nicht nur wenn eine Version 1.9 ist auf 1.10 sondern auch wenn sie beispielsweise 1.0.0.0.0.0.0000 ist auf 1.0.0.0.0.0.0001 zählen.


    Beispielcode:

    Visual Basic-Quellcode

    1. Dim sVersion
    2. ' Test 1 -> erwartetes Ergebnis 1.0.002
    3. sVersion = "1.0.001"
    4. sVersion = IncVersion(sVersion)
    5. MsgBox sVersion
    6. ' Test 2 -> erwartetes Ergebnis 1.10
    7. sVersion = "1.9"
    8. sVersion = IncVersion(sVersion)
    9. MsgBox sVersion
    10. ' Test 3 -> erwartetes Ergebnis 1.0.0.2
    11. sVersion = "1.0.0.1"
    12. sVersion = IncVersion(sVersion)
    13. MsgBox sVersion
    14. ' Test 4 -> erwartetes Ergebnis 1.0.0.0.0.0.0.2
    15. sVersion = "1.0.0.0.0.0.0.1"
    16. sVersion = IncVersion(sVersion)
    17. MsgBox sVersion
    18. Function IncVersion(ByVal sVersion)
    19. Dim sNewVersion
    20. sNewVersion = Split(sVersion, ".") 'In Teile teilen
    21. If InStr(sVersion, ".") = InStrRev(sVersion,".") Then
    22. sNewVersion(1) = sNewVersion(1)+1
    23. Else
    24. sNewVersion(2) = Right(String(Len(sNewVersion(2)), "0") & sNewVersion(2) + 1, Len(sNewVersion(2)))
    25. End If
    26. IncVersion = Join(sNewVersion, ".") 'Zusammensetzun
    27. sNewVersion = sVersion
    28. IncVersion = sNewVersion
    29. end function


    LG Sabrina

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sabrina123451“ ()

    sabrina123451 schrieb:

    würde gerne nach der UBound Funktion eine Schleife verwenden die das Ganze wieder zusammen setzt
    Blödsinn.
    Dafür ist Join da.
    Ich habe meinen obigen Vorschlag noch etwas umgebaut, damit er leichter verständlich ist.

    Visual Basic-Quellcode

    1. Function IncVersion(ByVal Version)
    2. s = Split(Version, ".") 'split to string array
    3. sn = s(UBound(s)) 'last element
    4. sn1 = sn + 1 'increment
    5. l = Len(sn) 'minimum length
    6. If Len(sn1) > l Then l = Len(sn1) 'maximum length
    7. s(UBound(s)) = Right(String(l, "0") & sn1, l) 'left fill with "0"
    8. IncVersion = Join(s, ".") 'join to a single string
    9. End Function

    Falls du's lieber mit gesprächigen Variablennamen möchtest:

    Visual Basic-Quellcode

    1. Function IncVersion(ByVal Version)
    2. SplittedArray = Split(Version, ".") 'split to string array
    3. LastElement = SplittedArray(UBound(SplittedArray)) 'last element
    4. IncrementedNumber = LastElement + 1 'increment
    5. ElementLength = Len(LastElement) 'minimum length
    6. If Len(IncrementedNumber) > ElementLength Then ElementLength = Len(IncrementedNumber) 'maximum length
    7. SplittedArray(UBound(SplittedArray)) = Right(String(ElementLength, "0") & IncrementedNumber, ElementLength) 'left fill with "0"
    8. IncVersion = Join(SplittedArray, ".") 'join to a single string
    9. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wenn ich folgende Zeile aus deinem Beispiel hinzufüge:

    Visual Basic-Quellcode

    1. LastElement = SplittedArray(UBound(SplittedArray)) 'last element


    wird mir ein Fehler angezeigt:
    Index außerhalb des gültigen Bereichs: 'UBound(...)'

    Was hat dies zu bedeuten?

    PS: Hat sich erledigt hab den Fehler selbst gefunden, danke für deine Hilfe und deiner vielen Mühe mit mir ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sabrina123451“ ()