Anzeige

 C# Array aus Liste auslesen und in Variable übergeben um weiter zu arbeiten.


#1
Aus einer Datei(tchipo.txt) lese ich Zeilenweise die Daten ein welche durch ein ',' getrennt sind.
In einer While Schleife lese ich das alles ein bis die letzte Zeile erreicht ist.

Meine txt sieht nach folgendem Beispiel aus:
Name1, Vorname1, Telefon1
Name2, Vorname2, Telefon2
Name3, Vorname2, Telefon2


In der Variable ergebnis soll allerdings nur die Zeile mit dem Index0 (also die Namen) stehen.
Anschliesend möchte ich es mit einer foreach schleife auslesen, bekomme allerdings die Meldung:
"Der Typ "string" kann nicht implizit in "string[]" konvertiert werden. "

C#:
 string[] ergebnis = new string[10];
            string dateiname = "tchipo.txt";
            StreamReader streamreader = new StreamReader(dateiname);
            while (!streamreader.EndOfStream)
            {
                string foo = streamreader.ReadLine();
                foo = foo.Replace("\"", "");
                string[] bar = foo.Split(',');
                ergebnis = bar[0];


            }
            foreach (string item in ergebnis)
            {
                MessageBox.Show(item);
            }
            streamreader.Close();
 

vfl_freak

Premium-User
#2
Moin,
"Der Typ "string" kann nicht implizit in "string[]" konvertiert werden. "
eigentlich sagt die Meldung doch alles aus !
'bar[0]' ist ein String
'ergebnis' ein String-Array
Du kannst keinen String in ein Array konvertieren!!

Meinst vielleichst sowie in der Art:
C++:
ergebnis[i] = bar[0];
Damit würdest Du die i-te Stelle im Array mit dem String 'bar[0]' belegen!

Ich verstehe aber auch noch so wirklich, was Du genau tun willst ...
Willst Du die Datei zeilenweise splitten und dann die einzelnen Strings in Array packen?
Dafür würde es dann zumindest einer Schleife bedürfen !!

VG Klaus
 
#3
Ich möchte die Zeilen nach dem Komma splitten so dass ich das ich folgendes herausbekomme:
bar[0] alle Namen
bar[1] alle Vorname
bar[2] alle Telefonnummrn

Nun wollte ich alle Vorname in eine Array mit dem Namen ergebnis geben damit ich es außerhalb der Schleife nutzen kann.

Habe es folgermaßen abgewandelt:

C#:
private void btnVerknuepfen_Click(object sender, EventArgs e)
        {
            string[] ergebnis = new string[10000000];
            int i = 0;
            string dateiname = "tchipo.txt";
            StreamReader streamreader = new StreamReader(dateiname);
            while (!streamreader.EndOfStream)
            {
                string foo = streamreader.ReadLine();
                string[] bar = foo.Split(',');
                ergebnis[i] = bar[0];
                i++;
                listBox1.Items.Add(ergebnis);  // 1.
            }
            listBox1.Items.AddRange (ergebnis);  //2.


            streamreader.Close();



        }
1. Da wird in Listbox nur String[]-Array mehrfach ausgegeben. Liegt es daran dass ergebnis ist eine Variable ist mit dem Wert: "String[]-Array"?
2. Dann müsste dies hier doch die richtige Lösung sein, aber bricht mit Fehlermeldung: "System.ArgumentNullException: "Der Wert darf nicht NULL sein.""
 
Zuletzt bearbeitet:

Spyke

Capoeirista
Premium-User
#4
zu 1:
listBox1.Items.Add(ergebnis[i - 1]);
(i-1 da du vorher i++ machst)
oder alternativ
listBox1.Items.Add(bar[0]);


zu 2.
du hast zwar dein Array mit einer Länge von 10000000 instanziiert/vorgegeben.
Die nicht angefassten Indexe (sprich welche nicht über zeile 11 befüllt werden) haben den Wert NULL, deshalb kracht es.
 
#5
C++:
ergebnis[i] = bar[0];
Damit würdest Du die i-te Stelle im Array mit dem String 'bar[0]' belegen!
Danke das hat mir geholfen und es funktioniert.

zu 1:
listBox1.Items.Add(bar[0]);
Habe es jetzt so gemacht.

Hier nochmal mein Code wie er das macht wo er soll:
C#:
private void btnVerknuepfen_Click(object sender, EventArgs e)
        {
            //listBox1.Items.Clear();
            string[] ergebnis = new string[8];
            int i = 0;
            string dateiname = "tchipo.txt";
            StreamReader streamreader = new StreamReader(dateiname);
            while (!streamreader.EndOfStream)
            {
                string foo = streamreader.ReadLine();
                string[] bar = foo.Split(',');
                listBox1.Items.Add(bar[0]);
                ergebnis[i] = bar[0];
                i++;
            }
            Array.Sort(ergebnis);
            listBox1.Items.AddRange(ergebnis);
            streamreader.Close();
            }
 
Anzeige
Anzeige