C# Textdatei auslesen und ausgelesenen String splitten

DichterNebel

Cadet 4th Year
Registriert
Apr. 2009
Beiträge
66
Guten Abend,

folgendes:
Ich will eine .txt datei auslesen und die gelesenen Zeilen beim enthaltenen ":" trennen und in eine hashtable schreiben.
Beim ausführen bekomme ich aber den Fehler :
"System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt "
Und zwar bei der Zeile "string[] Words = sLine.Split(':');"
Das ganze passiert ganz unellegant in der main methode.

für sachdienliche hinweise wäre ich wirklich dankbar :)


Code:
 static void Main(string[] args)
        {
            StreamReader objReader = new StreamReader("C:/datei.txt");
            Hashtable myusers = new Hashtable();
            string sLine = "";
 
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                string[] Words = sLine.Split(':');

                if (sLine != null)
                    myusers.Add(Words[0], Words[1]);
                            }
            objReader.Close();

        }
    }
}
 
Hallo,

ganz einfach, du musst vor der Schleife einmal

sLine = objReader.ReadLine();

schreiben weil er irgendwann die letzte Zeile liest ( == null) und diese versucht zu splitten.

Am Ende der Schleife dann den

sLine = objReader.ReadLine();

für die Schleife selbst.

Gruß,
d2boxSteve
 
sLine ist am Ende der Textdatei null, wenn es keine Zeilen mehr zu lesen gibt. Wenn du null splitten willst, kommt die Exception.

Lösungsvorschlag:
Code:
static void Main(string[] args)
{
    StreamReader objReader = new StreamReader("C:/datei.txt");
    Hashtable myusers = new Hashtable();
    string sLine = "";

    while ((sLine = objReader.ReadLine()) != null)
    {
        string[] Words = sLine.Split(':');
 
        if (Words.Length == 2)
        {
            myusers.Add(Words[0], Words[1]);
        }
    }

    objReader.Close();
}
 
DichterNebel schrieb:
Guten Abend,

folgendes:
Ich will eine .txt datei auslesen und die gelesenen Zeilen beim enthaltenen ":" trennen und in eine hashtable schreiben.
Beim ausführen bekomme ich aber den Fehler :
"System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt "
Und zwar bei der Zeile "string[] Words = sLine.Split(':');"
Das ganze passiert ganz unellegant in der main methode.

für sachdienliche hinweise wäre ich wirklich dankbar :)


Code:
 static void Main(string[] args)
        {
            StreamReader objReader = new StreamReader("C:/datei.txt");
            Hashtable myusers = new Hashtable();
            string sLine = "";
 
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                string[] Words = sLine.Split(':');

                if (sLine != null)
                    myusers.Add(Words[0], Words[1]);
                            }
            objReader.Close();

        }
    }
}

Die Zeile:
sLine = objReader.ReadLine();

Wird wohl null zurückliefern.
Hab es grad nicht im Kopf, aber null liefert ReadLine, wenn das Ende der Datei erreicht ist. Das gilt auch wenn die datei.txt leer ist.

Mahc einfach mal noch ein Check auf sLine != null vor dem Split.

gruß slash
 
Zurück
Oben