none
C# - Frage zu einem Array Problem RRS feed

  • Frage

  • Sehr geehrte Damen und Herren,

    ich habe eine Frage zu einem Array Problem:

    private void button1_Click(object sender, EventArgs e)
    {
      try
      {
        using (StreamReader sr = new StreamReader(path))
        {
          String Datei = sr.ReadToEnd();              
          string[] lines = Datei.Split('\n');         
    
          foreach (string line in lines)              
          {
            if ((line.IndexOf("SA6") != -1))
            {
              string[] test = line.Split(';');
              foreach(string line1 in test)
              {
                MessageBox.Show(line);
              }
            }
          }
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message);
      }
    }

    Die Datei sieht ungefähr so aus:

    SA1;Test_1;Test_2;Test_3;SA1_END
    SA2;Asdf_1;Asdf_2;Asdf_3;SA2_END
    SA3;Te_1;Te_2;Te_3;SA3_END

    Mein Code funktioniert auch, jedoch stelle ich mir die Frage, warum er mir bei MessageBox.Show(line); die einzelnen Felder anzeigt, jedoch wenn ich ein bestimmtes Feld ansprechen will mit MessageBox.Show(Convert.ToString(line1[0])); Mir nur den ersten Char anzeigt und nicht den String.

    Kann mir das jemand erklären, stehe voll auf dem Schlauch und im Internet habe ich nichts gefunden was mir weitergeholfen hat.

    Würde gerne nur bestimmte einzelnde Felder ansprechen.

    Über jede Hilfe und Denkanstöße bin ich sehr dankbar.

    Gruß

    Dash_


    Sonntag, 4. Februar 2018 16:09

Antworten

Alle Antworten

  • Hi,
    Dein Programm liest zuerst alle Zeichen ein erzeugt dann ein Array mit den Zeilen. Da könnte man auch gleich Read<line nutzen.

    Eine Zeile "line" wird dann aufgeteilt mit dem Tenner ";" und "line1" ist dann das Array der einzelnen Schnipsel der Zeile. Jedes Schnipsel (Teil der Zeile) ist intern ein Array von Zeichen. Deshalb gibt "line1[0]" das erste Zeichen eines Schnipsels aus. Vermutlich suchst Du "MessageBox.Show(line1);", also die gesamte Ausgabe eines Schnipsels.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Sonntag, 4. Februar 2018 18:28
  • Hallo,

    danke erstmal für deine Antwort.

    Das mit dem Read<line werde ich mir anschauen.

    Das mit MessageBox.Show(line1) weiß ich, jedoch wollte ich wissen wie ich jetzt zum Beispiel immer bloß das Dritte ansprechen kann.

    Das wäre dann in meinem Fall immer nur: Test_3;Asdf_3;Te_3 etc....

    Deswegen dachte ich auch das es mit MessageBox.Show(line[2]) funktioniert.

    Montag, 5. Februar 2018 06:26
  • Hi,

    dein "line1" ist kein Array, somit kannst du auch nicht auf Felder zugreifen. In deinem Code ist "test" das Array, in dem du die einzelnen Felder zugreifen kannst.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Montag, 5. Februar 2018 08:55
  • Hallo,

    vielen Dank für die schnellen Tipps, hab ich echt total übersehen...

    Manchmal sieht man den Wald vor lauter Bäumen nicht!

    Gruß

    dash_

    Montag, 5. Februar 2018 11:01