public static IDictionary<MesswertKey, SortedSet<Messwert>> MesswerteAufbereiten(Tuple<IList<Messwert>, ISet<MesswertKey>, ISet<DateTime>> messwerte)
        {
            var aufbereitet = new Dictionary<MesswertKey, SortedSet<Messwert>>();
            var messpunkte = new List<string>();

            // über alle Messpunkte iterieren
            foreach (var messpunkt in messwerte.Item2)
            {
                // über alle Messtage iterieren
                foreach (var messtag in messwerte.Item3)
                {
                    // Messdaten holen, oder leere Messdaten für den Messpunkt und Tag hinterlegen
                    var messdatenFuerPunkt = messwerte.Item1.Where(mw => mw.Datum == messtag && mw.Messpunkt.Equals(messpunkt)).FirstOrDefault();

                    if (messdatenFuerPunkt == null)
                    {
                        messdatenFuerPunkt = new Messwert(messpunkt, messtag);
                    }

                    SortedSet<Messwert> messdaten;
                    if (!aufbereitet.TryGetValue(messpunkt, out messdaten))
                    {
                        messdaten = new SortedSet<Messwert>(new MesswertDatumComparer());
                        aufbereitet.Add(messpunkt, messdaten);
                    }

                    messdaten.Add(messdatenFuerPunkt);
                }
            }

            return aufbereitet;
        }
        public static Tuple<IList<Messwert>, ISet<MesswertKey>, ISet<DateTime>> ReadMesswerte(string path, string fileEnding)
        {
            IList<Messwert> messwerte = new List<Messwert>();
            ISet<MesswertKey> messpunkte = new HashSet<MesswertKey>();
            ISet<DateTime> messtage = new HashSet<DateTime>();

            // iterate over all files in the given path with the given file ending
            var messDateien = Directory.GetFiles(path, $"*{fileEnding}");

            foreach (var messDatei in messDateien)
            {
                using (StreamReader sr = File.OpenText(messDatei))
                {
                    string s = string.Empty;
                    while ((s = sr.ReadLine()) != null)
                    {
                        if (s[0] == '!')
                        {
                            // keine Messdaten, sondern Metadaten -> überspringen
                            continue;
                        }

                        var curMesswert = new Messwert(s);
                        var curMesspunkt = curMesswert.Messpunkt;

                        // messwert hinzufügen
                        messwerte.Add(curMesswert);

                        // messpunkt hinzufügen
                        if (!messpunkte.Contains(curMesspunkt))
                        {
                            messpunkte.Add(curMesspunkt);
                        }

                        // messtag hinzufügen
                        if (!messtage.Contains(curMesswert.Datum))
                        {
                            messtage.Add(curMesswert.Datum);
                        }
                    }
                }
            }

            return new Tuple<IList<Messwert>, ISet<MesswertKey>, ISet<DateTime>>(messwerte, messpunkte, messtage);
        }