C# Bestimmte zeile aus Textdatei auslesen


#1
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 :/
Code:
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

Capoeirista
Premium-User
#2
Was funktioniert nicht?
kracht es?
Die for schleife mit den 150 durchlaufen finde ich erstmal komisch
Nutze besser
Code:
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 ????
 
#4
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 :/

C#:
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

Capoeirista
Premium-User
#5
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
Code:
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.

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