# C# Bestimmte zeile aus Textdatei auslesen



## CyRiXx-- (21. August 2017)

Hallo Freunde, ich bin C# anfänger und benötige gerade Hilfe. Ich programmiere ein Programm worin ich eine Nummer in ein Label eingeben kann und dann wird mir was ausgegeben.
In einer per Hand erstellten Text datei soll dann diese nummer gefunden werden und alles was in der Zeile steht soll ausgegeben und gesplittet werden. Nun frage ich euch was ich falsch mache :/

```
private void buttonadd_Click(object sender, EventArgs e)
        {
            //später nach config extra datei
          

           
            StreamReader sr = new StreamReader("C:\\Asia2000\\Nummerierungen.txt");
            string text;

           

            for (int i = 0; i < 150; i++)
            {
               
                text = sr.ReadLine();
                if (label1.Text != null)
                {
                        text = sr.ReadLine();
                        if (text != null)
                        {
                            String z = text;

                            Char delimiter = ':';
                            String[] substrings = z.Split(delimiter);

                            if (text.Equals(label1.Text))
                            {
                               
                               
                                label4.Text = label4.Text + " \n" + substrings[1] + "                       "+ substrings[2] + "€";
                                // + button funkt nicht
                            }
                       
                    }
                }
                else {
                   
                }
              
            }
           
            sr.Close();
            }
```


Vielen Dank!


----------



## Spyke (22. August 2017)

Was funktioniert nicht?
kracht es?
Die for schleife mit den 150 durchlaufen finde ich erstmal komisch
Nutze besser

```
string zeilenInhalt;
while((zeilenInhalt = sr.ReadLine()) != null)
{
  .... hier die ganze Prüfung rein
}
```
ReadLine gibt null zurück wenn das Dateiende erreicht wurde.


Ach seh gerade unten, button funkt nicht, was funkt nicht ????


----------



## CyRiXx-- (22. August 2017)

Hey erstmal danke, Damit meine ich dass er ein Fehler hat  LG


----------



## CyRiXx-- (22. August 2017)

Hey, es hat soweit geklappt aber bei dem Code gibt es eine Fehlermeldung falls diese zahl in der Datei nicht existiert und obwohl die zahl richtig ist und alles ausgeführt wird kommt die fehlermeldung :/


```
private void buttonadd_Click(object sender, EventArgs e)
        {
            //später nach config extra datei
          

           
            StreamReader sr = new StreamReader("C:\\Asia2000\\Nummerierungen.txt");
           
           
           
                string zeilenInhalt;
                while((zeilenInhalt = sr.ReadLine()) != null)
                {
                    String[] zi = zeilenInhalt.Split(':');
                    if (zi[0].Equals(label1.Text))
                    {
                        label5.Text = "";
                        label4.Text = label4.Text+"\n"+zi[1]+"         "+zi[2];
                       
                    }
                    if(!(zi[0]).Equals(label1.Text)) {
                        label5.Text = "Diese Zahl existiert nicht!";
                    }
                }
          
            }
```


----------



## Spyke (24. August 2017)

Was für eine Fehlermeldung?
Bitte nicht einfach Fehler schreiben, wir brauchen genauen Exceptiontyp und die Message draus.
Beim  immer nachfragen machts irgendwann kein Spaß mehr zu helfen.

Ganz blöd würde ich jetzt vermuten da du von einer zahl redest das es um dein Array geht und du ein IndexOutOfRangeException bekommst, einfach weil deine Array Länge kleiner ist als die Indexe (Positionen) die du abfrägst (mit Length kannst du die Länge des Array prüfen)


*Für Fehlerausgabe mach zur Not um deinen Code ein try catch*

```
private void buttonadd_Click(object sender, EventArgs e)
        {
              try
              {
                    ... hier das zeugs rein mit dem reader und so
              }
              catch(Exception ex)
              {
                     MessageBox.Show(this, ex.GetType().Name + Environment.NewLine + ex.Message, "Fehler");
              }
       }
```


*Nachtrag:*
der StreamReader ist IDisposable, spricht er hat eine Dispose Methode sod as er seine verwendeten Ressourcen (in deinem Fall die Datei) wieder ordentlich freigibt.
Verwende dafür am besten using dann wird auch in einem Fehlerfall die Datei wieder sauber freigegeben.


```
using(StreamReader sr = new StreamReader("C:\\Asia2000\\Nummerierungen.txt"))
{
                string zeilenInhalt;
                while((zeilenInhalt = sr.ReadLine()) != null)
                {
                              ... hier verarbeitungszeugs rein
                }
}
```


----------



## Rene M. (21. Januar 2018)

"Funken" tut's nicht, da du die ganze Zeile mit dem Inhalt deines Label-Textes vergleichst



CyRiXx-- hat gesagt.:


> if (text.Equals(label1.Text))


----------

