[C#] Dateiarbeit, Lesen und Wert suchen

Crazy_down

Erfahrenes Mitglied
Hallo zusammen,

ich habe in der Suche nichts passendes gefunden. Falls es doch schon etwas gibt, bitte Link & close ;)

Ich habe ein Formular mit einem Eingabefeld, einem Button und einem Textfeld.
Wenn ich im Eingabefeld etwas eingebe und auf den Button klicke, möchte ich meine .txt datei öffnen die Werte in folgendem Format enthält.
Code:
Wert1,Wert1a
Wert2,Wert2a
...
Ich öffne meine Datei mit folgender Klasse.
Code:
 public string ReadFile(String sFilename)
        {
            string sContent = "";

            if (File.Exists(sFilename))
            {
                StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
                sContent = myFile.ReadToEnd();
                myFile.Close();
            }
            return sContent;
anschließend rufe ich die Klasse in der Button-Funktion auf. Und versuche bis zum "," zu Lesen.
Code:
TextDatei c_textdatei = new TextDatei();
            //Einlesen einer Datei
            string fs = c_textdatei.ReadFile(@"Datei.txt");
string[] meineStrings = fs.Split(new Char[] { ',' });
Ich möchte die Datei soweit einlesen, bis Wert1 gleich dem eingegebenen Wert ist und danach den hinter dem komma z.b. Wert1a ausgeben.

Nur komme ich mit der Datearbeit nicht klar.
Wir kann ich zeilenweise solange lesen und den Wert1,Wert2.... prüfen bis er passt und dann den Wert dahinter ausgeben ?

Danke schonmal
 
Zuletzt bearbeitet:
Habe es nicht gaanz genau angeschaut, aber was da noch zu Fehlen scheint ist folgendes:

C#:
bool compare = false;
string[] meineStrings = fs.Split(',');
foreach (string wert in meineStrings )
{
      if(compare)
      {
             //wert ausgeben
      } 
       if(wert == eingabeWert)
      {
             compare = true;
      } 
       
}

false etwas unklar ist nur Fragen ;)

Gruss DexXxtrin
 
false etwas unklar ist nur Fragen ;)

War das "false" mit absicht ? Hehe ;)

Jetzt klappt es aber nur wenn der eingegebene Wert dem aus der ersten Zeile entspricht.
Und wie gebe ich nur den Wert hinter dem Komma aus ?


Edit: mit meineStrings[1] komm ich zwar an der wert hinter dem Komma, allerdings auch bis zum nächsten ","
Er müsste dann von ,.... bis Zeilenende nur ausgeben.

Danke und Grüße
crazy_down
 
Zuletzt bearbeitet:
Ah jetzt habe ich den Durchblick ;)

Logisch geht es nicht:

Du splittest die Eingabe in der Form:
Wert1, Wert1a
Wert2, Wert2a
...
Das ganze schreibst du in einen String und trennst bei einem Komma.
Deine Strings sehen nun so aus:
string[0] = Wert1
string[1] = Wert1a\nWert2
string[2] = wert2a\nWert3

du musst die Zeichen welche den Zeilenumbruch darstellen dur Kommas ersetzen (bin mir nicht sicher wie der Zeilenumbruch aussieht).
Am besten du schaust dir beim Debuggen den Inhalt sContent und meineStrings an. Dann kommst du schnell mal drauf ;)

PS: Klar war das false absicht.... ;-)
 
Also bei der Ausgabe kommt irgendein undefinierbares Zeichen.
Kann ich denn die split-Funktion bei einem Komma und einem Zeilenumbruch ausführen und nur dann wenn der wert 1 irgendwo Passt ?
dann hätte ich immer nur wert1 und Wert1a in string[0] & string[1].

Ich habe immer noch das Problem das er die suche in der Datei nur auf die 1. Zeile beschränkt.
 
Du könntest anstatt das ganze Textfile zu lesen, immer nur Linie für Linie und vergleichen. Dann sollte es funktionieren.
Ansonsten alle "\r\n" aus dem String entfernen.

Versuch mal:
C#:
char[] separators = new char[] { '\\', 'r', 'n', ',' };
string[] words = value.Split(separators);
 
Zuletzt bearbeitet:
Mit
Code:
char[] separators = new char[] { '\\','\n', ',' };
            string[] meineStrings = fs.Split(separators);

hört er schonmal am Ende von Wert1a auf. Allerdings behält er in meine Strings[1] noch den Wert1a statt Wert2a wenn ich ich nach Wert2 suche.

Mit
Code:
   while (sContent != null)
                {
                   sContent = myFile.ReadLine(); 
                }
myFile.Close();

kommt ein Fehler und das Programm stüzt ab.

Wie macht man den CsharpCode hier im Forum ?
 
Zuletzt bearbeitet:
Klasse für Dateihandling. Darin habe ich mit ReadLine und ReadToEnd rumgespielt.
C#:
 class TextDatei
    {
        /// Liefert den Inhalt der Datei zurück.
        public string ReadFile(String sFilename)
        {
            string sContent = "";
            if (File.Exists(sFilename))
            {
                StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
                /*while (sContent != null)
                {
                   sContent = myFile.ReadLine(); 
                }*/
                sContent = myFile.ReadToEnd();
                myFile.Close();
            }
            return sContent;
        }

Funktion wenn der Button gedrückt wird.
C#:
            string kuerzel_eingabe = INP_kuerzel.Text;
            string anzeige_ergebnis = Ergebnis.Text;
            bool compare = false;
           TextDatei c_textdatei = new TextDatei();
           TextDatei s_Content = new TextDatei();
            //Einlesen einer Datei
            string fs = c_textdatei.ReadFile(@"Datei.txt");
            
            //MessageBox.Show(kuerzel_eingabe);
            //MessageBox.Show(fs);
            
            // Ergebnis.Text = kuerzel_eingabe;
                
            //string meinString = "Schweiz,Italien,Polen";
            //string[] meineStrings = meinString.Split(new Char[] { ',' });
            //string[] meineStrings = fs.Split(new Char[] { ',' });
            char[] separators = new char[] { '\\','\n', ',' };
            string[] meineStrings = fs.Split(separators);
            //MessageBox.Show(meineStrings[2]);
            foreach (string wert in meineStrings)
            {
                if (compare)
                {
                    
                    //MessageBox.Show(meineStrings[1]);
                    Ergebnis.Text = meineStrings[1];
                }
                if (wert == kuerzel_eingabe)
                {
                    compare = true;
                }

            }

Ich habe ein paar Kommentare drinne mit denen ich Angefangen habe und sie als Hilfestellung nicht rausnehmen wollte ;)

Grüße

P.S. Das mit dem "false" find ich cool ^^
 
Versuchs mal mit

C#:
Ergebnis.Text = wert  //Anstelle von Ergebnis.Text = meineStrings[1];

Du gibts momentan egal welcher Wert übereinstimmt einfach meineStrings[1] aus. Das entspricht dem Wert1a. Der Wert2a wäre zum Beispiel in meineStrings[3]. ;)
 

Neue Beiträge

Zurück