Alphanumerische Dateierweiterungen inkrementieren

Beschreibung
Mit Hilfe dieses Tipps können Dateierweiterungen mit alphanumerischer Bezeichnung ganz einfach inkrementiert werden. Dabei werden Ziffern einfach um 1 erhöht und Buchstaben mit dem nächsten im Alphabet ersetzt. Selbst eine Kombination aus Ziffern und Buchstaben stellt kein Problem dar.
Diese Funktion inkrementiert eine Dateierweiterung. Groß- und Kleinschreibung wird dabei nicht unterschieden. Eine Unterscheidung zwischen langen und kurzen (8.3-Namenskonvention) Dateierweiterungen ist jedoch möglich. Eine Dateierweiterung, die nur aus Ziffern besteht wird niemals durch Buchstaben weitergezählt. Das selbe gilt für eine Dateierweiterung, die nur aus Buchstaben besteht. Bei einer Kombination werden Ziffern um 1 erhöht und Buchstaben durch den nächsten im Alphabet ersetzt.
VBC#
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
''' <summary>
''' Erhöht die angegebene Dateierweiterung bei Zahlenwerten um 1. Bei Buchstaben wird das nächste
''' Zeichen des Alphabetes verwendet.
''' </summary>
''' <param name="extension">Die Dateierweiterung, die erhöht werden soll.</param>
''' <param name="shortFilename">true, wenn die 8.3-Namenskonvention beachtet werden soll, ansonsten
''' false.</param>
''' <returns>Die neue Dateierweiterung, die bei numerischen Werten um 1 erhöht und bei Buchstaben um ein
''' Zeichen im Alphabet weitergerückt wurde.</returns>
''' <remarks></remarks>
Public Function IncrementExtension(ByVal extension As String, ByVal shortFilename As Boolean) As String
    ' Die Liste mit den ASCII-Werten und die neue Dateierweiterung
    Dim values As List(Of Integer) = GetAsciiArray(extension.ToLower)
    Dim newExtension As String = String.Empty
 
    ' Übertrag und Index des aktuellen Zeichens
    Dim carryover As Boolean = True
    Dim i As Integer = values.Count
 
    ' Durchlaufe das Array von hinten nach vorne. Dabei wird der ASCII-Wert jeweils um 1 erhöht. Falls ein
    ' Übertrag vorhanden ist wird das aktuelle Zeichen entweder auf 0 oder auf a zurückgesetzt und an
    ' das vorige Zeichen weitergeleitet. Der Vorgang erfolgt solange, bis die neue Dateierweiterung ermittelt wurde.
    Do
        i -= 1
 
        ' Prüfe, ob der Anfang der Liste erreicht wurde. Dieser Punkt wird nur erreicht, wenn keine
        ' 8.3-Namenskonvention beachtet werden soll. Dabei wird entweder eine 0 oder ein a an den Anfang der Liste
        ' hinzugefügt und der Index auf dieses Element gesetzt.
        If i = -1 Then
            If values(0) = 48 Then
                values.Insert(0, 48)
            Else
                values.Insert(0, 96)
            End If
 
            i = 0
        End If
 
        ' ASCII-Wert um 1 erhöhen
        values(i) += 1
 
        ' Prüfe, ob die jeweilige Grenze für Ziffern oder Buchstaben überschritten wurde. In diesem Fall
        ' wird das Zeichen auf 0 oder a gesetzt und der Übertrag an das vorige Zeichen durch erneuten Durchlauf
        ' der Schleife übergeben. Wurden die Grenzen nicht überschritten, so wurde ohne Überlauf
        ' inkrementiert und die Dateierweiterung fertig.
        If values(i) = 58 Then
            values(i) = 48
        ElseIf values(i) = 123 Then
            values(i) = 97
        Else
            ' Falls das Zeichen kein gültiges Zeichen, also 0-9 und a-z ist, dann weitergezählten Wert
            ' zurücksetzen. Anschließend keinen Übertrag erzeugen und Methode abschließen.
            If Not ((values(i) > 47 AndAlso values(i) < 58) OrElse (values(i) > 97 AndAlso values(i) < 123)) Then
                values(i) -= 1
            End If
 
            carryover = False
        End If
 
        ' Prüfe, ob 8.3-Namenskonvention eingehalten werden soll und das erste Element in der Liste 
        ' erreicht wurde. Dabei wird kein Übertrag weitergeleitet und die Schleife verlassen.
        If shortFilename AndAlso i = 0 Then carryover = False
 
    Loop While carryover
 
    ' Neue Dateierweiterung zusammenbauen und zurückgeben
    For j As Integer = 0 To values.Count - 1
        newExtension &= Chr(values(j))
    Next
 
    Return newExtension
End Function
1
Kein Code vorhanden
Für diese Funktion wird folgende vorausgesetzt:
VBC#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
''' <summary>
''' Erstellt aus der angegebenen Zeichenkette ein Array mit den ASCII-Werten der einzelnen Zeichen.
''' </summary>
''' <param name="value">Die Zeichenkette, deren Zeichen in ASCII-Werte ermittelt und als Array zurückgegeben
''' werden sollen.</param>
''' <returns>Ein Array mit den ASCII-Werten der einzelnen Zeichen der Zeichenkette.</returns>
''' <remarks></remarks>
Public Function GetAsciiArray(value As String) As List(Of Integer)
    Dim values As New List(Of Integer)
 
    ' Iteriere durch jedes Zeichen und füge den ASCII-Wert zur Auflistung hinzu
    For i As Integer = 0 To value.Length - 1
        values.Add(Asc(value(i)))
    Next
 
    Return values
End Function
1
Kein Code vorhanden