Autor Beitrag
Theki
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Sa 01.11.08 13:21 
Hallo...

seit einigen Tagen sitz ich vor dem Problem, dass ich gerne eine userlist aus einer textdatei ausgelesen haben möchte..
Die Textdatei sieht ungefähr so aus:

ausblenden Quelltext
1:
2:
3:
user1,wert1,wert2,wert3,wert4,wert5,wert6,wert7
user2,wert8,wert9,wert10,wert11,wert12,wert13,wert14
usw


Wie kann ich es nun anstellen, dass mir jede Zeile in einem extra Array gespeichert wird.
und dass ich diese nachher auch gezeilt wieder einspeichern kann.

Hat jmd von euch eine Lösung?

mfg

Theki


Moderiert von user profile iconKha: Topic aus Multimedia / Grafik verschoben am Sa 01.11.2008 um 12:37tei


Zuletzt bearbeitet von Theki am Sa 01.11.08 14:17, insgesamt 2-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 01.11.08 13:39 
Hallo,

Deine Frage umfasst zwei Probleme: zum einen das Einlesen der Zeilen, zum anderen das Aufteilen einer jeden Zeile. Das Ganze lässt sich umfangreich lösen über CsvReader; dazu gibt es viele Tipps über Foren oder Google oder CodeProject oder ConnectionStrings.

Du kannst es aber auch schnell lösen mit Standard-Methoden: File.ReadAllLines liest eine Textdatei in ein String-Array. String.Split teilt eine Textzeile in ein Array auf. Ein Verfahren sieht also etwa so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string filename = @"C:\GemeinsameDaten\MyText.txt";
string[] rows = File.ReadAllLines(filename);
Dictionary<intstring[]> contents = new Dictionary<intstring[]>(rows.Count);
for(int x1 = 0; x1 < rows.Count; x1++) {
   string[] content = rows[x1].Split(new char[] {','});
   contents.Add(x1, content);
}

Achtung, dieser Code enthält einen Fehler - siehe die folgenden drei Beiträge.

Ich habe ein Dictionary verwendet, weil dies mit variabler Größe arbeitet; genauso wäre auch List<string[]> geeignet. Wegen der festen Größe sind Arrays in der Regel nur zum Einlesen und als konstante Größe nützlich. Aber wenn Du Deine Werte auch ändern und nachher wieder speichern willst, sind List<T> und Dictionary<T, U> vorzuziehen.

Gruß Jürgen


Zuletzt bearbeitet von JüTho am Sa 01.11.08 15:01, insgesamt 1-mal bearbeitet
Theki Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Sa 01.11.08 13:50 
Okay, das versteh ich schonmal, nur ich weiß nicht was du mit "Count" meinst bzw. was du damit bewirkst...?
Den beim debuggen kommt das:

ausblenden Quelltext
1:
Fehler  1  "System.Array" enthält keine Definition für "Count".					

Danke schon mal im vorraus..

mfg

Theki
Waldteufel
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 01.11.08 14:15 
Hallo.

user profile iconTheki hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Quelltext
1:
Fehler  1  "System.Array" enthält keine Definition für "Count".					

Das macht Sinn, denn bei Arrays heißt es Length und nicht Count.

Also:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string filename = @"C:\GemeinsameDaten\MyText.txt";
string[] rows = File.ReadAllLines(filename);
Dictionary<intstring[]> contents = new Dictionary<intstring[]>(rows.Length);
for(int x1 = 0; x1 < rows.Length; x1++) {
   string[] content = rows[x1].Split(new char[] {','});
   contents.Add(x1, content);
}


Gruß
Waldteufel
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 01.11.08 14:59 
user profile iconTheki hat folgendes geschrieben Zum zitierten Posting springen:
Okay, das versteh ich schonmal, nur ich weiß nicht was du mit "Count" meinst bzw. was du damit bewirkst...?
ausblenden Quelltext
1:
Fehler  1  "System.Array" enthält keine Definition für "Count".					

Für diesen Fehler entschuldige ich mich vielmals.

Er kann als Hinweis auf mehrere Punkte dienen:
  • Vertraue nie einer Antwort, sie könnte Fehler enthalten. (In der Regel schreibe ich solche kurzen Code-Schnipsel einfach hin, ohne sie im Debugger zu prüfen; dann kann solch ein Fehler durchrutschen, zumal das NET Framework bei den Bezeichnern auch nicht konsistent ist.)
  • Das wichtigste Hilfsmittel ist und bleibt die SDK-Doku/MSDN; da kann und sollte jeder selbst prüfen, welche Möglichkeiten es gibt - konkret: was für Eigenschaften eine bestimmte Klasse (hier: ein Array) hat. Wenn der Compiler also sagt, dass System.Array keine Definition für Count enthält, musst Du nachschauen, welche Eigenschaft oder Methode passt. In der IDE gibt es auch passende Hilfen, wenn hinter einem Bezeichner ein Punkt gesetzt wird und Du kurz wartest.
  • "Count" heißt "Anzahl". Was meine ich wohl mit der Anzahl bei einem Array? Ich erreiche, dass die for-Schleife im richtigen Bereich von...bis arbeitet (das ist Grundwissen bei einer jeden Programmiersprache); und ich sorge dafür, dass das Dictionary sinnvollerweise auf eine Anfangsgröße gesetzt wird (das kann in der SDK-Doku/MSDN nachgelesen werden).

Aus diesen Hinweisen solltest Du ableiten, wo und wie Du Dir selbst helfen kannst.

Viel Erfolg! Jürgen