| Autor |
Beitrag |
spitzname
      
Beiträge: 27
|
Verfasst: Fr 02.07.10 15:21
Hallo, ich habe folgende Frage:
wie kann man aus einer TextBox(txtEingabe) jede einzelne Person in die PersonenGruppe(ArrayList) aufnehmen.
hier sind die Klassen, die ich verwende:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| class Person {
private string nachname; private string vorname; private long ID;
public Person(string name, string v_nahme, long ID) { nachname = name; vorname = v_nahme; this.ID = ID; }
public string Nachname { get { return nachname; } set { this.nachname = value; } }
public string Vorname { get { return vorname; } set { this.vorname = value; } }
public long ID_Nummer { get { return ID; } set { this.ID = value; } } } |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public class PersonenGruppe { public List<Person> Personen{get;private set;}
public PersonGruppe() { this.Personen = new List<Person>(); }
} |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| public partial class FrmPersonVerwaltung : Form {
private PersonenGruppe speicher = new PersonenGruppe();
public FrmPersonVerwaltung() { InitializeComponent(); }
private void btnLoad_Click(object sender, EventArgs e) { DialogResult dlgAntwort; dlgAntwort = dlgLoad.ShowDialog(); Person p = new Person();
if (dlgAntwort == DialogResult.Cancel) return; try { StreamReader src = new StreamReader(dlgLoad.FileName);
txtEingabe.Text = src.ReadToEnd(); src.Close(); } catch (Exception ex) { Console.WriteLine("Fehler 1 " + ex.Message); } p.Nachname = txtEingabe.Lines[0]; p.Vorname = txtEingabe.Lines[1]; p.Id = Convert.ToInt64(txtEingabe.Lines[2]); speicher.Personen.Add(p); } } |
Mit der Funktion "private void btnLoad_Click(object sender, EventArgs e)" in der "class FrmPersonVerwaltung"
kann man eine Textdatei in die Textbox("txtEingabe") aufnehmen und dann aus Textbox("txtEingabe") die Daten Zeilenweise in die ArrayList speichern.
Es werden also in dem Beispiel erstmal die Daten von einer Person (Zeilen 1 -> Nachname, 2 -> Vorname und 3 ->ID) in ArrayList gespeichert.
Die Textbox("txtEingabe") und die Textdatei hat fogenden Aufbau:
Beispiel:
Petersen
Peter
123
Leerzeile
u.s.w
also erste Zeile Vorname, zweite Nachname, dritte ID, vierte Leerzeile.
Frage:Wie kann man nicht nur die ersten drei Zeilen sondern alle Zeilen also mehrere Personen aus der TextBox(txtEingabe) übernehmen?
würde mich über jede Hilfe freuen
gruß
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
Moderiert von Christian S.: Topic aus C# - Die Sprache verschoben am Fr 02.07.2010 um 15:23
Zuletzt bearbeitet von spitzname am Fr 02.07.10 20:00, insgesamt 1-mal bearbeitet
|
|
JüTho
      
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
|
Verfasst: Fr 02.07.10 19:10
Es scheint mir abwegig zu sein, eine ArrayList zu benutzen, wenn auch List<Person> zur Verfügung steht, und dann auch noch die Einzelteile hintereinander zu schreiben. Du solltest über dein Konzept nochmal nachdenken.
Jürgen
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Fr 02.07.10 19:59
JüTho hat folgendes geschrieben : | Es scheint mir abwegig zu sein, eine ArrayList zu benutzen, wenn auch List<Person> zur Verfügung steht, und dann auch noch die Einzelteile hintereinander zu schreiben. Du solltest über dein Konzept nochmal nachdenken.
Jürgen |
Hallo, erstmal danke für die Antwort, ja Stimmt ich habe natürlich die List<Person> und nicht ArrayList gemeint. Wie meinst du das "Einzelteile hintereinander" ? Ist mein Ansatz komplet falsch?
gruß
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 02.07.10 20:22
Hallo!
Statt mit dem StreamReader würde ich mit File.ReadAllLines arbeiten, dann kannst Du das daraus resultierende Array durchlaufen und entsprechend neue Personen anlegen.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Th69
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 02.07.10 20:22
Ich wiederhole hier noch mal das Stichwort (das herbivore in dem anderen C#-Forum schon erwähnt hat): Schleife -)
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Fr 02.07.10 22:17
Ok, also mit File.ReadAllLines und Schleife:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| private void btnLoad_Click(object sender, EventArgs e) { DialogResult dlgAntwort; dlgAntwort = dlgLoad.ShowDialog(); Person p = new Person();
if (dlgAntwort == DialogResult.Cancel) return; try { string[] lines = File.ReadAllLines(dlgLoad.FileName);
for (int i = 0; i < lines.Length; i++) { speicher.Nachname = lines[i]; i = i + 1; speicher.Vorname = lines[i]; i = i + 2; speicher.ID = Convert.ToInt64(lines[i]); }
} catch (Exception ex) { Console.WriteLine("Fehler 1 " + ex.Message); }
txtEingabe.AppendText(Environment.NewLine + speicher.Personen); } |
Es klappt leider aber trotzdem noch nicht  , wo liegt mein Fehler bitte um Tipps.
gruß
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 02.07.10 22:37
Was heißt denn "klappt nicht"?
//edit: Und wieso benutzt Du Speicher, als sei es eine Person, das ist doch eine Personengruppe?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Fr 02.07.10 22:56
Christian S. hat folgendes geschrieben : | Was heißt denn "klappt nicht"?
//edit: Und wieso benutzt Du Speicher, als sei es eine Person, das ist doch eine Personengruppe? |
Ja stimmt, ich glaube ich muss mal Pause machen!
Ok noch ein Versuch:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| private void btnLoad_Click(object sender, EventArgs e) { DialogResult dlgAntwort; dlgAntwort = dlgLoad.ShowDialog(); Person p = new Person();
if (dlgAntwort == DialogResult.Cancel) return; try { string[] lines = File.ReadAllLines(dlgLoad.FileName); for (int i = 0; i < lines.Length; i=i+4) { p.Nachname = lines[i]; i = i + 1; p.Vorname = lines[i]; i = i + 2; p.ID = Convert.ToInt64(lines[i]); }
} catch (Exception ex) { Console.WriteLine("Fehler 1 " + ex.Message); }
txtEingabe.AppendText(Environment.NewLine + speicher.Personen); } |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 02.07.10 22:59
Du hast immer noch nicht beschrieben, was nicht klappt.
Aber so, wie ich das sehe, fügst Du der Personengruppe nie irgendwas hinzu 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 02.07.10 23:27
Außerdem würde ich die Werte von i noch einmal im Kopf durchgehen, auf +4 pro Durchgang kommt das jedenfalls nicht hinaus  .
_________________ >λ=
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Fr 02.07.10 23:29
Christian S. hat folgendes geschrieben : | Du hast immer noch nicht beschrieben, was nicht klappt.
Aber so, wie ich das sehe, fügst Du der Personengruppe nie irgendwas hinzu  |
Das stimmt auch wieder also:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| private void btnLoad_Click(object sender, EventArgs e) { DialogResult dlgAntwort; dlgAntwort = dlgLoad.ShowDialog(); Person p = new Person();
if (dlgAntwort == DialogResult.Cancel) return; try { string[] lines = File.ReadAllLines(dlgLoad.FileName);
for (int i = 0; i < lines.Length; i=i+2) { p.Nachname = lines[i]; i = i + 1; p.Vorname = lines[i]; i = i + 2; p.ID = Convert.ToInt64(lines[i]); }
} catch (Exception ex) { Console.WriteLine("Fehler 1 " + ex.Message); } speicher.Personen.Add(s); txtEingabe.AppendText(speicher.Personen[0]+Environment.NewLine ); txtEingabe.AppendText(speicher.Personen[1]+Environment.NewLine ); } |
Text:
petersen
Peter
1
Hansen
Hans
2
Fehlermeldung:
Eine nicht behandelte Ausnahme des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
Was mache ich falsch?
gruß
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 02.07.10 23:43
Du springst von Vorname zu ID zwei Zeilen weiter.
Du fügst der Personengruppe jetzt einmalig nach der Schleife was[1] hinzu. Sinnvoll?
[1]Irgendein "s", was sonst nirgendwo benutzt wird. Sinnvoll?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Sa 03.07.10 00:01
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 03.07.10 00:16
Okay, ich habe keine Lust mehr.
Jetzt weist Du innerhalb der Schleife den Eigenschaften von s was zu, fügst dann außerhalb der Schleife p in die Personengruppe ein.
Denk einfach mal drüber nach, was Du da machst. Vorher schreib ich hier gar nichts mehr.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Sa 03.07.10 00:20
spitzname hat folgendes geschrieben : | Christian S. hat folgendes geschrieben : | Du springst von Vorname zu ID zwei Zeilen weiter.
Du fügst der Personengruppe jetzt einmalig nach der Schleife was[1] hinzu. Sinnvoll?
[1]Irgendein "s", was sonst nirgendwo benutzt wird. Sinnvoll? |
Nein es ist nicht Sinvoll, also nochmal die forschleife:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for (int i = 0; i < lines.Length; i = i +4 ) { p.Nachname = lines[i]; i = i + 1; p.Vorname = lines[i]; i = i + 1; p.Matrnummer = Convert.ToInt64(lines[i]);
}
speicher.Personen.Add(p); |
So klappt es eine Person der Gruppe hinzufügen.
Wie fügt man jetzt mit der Anweisung speicher.Personen.Add(p); bei jedem Durchgang der for Schleife Personen der PersonenGruppe hinzu, mit zusätzlichen While schleife? Aber welche Abbruchbedienung kann man da nehmen?
Moderiert von Christian S.: Code- durch C#-Tags ersetzt |
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Sa 03.07.10 00:24
spitzname hat folgendes geschrieben : | spitzname hat folgendes geschrieben : | Christian S. hat folgendes geschrieben : | Du springst von Vorname zu ID zwei Zeilen weiter.
Du fügst der Personengruppe jetzt einmalig nach der Schleife was[1] hinzu. Sinnvoll?
[1]Irgendein "s", was sonst nirgendwo benutzt wird. Sinnvoll? |
Nein es ist nicht Sinvoll, also nochmal die forschleife:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for (int i = 0; i < lines.Length; i = i +4 ) { p.Nachname = lines[i]; i = i + 1; p.Vorname = lines[i]; i = i + 1; p.Matrnummer = Convert.ToInt64(lines[i]); speicher.Personen.Add(p);
} |
So klappt es eine Person der Gruppe hinzufügen.
Wie fügt man jetzt mit der Anweisung speicher.Personen.Add(p); bei jedem Durchgang der for Schleife Personen der PersonenGruppe hinzu, mit zusätzlichen While schleife? Aber welche Abbruchbedienung kann man da nehmen?
Moderiert von Christian S.: Code- durch C#-Tags ersetzt |
|
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 03.07.10 07:07
Hm?
_________________ Die Lösung ist nicht siebzehn.
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Sa 03.07.10 09:10
Hallo,
also das ist echt nicht nett und ich kann Christian verstehen wenn er keine Lust mehr hat.
Du sollst nicht versuchen und versuchen bis du zum Ziel kommst, sondern überlegen was du machen willst und dieses dann sukzessive in Code umsetzen.
Deine Überlegungen sollten also zuerst so aussehen:
C#-Quelltext
So sollte dein Programmablauf aussehen und diesen bekommst du nicht durch versuchen! sondern durch überlegen. Also zuerst immer überlegen und dann "versuchen" diese Anweisungen umzusetzen.
Gruß
|
|
spitzname 
      
Beiträge: 27
|
Verfasst: Sa 03.07.10 16:01
danielf hat folgendes geschrieben : | Hallo,
also das ist echt nicht nett und ich kann Christian verstehen wenn er keine Lust mehr hat.
Du sollst nicht versuchen und versuchen bis du zum Ziel kommst, sondern überlegen was du machen willst und dieses dann sukzessive in Code umsetzen.
Deine Überlegungen sollten also zuerst so aussehen:
C#-Quelltext
So sollte dein Programmablauf aussehen und diesen bekommst du nicht durch versuchen! sondern durch überlegen. Also zuerst immer überlegen und dann "versuchen" diese Anweisungen umzusetzen.
Gruß |
Danke euch für die Mühe, es hat endlich geklappt.
Erst nachdenken und dann Versuchen ist ein guter Tipp!
Jetzt ist Fussball angesagt, wir werden gewinnen!!!!
gruß
|
|