Laden...

ArrayList auslesen

Erstellt von Vril vor 15 Jahren Letzter Beitrag vor 15 Jahren 10.501 Views
V
Vril Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren
ArrayList auslesen

Hallo,
ich habe folgendes Problem: Und zwar habe ich eine Textdatei mit 5 Zeilen, diese Zeilen möchte ich in 5 separaten Labels anzeigen, also lese ich erstmal die Textdatei zeilenweise aus und schreibe sie in eine ArrayList. Das klappt "anscheinend" schon mal gut, da mir Count von meiner ArrayList den Wert 4 zurückliefert.
Nur wie bekomme ich den Text/Werte von der ArrayList jetzt in die einzelnen Labels? Ich hab folgendes versucht, das klappt aber nicht:


for (int i =0; i <= arrText.Count; i++)
{
 if(i==0){label1.text = arrText.IndexOf(0);}
...
}

Was mache ich falsch? Es wird im Label nur immer "-1" angezeigt...

F
240 Beiträge seit 2006
vor 15 Jahren
label1.text = arrText[i];

würde ich sagen...

2.187 Beiträge seit 2005
vor 15 Jahren

Hallo Vril,

  1. Wenn 5 Zeilen in deiner Datei sind, sollte die ArrayList auch Count=5 haben.
  2. ArrayList ist ab .Net2.0 nicht mehr zu verwenden, benutz besser System.Collection.Generics.List<string> (oder bei .Net <2.0 System.Collection.Spezialized.StringCollection).
  3. Es wäre einfacher für dich, die Labels zu füllen, wenn diese in einem Array (oder Ähnlichem wären):

Label[] labels = new Label[]{this.label1,this.label2,this.label3,this.label4,this.label5};
for(int i = 0 ; i < labels.Length ; i++)
{
  if(zeilenListe.Count>i)
  {
    labels[i].Text = zeilenListe[i];
  }
}

Gruß
Juy Juka

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Vril,

Das klappt "anscheinend" schon mal gut, da mir Count von meiner ArrayList den Wert 4 zurückliefert.

Nein, nicht gut. Wenn du fünf Zeilen hast, dann müsste Count auch fünf liefern.

Beachte bitte außerdem: ArrayList gehört in die Mottenkiste und sollte wie alle untypsierten Collections aus System.Collections nicht mehr benutzt weden. Verwende stattdessen List<T> und alle anderen typsierten Collections aus System.Collections.Generic.

Beachte bitte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

V
Vril Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Ok, vielen Dank schon mal für die Tipps!
Das mit der Mottenkiste hab ich wohl irgendwie etwas verdrängt! Sorry!

Bzgl. Count, ich dachte das passt so, weil ich davon ausgegangen bin die Zählung beginnt bei 0, also 0-1-2-3-4. Mittlerweile hab ich aber festgestellt das ich noch einen ganz anderen Bock in meinem Code habe, nur finde ich ihn nicht!

Das Problem ist aus der Textdatei wird nicht jede Zeile gelesen, sondern nur die 3. und die 5. bzw. die 1. Zeile wird eigentlich immer ignoriert. Hab schon überprüft, nach jeden Wert habe ich aber einen Zeilenumbruch. Zum einlesen gehe ich so vor:


string strFile = @"txt\EnergieWerte.txt";
if (File.Exists(@strFile))
            {
                StreamReader sr = new StreamReader(@strFile, Encoding.Default);
                while ((s = sr.ReadLine()) != null){
                   //mach was
                 }
}

Hab die Textdatei ins Projekt eingefügt, "Immer kopieren" und "Inhalt" gesetzt. Aber die 1. Zeile wird nie eingelesen.

Macht es eigentlich Sinn wenn ich mir die while-Schleife spare und sowas mache:


label1.text = sr.ReadLine();
label2.text = sr.ReadLine();
...

Ok, keine elegante Lösung, aber ich weis ja das in der Textdatei dann nur 5 Zeilen stehen, so könnte ich mir halt die Liste komplett sparen und bräuchte auch keine Schleifen zum füllen bzw. leeren?

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo Vril,

Macht es eigentlich Sinn wenn ich mir die while-Schleife spare und sowas mache:

Nö, das würde ich dir nicht empfehlen, denn was passiert wenn du mal um einen Eintrag mehr brauchst. => Du musst das ganze Programm anpassen und da schleichen sich dann oft irgendwelche Fehler ein.

Hier gibt es ein schöner Tutorial: [Tutorial] Alles über Dateien 2.2

Guck dir das mal an, dann findest du den Fehler sicher.

Weiters interessiert es mich, was du mit den 5 Labels machst.
Was möchtest du da anzeigen? Ist da evtl. ein anderes Control wie die ListBox, DataGridView oder ähnliches besser dafür geeignet.

Gruss
Michael

V
Vril Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Also in den 5 Labels weden einfach Werte angezeigt, als Beispiel z.B. Name, Vorname usw. Der Anwender hat dann aber die Mögllichkeit diese Werte über einen separaten Dialog zu ändern. In diesem wird dann angezeigt "Aktueller Wert" und daneben ein entsprechendes TextField mit der Überschrift "Neuer Wert"!

J
3.331 Beiträge seit 2006
vor 15 Jahren

Hallo,

könnte es sein, dass Du ReadLine doppelt aufrufst, etwa so:

                StreamReader sr = new StreamReader(@strFile, Encoding.Default);
                while ((s = sr.ReadLine()) != null){
                     label1.Text = sr.ReadLine();
                 }

Das würde einen solchen Fehler erklären. Richtig wäre es so:

                while ((s = sr.ReadLine()) != null){
                     label1.Text = s;
                 }

Außerdem empfehle ich sowieso, eine solche Datei kürzer einzulesen mit:

string[] content = File.ReadAllLines(strFile, Encoding.Default);

Damit sind alle Zeilen sofort vorhanden.

Was soll übrigens das @ vor "strFile"?

Jürgen

V
Vril Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Stimmt!!!! ReadLine() war somit doppelt! Danke!!
Das @ bezweckt das er mir den Pfad nimmt, also '&#39; akzeptiert. Lasse ich das @ weg, dann findet er "txt\meinText.txt" nicht!

J
3.331 Beiträge seit 2006
vor 15 Jahren

Das @ bezweckt das er mir den Pfad nimmt, also '&#39; akzeptiert. Lasse ich das @ weg, dann findet er "txt\meinText.txt" nicht!

Hierfür gilt das natürlich, nämlich vor der String-Konstanten:

string strFile = @"txt\EnergieWerte.txt";

Aber hier, nämlich vor dem Namen der Variablen, halte ich es für Quatsch:

if (File.Exists(@strFile))

Gruß Jürgen

630 Beiträge seit 2007
vor 15 Jahren

Hallo Vril,

du könntest auch File.ReadAllLines() verwenden.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

J
3.331 Beiträge seit 2006
vor 15 Jahren

Danke, tscherno, für die Bestätigung meines Vorschlags:

Außerdem empfehle ich sowieso, eine solche Datei kürzer einzulesen mit:

string[] content = File.ReadAllLines(strFile, Encoding.Default);  

Damit sind alle Zeilen sofort vorhanden.

Jürgen

630 Beiträge seit 2007
vor 15 Jahren

Hallo jetho,

Danke, tscherno, für die Bestätigung meines Vorschlags

Das muss ich wohl gestern zu später Stunde überlesen haben...

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm