Laden...

Einlesen von ICS-Dateien für einen Kalender

Letzter Beitrag vor 3 Monaten 5 Posts 236 Views
Einlesen von ICS-Dateien für einen Kalender

Ich parse für eine Kalenderapp, die ich entwickle, ics-Dateien. Ich tue dies wie folgt:

string[] lines = content.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);

string summary = lines[8]; //SUMMARY

string start = lines[18].Split(':')[1]; //START-ZEITPUNKT

string end = lines[20].Split(':')[1]; //END-ZEITPUNKT

Nun meine Frage: Funktioniert das immer? Gibt es da eine elegantere Methode, die "SUMMARY" sowie den Start- und den Endzeitpunkt herauszuziehen?

Anstatt dich auf die Reihenfolge und Vollständigkeit der Daten zu verlassen, solltest du besser die Daten vernünftig parsen.

Wenn du nur die von dir erwähnten 3 Einträge benötigst, reicht aber auch

string summary, start, end;
foreach (string line in lines)
{
  string s;
  if (TryReadLine(line, "SUMMARY:", out s))
    summary = s;
  if (TryReadLine(line, "DTSTART:", out s))
    start = s;
  if (TryReadLine(line, "DTEND:", out s))
    end = s;    
}

mit der Hilfsmethode

bool TryReadLine(string line, string keyword, out string value)
{
  if (line.StartsWith(keyword))
  {
    value = line.Substr(keyword.Length);
    return true;
  }
  
  value = String.Empty; // edited
  return false;
}

Da ich das ICS-Format bisher nicht kannte, habe ich mich an ICalendar orientiert.

PS: Noch schöner könnte man den ersten Code mit einem Array (bzw. List) machen.

Vielen Dank, das funktioniert - nur musste ich in der TryReadLine-Methode dem string value einen Leerstring zuweisen, d. h. value  = "".

Hat die Blume einen Knick, war der Schmetterling zu dick.