Programmierung

[C#] Versionen aus Dateinamen ermitteln

Es bestand folgende Aufgabe: Man hatte eine Reihe von Dateien, die so aussahen wie diese hier:
001-3.0.0-Folder1
002.3.0.1-folder2
003-4.0.4
004-Beta2
Und nun sollte man die Versionsnummern herausfinden.

Wie man hier sieht, können einige Probleme auftauchen. Zum einen ist in der zweiten Datei ein Punkt statt eines Minuszeichens geschrieben und die vierte Datei hat noch nicht einmal eine Versionsnummer (diese lasse ich hier auch erst einmal weg. Je nach Anforderung würde ich da standardmäßig 0.0.0 nehmen). Mit Hilfe der Klasse Regex lassen sich die Versionsnummern auslesen. Bevor ich jedoch gleich zur Funktion übergehe, schreibe ich die Tests auf:

[TestMethod]
public void TestMethod1()
{
Assert.AreEqual("-3.0.0-", RegEx1.FileReads.GetVersion(" 001-3.0.0-Folder1"));
}
 
[TestMethod]
public void TestMethod2()
{
Assert.AreEqual(".3.0.1-", RegEx1.FileReads.GetVersion(" 002.3.0.1-folder2"));
}
 
[TestMethod]
public void TestMethod3()
{
Assert.AreEqual(string.Empty, RegEx1.FileReads.GetVersion(" 004-Beta2"));
}
 
[TestMethod]
public void TestMehtod4()
{
Assert.AreEqual("-4.0.4", RegEx1.FileReads.GetVersion(" 003-4.0.4"));
}

Auf diese Weise stelle ich sicher, dass meine Funktion genau das tut, was ich will. Ich zeige hier auch nur den ersten Schritt, und zwar den String auszulesen, in dem die Versionsnummer steht. Im zweiten Teil müsste man dann schauen, dass man die Punkte vor der Versionsnummer und die Minuszeichen wegbekommt, doch könnt ihr ja noch als Aufgabe für euch nehmen ;).

Nun erstelle ich eine Klasse FileReads in dem namespace RegEx1. Die Klasse soll die Funktion GetVersion enthalten.

namespace RegEx1
{
    public class FileReads
    {
        public static string GetVersion(string s)
        {
// ...
        }
    }
}

Nun, nachdem ich ein paar Versuche durchgeführt habe, wie man das am besten macht, bin ich auf folgende Lösung gekommen:

public static string GetVersion(string s)
{
string[] result = Regex.Split(s, @"[\-\.]\d{1}\.\d{1}\.\d{1}\-{0,1}");
for (int i = 0; i < result.Length; i++)
{
if (!result[i].Equals(string.Empty))
{
s = s.Replace(result[i], string.Empty);
}
}
 
return s;
}

Ich splitte den String auf und bekomme ein String-Array mit eben den String-Teilen, die ich nicht mehr haben möchte, und ersetze diese dann im Ursprungsstring durch einen leeren String. Und am Schluss bekomme ich eben jene Versionsnummer, die in dem Dateinamen steht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.