C# - Kleines Prob - Komm nich weiter!!

Alexander12

Erfahrenes Mitglied
Hi.

Ich habe ien kleines problem, Ihr könnt mir da ganz bestimmt helfen:

Das ist mein (C#) Code:

Code:
ArrayList arr = new ArrayList();
void Button3Click(object sender, System.EventArgs e)
{
while ( (Line = Reader.ReadLine()) != null )
arr.Add(Reader.ReadLine());
zahl1 = Convert.ToInt16(textBox.Text);
string[] datensatz1;
datensatz1 = (string[])arr.ToArray(typeof(string));  //HIER sollte laut Error der Fehler sitzen!?
string[] felder;
felder = datensatz1[zahl1].Split(new Char[] {','});
name.Text = felder[0];
vorname.Text = felder[1];
straße.Text = felder[2];
hausnr.Text = felder[3];
plz.Text = felder[4];
ort.Text = felder[5];
telefon_privat.Text = felder[6];
telefon_mobil.Text = felder[7];
mail_privat.Text = felder[8];
mail_geschaeftlich.Text = felder[9];
string pfad = felder[10];
land.Text = felder[11];
bundesland.Text = felder[12];
telefon_sonstige.Text = felder[13];
this.bild1.Image = Image.FromFile(felder[14]);
}

Das Programm bringt beim Clicken des Buttons folgenden Fehler:

Code:
Object reference not set to an instance of an object

Der Errorbericht hat auch ne Zeile angegeben, die Ich im Code gekennzeichnet habe, könnt ihr mir helfen?

MfG Alexander12
 

Nico Graichen

Erfahrenes Mitglied
Hi,

Hast du dein Programm schon mal debugt? Wenn nein, mach das mal, dann weißt du auch welches Objekt nicht instanziert ist und wo der Fehler liegt ;)

eine Frage noch:
Code:
while ( (Line = Reader.ReadLine()) != null )
arr.Add(Reader.ReadLine());
...
Wieso liest du die Zeile in Line, wenn du diese Variable sowieso nirgends verwendest?
Und außerdem müsstest du durch den 2. Aufruf von ReadLine() eigentlich immer eine Zeile überspringen, oder?
 

Alexander12

Erfahrenes Mitglied
Hi.

Beim Debuggen kommt ja kein Fehler, das ist ja das Problem, er kommt nur zur Laufzeit beim Drücken des Buttons.

MfG Alexander12
 

Norbert Eder

Erfahrenes Mitglied
Dann setz halt einen Breakpoint rein. Debuggen tust sowieso immer zur Laufzeit. Das was du meinst ist der Compiler, der natürlich nicht wissen kann, ob ein Objekt gesetzt wird oder nicht (also nicht in allen Fällen).

Schön langsam wärs wirklich an der Zeit, Grundlagen zu lernen. Was ist ein Compiler, was ist ein Debugger? Wie kann ich einen Debugger verwenden? Was bringt mir das?

Using a debugger

Und ja, mit der ReadLine() Geschichte liest du nur jede zweite Zeile ein.
 
Zuletzt bearbeitet:

Alexander12

Erfahrenes Mitglied
Hi.

danke, aber Ich habe rumprobiert und es so hinbekommen:

Code:
ArrayList arr = new ArrayList();
void Button3Click(object sender, System.EventArgs e)
{
while ( (Line = Reader.ReadLine()) != null )
{
arr.Add(Reader.ReadLine());
}
zahl1 = Convert.ToInt16(textBox.Text);
string datensatz1 = arr[zahl].ToString();
    //datensatz1 = (string[])arr.ToArray(typeof(string));  //Diese Zeile fällt also ganz weg 
string[] felder;
felder = datensatz1.Split(new Char[] {','});
name.Text = felder[0];
vorname.Text = felder[1];
straße.Text = felder[2];
hausnr.Text = felder[3];
plz.Text = felder[4];
ort.Text = felder[5];
telefon_privat.Text = felder[6];
telefon_mobil.Text = felder[7];
mail_privat.Text = felder[8];
mail_geschaeftlich.Text = felder[9];
string pfad = felder[10];
land.Text = felder[11];
bundesland.Text = felder[12];
telefon_sonstige.Text = felder[13];
this.bild1.Image = Image.FromFile(felder[14]);
}

Siehe da, es . :)
Jetzt liest er auch JEDE Zeile ein, habs ausprobiert.

MfG Alexander12
 

Alexander12

Erfahrenes Mitglied
Ach, hab noch was vergessen,

Das hat Norbert Eder gesagt:
Schön langsam wärs wirklich an der Zeit, Grundlagen zu lernen. Was ist ein Compiler, was ist ein Debugger? Wie kann ich einen Debugger verwenden? Was bringt mir das?

Mit dem Debugger hab Ich kein Problem, Es war auch kein direkter Fehler im Code.

Zu den Grundlagen noch was:
Mal nebenbei, Arrays sind doch auch Grundlagen, oder? ;-)
PHP, C#, egal wo, Sie werden immer in vorderen Kapiteln behandelt...

MfG Alexander12
 

Norbert Eder

Erfahrenes Mitglied
Er liest jede Zeile?

Also, gegeben sein ein Textfile mit nachfolgendem Inhalt:
Code:
1
2
3
4
5
6
7
8
9
10
Dann hab ich deinen Sourcecode hergenommen (lediglich hab ich meinen Programmierstil verwendet):
Code:
StreamReader sr = new StreamReader(Application.StartupPath + "\\test.txt");

string line = null;
while ((line = sr.ReadLine()) != null)
	System.Diagnostics.Debug.WriteLine(sr.ReadLine());

sr.Close();
Und wie glaubst du sieht das Ergebnis aus?
Code:
2
4
6
8
10
Ich glaub, das sind nicht alle Zeilen ...
 

Alexander12

Erfahrenes Mitglied
Hi.

Gegeben sei ein Textfile mit folgendem Inhalt:

Code:
A
B
C
D
E
F

So, nun nehme Ich den SourceCode mit meinem Programmierstil:

Code:
StreamReader Reader = new StreamReader("Adressen.txt");
string Line = String.Empty;
while ( (Line = Reader.ReadLine()) != null )
{

arr.Add(Line);
}

Was glaubst du nun wie das Ergebnis aussieht?

Code:
A
B
C
D
E
F

*textfileanguck*

HAmm... alle Zeilen, wie merkwürdig...

MfG Alexander12
 

Norbert Eder

Erfahrenes Mitglied
Weil es jetzt richtig ist. In deiner Post davor war es noch falsch und da hattest schon gemeint, dass er jede Zeile einliest, was mit dem angegebenen Sourcecode definitiv nicht gestimmt hat.
 

Alexander12

Erfahrenes Mitglied
Hi.

Nein, Ich hab ja Klammern bei while ( {} ) gesetzt, da führt er jedes mal wenn er die Schleife ausführt auch das aus!

Siehe:
Code:
while ( (Line = Reader.ReadLine()) != null )  //Die Schleife while
{                                                              //Jetzt führt er das in den geschweiften 
                                                               //auch jedes Mal aus nachdem er die 
arr.Add(Line);                                            //Schleife durchalufen hat, oder nich?  ;) 
}

MfG Alexander12
 
Zuletzt bearbeitet: