none
Zeile aus Textdatei einlesen und als Datum umwandeln RRS feed

  • Frage

  • Hallo,

    ich habe in einer Textdatei in Zeile 20 ein Datum in Form von yyyy.MM.dd stehen. Bei Aufruf dieser Datei möchte ich diesen string in ein Datumsformat umwandeln. Wenn ich folgenden Code ausführe, kommt die Fehlermeldung, das kein gültiges DateTime erkannt wurde:

    var readLines = File.ReadAllLines(path);

    string Datum = readLines[20]; var a = DateTime.Parse(Datum);

    oder

    var a = DateTime.Parse(readLines[20]);

    Wie kann ich denn nun den string in ein DateTime umwandeln?

    Vielen Dank für eure Hilfe


    • Bearbeitet noob81 Mittwoch, 6. Januar 2016 10:30
    Mittwoch, 6. Januar 2016 10:27

Antworten

Alle Antworten

  • Hallo noob81,

    hier hilft Dir die überladene Methode mit zwei Parametern (siehe Hilfe)

    public static DateTime Parse(
        string s,
        IFormatProvider provider,
        DateTimeStyles styles
    )
    
    
    Grüße

    Roland

    Mittwoch, 6. Januar 2016 10:40
  • ich habe in einer Textdatei in Zeile 20 ein Datum in

    var a = DateTime.Parse(readLines[20]);

    Hallo,

    kleiner Hinweis: In .NET sind Indexer 0-based, d.h. die Zeile 20 findest Du unter dem Index Wert 19, nicht 20.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 6. Januar 2016 10:56
  • oder noch einfacher mit

    string strDatum = readLines[20];

    DateTime a = DateTime.ParseExact(strDatum, "yyyy.mm.dd", null)

    Grüße

    Roland

    • Als Antwort markiert noob81 Mittwoch, 6. Januar 2016 14:09
    Mittwoch, 6. Januar 2016 10:59
  • Stimmt, da habe ich mich falsch ausgedrückt. In der Textdatei befindet sich das Datum in Zeile 21.

    @Roland: Damit kann ich leider nicht viel mit anfangen, da ich die Abfrage in einer Funktion und darin mit einer if Abfrage habe. Diese Funktion kann ich somit nicht einfügen. Stelle ich die Befehlszeile ein paar Ebenen hörer gibt es eine Fehlermeldung, das der Parseteil einen Text haben möchte und keinen string

    Mittwoch, 6. Januar 2016 11:01
  • Damit gibt es noch immer den selben Fehler, das kein gültiges DateTime Format erkannt wurde
    Mittwoch, 6. Januar 2016 11:06
  • Das verstehe ich jetzt gerade nicht ganz.

    Wie unterscheidet sich

    var a = DateTime.Parse(readLines[20]);

    von

    var a  = DateTime.ParseExact(readLines[20]), "yyyy.mm.dd", null)

    bei der Nutzung?

    Kennst Du den Formatstring zu dem Zeitpunkt noch nicht?

    Kannst Du mal den entsprechenden Codeteil hier einstellen?



    • Bearbeitet Roland Franz Mittwoch, 6. Januar 2016 11:15 Tippfehler beseitigt
    Mittwoch, 6. Januar 2016 11:14
  • Das ist ja das Problem. Es gibt keinen Unterschied. Hier ist mal ein Auszug des Codes:

    this.tbDatum.Text = DateTime.Today.ToString("yyyy.MM.dd");
    string Datum = tbDatum.Text;
    var aktuellDatum = DateTime.Parse(tbDatum.Text);
    if (File.Exists(path))
    {
        var readLines = File.ReadAllLines(path);
        string Wartung = readLines[20];
                                    
        if (Wartung != null)  // Bis hierhin läuft alles
        {
            var aktuellWartung = DateTime.ParseExact(Wartung, "yyyy.MM.dd", null);
            if (aktuellDatum < aktuellWartung)
            {
                NewButton.BackColor = Color.Aqua;
            }
        }
    }      

    Mittwoch, 6. Januar 2016 11:21
  • da sehe ich zunächst mal nicht das Problem.

    Was steht den in der Stringvariable Wartung, wenn der Fehler auftritt?

    Und welcher Fehler tritt auf?

    Mittwoch, 6. Januar 2016 11:29
  • Mittwoch, 6. Januar 2016 11:35
  • da wird der Inhalt von Wartung nicht zu dem Formatstring passen. Kannst Du bitte per Debugger noch mal den Inhalt von Wartung zum Zeitpunkt des Fehler zeigen?

    Mittwoch, 6. Januar 2016 13:18
  • Ich habe den Debugger noch nie verwendet. Wie mache ich das?
    Mittwoch, 6. Januar 2016 13:31
  • ich glaub ich habs doch hinbekommen. Der Wert in Wartung wird gar nicht angezeigt:

    Mittwoch, 6. Januar 2016 13:41
  • Da gibt es eine Menge Möglichkeiten, auf die ich hier nicht alle detailiert eingehen kann.

    Die einfachste, bei der Unterbrechung (also wenn der Fehler auftritt) mit dem Cursor über die Variable fahren.

    Die zweite Möglichkeit ist das einsetzen einer Debug-Zeile:

    if (File.Exists(path))
    {
        var readLines = File.ReadAllLines(path);
        string Wartung = readLines[20];
        Debug.Print(Wartung);                            
        if (Wartung != null)  // Bis hierhin läuft alles
        {
            var aktuellWartung = DateTime.ParseExact(Wartung, "yyyy.MM.dd", null);
            if (aktuellDatum < aktuellWartung)
            {
                NewButton.BackColor = Color.Aqua;
            }
        }
    }      

    Du kannst auch den Inhalt der Stringvariable einfach mal per MessageBox ausgeben, oder in ein Textfeld auf Deinem Formular.

    ...

     Das sollte jetzt erst mal reichen.


    Mittwoch, 6. Januar 2016 13:42
  • Ein Leerstring ist ungleich null, deswegen läuft es in die If Anweisung. Verwende besser die String.IsNullOrEmpty Method (String) zum überprüfen.

      if (!string.IsNullOrEmpty(Wartung))  


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    • Bearbeitet Olaf HelperMVP Mittwoch, 6. Januar 2016 14:01
    • Als Antwort markiert noob81 Mittwoch, 6. Januar 2016 14:10
    Mittwoch, 6. Januar 2016 14:01
  • Wert wird doch richtig angezeigt:

    Mittwoch, 6. Januar 2016 14:04
  • ES LEEEBT. Vielen vielen Dank euch allen. Ihr habt mir sehr weitergeholfen
    Mittwoch, 6. Januar 2016 14:08
  • sehr gut.

    Jetzt benötigst Du noch einen Stringvergleich, um den Leerstring abzufangen.

    Auch da gibt es wieder mehrere Möglichkeiten hier mal eine

    if(Wartung.Length > 0 )
    

    Mittwoch, 6. Januar 2016 14:11
  • So funktioniert es:

    Mittwoch, 6. Januar 2016 14:19