C# Werte vergleichen aus txt.Datei?

3 Antworten

Ich finde diese Datenstruktur der Textdatei ausgesprochen ungünstig gewählt. Was ist beispielsweise, wenn ein Fremdwort mehrere Bedeutungen hat? Wie willst Du die trennen? Aber gut...

Du kannst jeden Eintrag in der Textdatei ja als Paar von Werten sehen. Der erste Wert ist in Deinem Fall immer das Fremdwort, der zweite immer "das" deutsche Wort.

Somit kannst Du die Tuple<string, string> Klasse verwenden, denn die ist genau für sowas da. Somit wäre eine Vokabel:

Tuple<string, string> vokabel = new Tuple<string, string>(values[0], values[1]);

Wenn Du eine Liste davon hast, also List<Tuple<string,string>> list beispielsweise, dann wäre der Zugriff auf das deutsche Wort eben:

textBox1.Text = list<i>.Item1
Lehrbücher bringen allerdings nicht mehr

In Deinem Fall schon, denn offensichtlich mangelt es an spezifischem Wissen zu objektorientierter Programmierung und dem Entwurf von Datenstrukturen.

Die am leichtesten erweiterbare Lösung wäre, eine der eingebauten Klassen zu nehmen und damit den Text zu "parsen". Das ist aber was Fortgeschritteneres.

Du könntest die Daten einmal nach ';' und dann nach ',' zerlegen.

(Besser wäre aber, üblichere Teiler zu nehmen - einen Zeilenumbruch für Datensätze (hier: Wortpaare) und ein Tabulatorzeichen für die Felder eines Datensatzes.)

Die am leichtesten umsetzbare Lösung - für genau diese Struktur der Daten - wäre wohl:

      String[] lines = File.ReadAllLines(filename);
      String[] wordpairstrings = lines.Select(s => s.Split(';')[0].Trim()).ToArray();
      String[][] words = wordpairstrings.Select<String, String[]>(s => s.Split(',').Select(s2 => s2.Trim()).ToArray()).ToArray();


Geht natürlich auch mit Schleifen:

      String[] lines = File.ReadAllLines(filename);
      String[] wordpairstrings = new String[lines.Length];
      for (int i = 0; i < lines.Length; i++) {
        wordpairstrings[i] = lines[i].Split(';')[0];
        wordpairstrings[i] = wordpairstrings[i].Trim();
      }
      String[][] words = new String[lines.Length][];
      for (int i = 0; i < lines.Length; i++) {
        words[i] = wordpairstrings[i].Split(',');
        for (int j = 0; j < words[i].Length; j++){
          words[i][j] = words[i][j].Trim();
      }


Hi,

du solltest dich mit Klassen auseinandersetzen.

die Klasse Vokabel enthält dann einen deutschen und einen englischen Parameter.

 class Vokabel

   {

       private string _deutscherText;

       public string Deutsch

       {

           get { return _deutscherText; }

       }

       private string _englischerText;

       public string Englisch

       {

           get { return _englischerText; }

       }

       public Vokabel(string deutsch,string englisch)

       {

           _deutscherText = deutsch;

           _englischerText = englisch;

       }

   }

so zum Beispiel.

Das kannst du dann wiederrum als Array oder List initialisieren und abrufen.

Lehrbücher bringen allerdings nicht mehr -> kann ich nicht so ganz nachvollziehen, da Klassen essentiell sind.

VG