Autor Beitrag
spitzname
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: 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:

ausblenden volle Höhe C#-Quelltext
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;
            }
        }
    }


ausblenden 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>();
    }

}


ausblenden volle Höhe C#-Quelltext
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);
            }           
                //das klappt schon mal          
                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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian 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
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: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Fr 02.07.10 19:59 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Fr 02.07.10 22:17 
Ok, also mit File.ReadAllLines und Schleife:

ausblenden volle Höhe C#-Quelltext
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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Fr 02.07.10 22:56 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden volle Höhe C#-Quelltext
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);
                
                    //Die forschleife hat folgenden Algorithmus (erste Zeile, zweite, dritte speichern und 
                    //vierte auslassen dann fünfte,sechste,siebte Zeile speichern achte auslassen u.s.w
                    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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Fr 02.07.10 23:29 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden volle Höhe C#-Quelltext
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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Sa 03.07.10 00:01 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
for (int i = 0; i < lines.Length; i = i +4 )
                    {
                        s.Nachname = lines[i];
                        i = i + 1;
                        s.Vorname = lines[i];
                        i = i + 1;
                        s.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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Sa 03.07.10 00:20 
user profile iconspitzname hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
spitzname Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Sa 03.07.10 00:24 
user profile iconspitzname hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconspitzname hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 03.07.10 07:07 
Hm?

_________________
Die Lösung ist nicht siebzehn.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// 1. Lese Datei zeilenweise ein

// 2. Erzeuge eine leere Sammlung von Personen

// 3. Solange es vier Zeilen gibt

// 3a. Fasse vier Zeilen zu einer Person zusammen

// 3b. Füge diese Person der Liste hinzu


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Sa 03.07.10 16:01 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// 1. Lese Datei zeilenweise ein

// 2. Erzeuge eine leere Sammlung von Personen

// 3. Solange es vier Zeilen gibt

// 3a. Fasse vier Zeilen zu einer Person zusammen

// 3b. Füge diese Person der Liste hinzu


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! :idea:

Jetzt ist Fussball angesagt, wir werden gewinnen!!!!

gruß