Hallo,
es ist zunächst wichtig Detailliert zu wissen wie die Strings aufgebaut sein können. Ich gehe jetzt mal auf die Syntaktischen Elemente ein, die in den Beispielen
dieses Wikipedia-Artikels
zu finden sind.
Zunächst solltest du die einzelnen Teile heraus bekommen:
var parts = myString.Split(':');
Nun kannst du die verschiedenen Teile ordentlich analysieren. Ich empfehle dir dabei eine spezielle Klasse zu erstellen:
public class CronJob
{
public CronJobPart Minute { get; set; }
public CronJobPart Houre { get; set; }
public CronJobPart Day { get; set; }
public CronJobPart Month { get; set; }
public CronJobPart WeekDay { get; set; }
public static CronJob Parse(string value)
{
var parts = value.Split(':');
return new CronJob()
{
Minute = parts.Length > 0 ? CronJobPart.Parse(parts[0]) : new CronJobPart() { IsStar = true },
Houre = parts.Length > 1 ? CronJobPart.Parse(parts[1]) : new CronJobPart() { IsStar = true },
Day = parts.Length > 2 ? CronJobPart.Parse(parts[2]) : new CronJobPart() { IsStar = true },
Month = parts.Length > 3 ? CronJobPart.Parse(parts[3]) : new CronJobPart() { IsStar = true },
WeekDay = parts.Length > 4 ? CronJobPart.Parse(parts[4]) : new CronJobPart() { IsStar = true },
};
}
}
public class CronJobPart
{
public bool IsStar { get; set; }
public int[] Numbers { get; set; }
public bool IsFromTo { get; set; }
internal static CronJobPart Parse(string p)
{
var res = new CronJobPart();
if (p.StartsWith("*"))
{
res.IsStar = true;
if (p.Length > 2)
p = p.TrimStart(new char[] { '*', '/' });
}
if (p.Contains("-"))
{
//Bereichsangabe (Mo-Fr o.ä.)
var p2 = p.Split('-');
res.Numbers = new int[] { int.Parse(p2[0]), int.Parse(p[1]) };
res.IsFromTo = true;
}
else
{
var l = new List<int>();
foreach (var p2 in p.Split(','))
l.Add(int.Parse(p2));
res.Numbers = l.ToArray();
}
return res;
}
}
Ich habe den Code nicht weiter getestet, da ich auch nicht weiß was es noch für Besonderheiten zu beachten gibt. Er sollte aber die Idee meines Vorgehens gut zeigen.
In die CronJob-Klasse kannst du nun noch eine Methode oder einen Operator zum vergleichen einbauen um heraus zu bekommen welcher vor dem anderen Steht. Über LINQs Erweiterungsmethode OrderBy lässt sich dann auch einfach eine ganze Liste sortieren.
Tom Lambert - .NET (C#) MVP
Wozu
Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode |
C# ↔ VB.NET Konverter |
Account bestätigen (Verify Your Account)
Ich: Webseite |
Code Beispiele | Facebook |
Twitter | Snippets