1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

ical Datei einlesen und z.B. eingetragen Feiertage in einer Tabelle ausgeben in C#.

Dieses Thema im Forum ".NET Café" wurde erstellt von Schm1tty, 5. April 2018.

  1. Schm1tty

    Schm1tty Grünschnabel

    Hallo Liebe Leute,

    ich bin neu in der IT und kann noch nicht so gut Programmieren. Ich habe die Aufgabe bekommen eine ical-Datei einzulesen und bestimmte Tage in einer Tabelle auszugeben in C#. Diese Anwendung wird Später in ein Programm eingebaut. Da es jetzt meine erste Aufgabe ist hab ich kein schimmer wie ich an die Sache ran gehen soll und wie ich das alles mache. Kann mir jemand Bitte Helfen oder Tipps geben?

    Lieben Dank im voraus.
     
  2. sheel

    sheel I love Asm Administrator

    Hi

    Schritt 1 ist dann wohl mal, es zu schaffen, eine Tabelle mit irgendwelchen Daten anzuzeigen.
    Und hier ist es für uns etwas schwierig, dir sofort eine genaue Antwort zu geben, weil es sehr viele verschiedene Möglichkeiten dafür gibt. Und weil wir nicht wissen, was verwendet werden soll bzw. was zum anderen Programm dazupasst (wo es dann eingebaut werden soll).

    Daher ...
    a) Vielleicht ist der Teil für dich ja kein Problem? Kannst du ein Programm mit einer Tabelle, ohne bestimmten Inhalt, ohne Hilfe erstellen?
    b) Wenn nicht, wie ist es mit einem Programm ohne Tabelle, aber zumindest mit sichtbarem Fenster? Wenn das geht und wir den Code sehen dann wissen wir auch besser, wie es weitergehen soll.
    c) Sonst ... je nach dem was du schon weißt, bitte so viel Hinweise wie möglich damit wir erkennen können, wie die graphische Oberfläche aufgebaut werden soll.
     
    Schm1tty gefällt das.
  3. Schm1tty

    Schm1tty Grünschnabel

    @sheel
    Danke Schon mal.


    Ich bin noch nicht zur Erstellung von dem Programm gekommen. Was ich machen möchte ist:
    Eine Methode der übergebe ich einen String.
    Der String enthält den Pfad zur ical-Datei.
    Dann liest die Methode die Datei und liefert eine liste mit Datums werte.

    Mein Problem geht schon los wie ich die ical-Datei einlese. Wie ich txt-Dateien lese ist mir bewusst aber der Rest nicht.
    Was ich nicht beachten muss ist, dass das Programm was ich mache nicht so verwendet wird um ins andere Programm reinzubauen. Sie wollen nur mir aufgaben geben.
    Nur doof wenn ich schon bei der ersten scheitere.
     
  4. sheel

    sheel I love Asm Administrator

    Wikipedia hat ein ainfaches Beispiel so einer Datei:
    Code (Text):
    1. BEGIN:VCALENDAR
    2. VERSION:2.0
    3. PRODID:-//hacksw/handcal//NONSGML v1.0//EN
    4. BEGIN:VEVENT
    5. UID:uid1@example.com
    6. DTSTAMP:19970714T170000Z
    7. ORGANIZER:CN=John Doe:MAILTO:john.doe@example.com
    8. DTSTART:19970714T170000Z
    9. DTEND:19970715T035959Z
    10. SUMMARY:Bastille Day Party
    11. END:VEVENT
    12. END:VCALENDAR
    Ist also auch nur eine Textdatei.

    Wenn du die Datei Zeile für Zeile einliest...

    BEGIN:VCALENDAR und END:VCALENDAR markieren den "Kalender", der dann mehrere Tage eingetragen hat.
    Da theoretisch außerhalb dieser Sektion auch was sein kann (zumindest eine leere Zeile am Schluss oder ähnliches, könnte man zB. außerhalb der Schleife eine Variable machen, ob man gerade "in" dem Kalender oder außerhalb ist. Anfangswert ist außerhalb (zB. false für ein bool inCalendar).
    In der Schleife, wo je eine Zeile eingelesen wird, hänt es dann von der Variable ab, was man mit der Zeile macht:
    Wenn man nicht im Kalender ist, prüfen ob die Zeile BEGIN:VEVENT ist. Wenn ja, die Variable auf "drinnen" setzen, weil es eben ab hier drinnen ist. Sonst, einfach nichts tun und den nächsten Schleifendurchgang die nächste Zeile lesen lassen.
    Wenn man gerade im Kalender ist: Wenn END:VCALENDAR dann die Variable wieder auf draußen setzen, sonst (vorerst) nichts.

    Bisher weiß man dann immerhin, wo der Kalender anfängt und aufhört.

    Der Kalender hat dann innen so Zeug wie VERSION, und ein oder mehrere VEVENTs - wieder mit BEGIN und END. Da kann man den bestehenden Code gleich erweitern - die Variable ist dann nicht nur "außerhalb" oder "im Kalender", sondern "gand draußen", "im Kalender aber nicht in einem Event", und "in einem Event". Wieder mit dem Erkennen von Beginn und Ende von Events, aber die nur wenn man schon im Kalender ist.

    Was man dann im Event macht später - sind bis hierhin einmal Fragen/Probleme?
     
    Schm1tty gefällt das.
  5. ComFreek

    ComFreek Mod | @comfreek Moderator

    Wieso setzt du nicht eine fertige Bibliothek ein? Es gibt ganz bestimmt ical Bibliotheken für .NET.
     
  6. sheel

    sheel I love Asm Administrator

    Viele Lehrer werden das wohl nicht akzeptieren...
     
  7. Schm1tty

    Schm1tty Grünschnabel

    Hey Leute,
    ich hätte noch mal eine Frage zu dem Thema. Unten seht Ihr mein Code in C# der auch fast fertig ist. Jetzt soll ich allerdings alles in eine Klasse packen mit den Eigenschaften Startdatum, Enddatum, Summary und Description. Code soll ausgelagert werden in eine Methode die im Eingang Pfad übernimmt und Return die Liste meiner Klasse Liefert.

    Ich hab kein schimmer wie man da jetzt eine Klasse draus mache geschweigendem von dem anderen Zeug.
    Ich sag jetzt schon mal Vielen Lieben Dank an alle !





    Code (C#):
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.IO;
    7.  
    8. namespace ConsoleApp1
    9. {
    10.     class Program
    11.     {
    12.         private static string EVENTSTART_TOKEN = "BEGIN:VEVENT";
    13.         private static string EVENTEND_TOKEN = "END:VEVENT";
    14.         private static string STARTDATE_TOKEN = "DTSTART;";
    15.         private static string ENDDATE_TOKEN = "DTEND;";
    16.         private static string VALUE_TOKE = "VALUE=DATE:";
    17.         private static string VALUE_SUMMARY = "SUMMARY:";
    18.         private static string VALUE_DESCRIPTION = "DESCRIPTION:";
    19.  
    20.  
    21.         static void Main(string[] args)
    22.         {
    23.             string all = File.ReadAllText(@".................................................................................");
    24.  
    25.             char[] delim = { '\n', };                            
    26.             string[] lines = all.Split(delim, StringSplitOptions.RemoveEmptyEntries);
    27.          
    28.             bool inEvent = false;
    29.  
    30.             int startTimeStamp = 0;
    31.             int endTimeStamp = 0;
    32.             string summary = String.Empty;
    33.             string description = String.Empty;
    34.  
    35.  
    36.             for (int i = 0; i < lines.Length; i++)
    37.             {
    38.                 if (lines[i].StartsWith(EVENTSTART_TOKEN))
    39.                     inEvent = true;
    40.                 else if (lines[i].StartsWith(EVENTEND_TOKEN))
    41.                 {
    42.                     Console.WriteLine($"Event Name {summary}, Description: {description}: {startTimeStamp} - {endTimeStamp}");
    43.                     inEvent = false;
    44.                 }
    45.                 else if (inEvent)
    46.                 {
    47.                     if (lines[i].StartsWith(STARTDATE_TOKEN))
    48.                     {
    49.                         startTimeStamp = Int32.Parse(lines[i].Replace(STARTDATE_TOKEN, string.Empty).Replace(VALUE_TOKE, String.Empty));
    50.  
    51.                     }
    52.                     if (lines[i].StartsWith(ENDDATE_TOKEN))
    53.                     {
    54.                         endTimeStamp = Int32.Parse(lines[i].Replace(ENDDATE_TOKEN, string.Empty).Replace(VALUE_TOKE, String.Empty));
    55.                     }
    56.                     if (lines[i].StartsWith(VALUE_SUMMARY))
    57.                     {
    58.                         summary = lines[i].Replace(VALUE_SUMMARY, string.Empty).Replace("\r", String.Empty);
    59.  
    60.                     }
    61.                     if (lines[i].StartsWith(VALUE_DESCRIPTION))
    62.                     {
    63.                         description = lines[i].Replace(VALUE_DESCRIPTION, string.Empty);
    64.                         while(i + 1 < lines.Length && lines[i + 1].StartsWith(" "))
    65.                         {
    66.                             // Es muss eine weitere Zeile geben
    67.                             i++;
    68.                             description += lines[i].Substring(1);
    69.                         }
    70.                     }
    71.  
    72.                 }
    73.             }
    74.             Console.ReadLine();
    75.         }
    76.  
    77.     }
    78. }
     
Die Seite wird geladen...