Autor |
Beitrag |
blutengel
      
Beiträge: 59
Win XP, WIN 7
VS#2008 Prof
|
Verfasst: So 20.03.11 22:26
Hi!
Bin grad dabei ein Telefonbuch Prgramm zu schreiben. Läuft auch sehr gut.Abewr ein Problem habe ich noch.
Mit:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void bt_speichen_Click(object sender, EventArgs e) { TelefonDat[datensatz_nr].Name = tb_name.Text; TelefonDat[datensatz_nr].Vorname = tb_vorname.Text; TelefonDat[datensatz_nr].Telefonnummer = tb_telefonnummer.Text; TelefonDat[datensatz_nr].mail_adresse = tb_mail_adresse.Text; StreamWriter writer = File.AppendText(cb_file_name.Text);
writer.Write(Environment.NewLine+"{0},{1},{2},{3}",TelefonDat[datensatz_nr].Name,TelefonDat[datensatz_nr].Vorname,TelefonDat[datensatz_nr].Telefonnummer,TelefonDat[datensatz_nr].mail_adresse);
writer.Close(); } |
füge ich eine Datensatz hinzu.Ist die Datei noch nicht vorhanden, und wird neu erstellt fügt er mir eine Leere Zeile ein, weil ich Environment.NewLine davor stehen habe.Dies habe ich gemacht weil der neue Datensatz in einer neuen Zeile eingefügt werden soll.Wenn ich mit \n am Anfang meines Strings arbeite habe ich am Enden des vorigen Datensatzes 3 kleine Vierecke.Wie mache ich am besten einen Zeilenumbruch ohne diese Zeichen, und ohne dass, wenn ich die Datei neu Erzeuge,am Dateianfang eine leere Zeile habe.
Mein Lehrer hatte da eine Lösung die mir gar nicht gefiel. Am anfang lud er alle Datensätze in eine Struktur. Neue Datensätze wurden erst in die Struktur geschrieben. Bei drücken des Speichen Button wurde erst die Datei gelöscht,neu erzeugt, und dann die Daten aus der Struktur hinei geschrieben.Ich finde das dies nicht grad gut gelöst ist.
Wer könnte mir bei meinem Problem helfen?
MFG
blutengel
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 20.03.11 22:37
Hallo,
prüfe doch einfach in der Lesemethode, ob die aktuell gelesene Zeile leer ist, und wenn sie das ist, überspringe sie. Wie sieht denn der Lese-Quelltext aus?
Du solltest den Zeilenumbruch besser nach dem Datensatz einfügen, dann hast du immer am Ende einer Datei einen Zeilenumbruch. Das ändert zwar nichts am ursprünglichen Problem, ist aber üblich.
Grüße,
Yogu
|
|
blutengel 
      
Beiträge: 59
Win XP, WIN 7
VS#2008 Prof
|
Verfasst: So 20.03.11 22:45
Hiermit lese ich ein:
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:
| private void bt_laden_Click(object sender, EventArgs e) { StreamReader datei; datei=File.OpenText(cb_file_name.Text); string zeile = ""; string[] felder;
datensatz_nr = 0; while (datei.Peek() != -1) { zeile = datei.ReadLine(); felder = zeile.Split(new char[] { ',' }); TelefonDat[datensatz_nr].Name = felder[0]; TelefonDat[datensatz_nr].Vorname = felder[1]; TelefonDat[datensatz_nr].Telefonnummer = felder[2]; TelefonDat[datensatz_nr].mail_adresse = felder[3]; datensatz_nr++; } tb_name.Text = TelefonDat[0].Name; tb_vorname.Text = TelefonDat[0].Vorname; tb_telefonnummer.Text = TelefonDat[0].Telefonnummer; tb_mail_adresse.Text = TelefonDat[0].mail_adresse; datei.Close(); } |
MFG
blutengel
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 20.03.11 22:50
Na also, dann dürfte es ja wohl kein Problem darstellen, leere Zeilen zu ignorieren, oder?
Edit: Ich habe vorhin deine zweite Frage überlesen und wusste auch nicht, dass ReadLine die Zeilenumbruchszeichen mit zurück gibt (so ein Blödsinn). Du kannst entweder "\n" und "\r" durch Leerstrings ersetzen ( deinString = deinString.Replace("\n", "").Replace("\r", "");) oder gleich alle Zeilen mit File.ReadAllLines einlesen. Bei letzterer Methode werden Zeilenumbruch und Zeilenvorschub nicht mit in den Rückgabewert geschrieben.
Grüße,
Yogu
|
|
blutengel 
      
Beiträge: 59
Win XP, WIN 7
VS#2008 Prof
|
Verfasst: So 20.03.11 22:56
Ich weiss nur leider nich wie ich diese leeren Zeilen ignoriren kann.Und wo ich das am besten abfage.
MFG
blutengel
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 20.03.11 23:00
Na - du liest die Zeile ein, prüfst, ob sie leer ist, und wenn nicht, verarbeitest du den Datensatz. Wenn du den Code selbst geschrieben hast, sollte das doch kein Problem darstellen.
|
|
blutengel 
      
Beiträge: 59
Win XP, WIN 7
VS#2008 Prof
|
Verfasst: So 20.03.11 23:18
Noch ne andere Frage. Was hälst du von der Lösung meines Lehrers?
MFG
blutengel
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 20.03.11 23:27
Das kommt ganz auf die sonstigen Umstände an. Sollen Datensätze bearbeitet werden, muss die ganze Datei gelesen und später gelöscht und neu geschrieben werden *. Ist das nicht notwendig, ist es performanter, die neuen Datensätze hinten anzuhängen.
_____________________
* Es ist auch möglich, zu einer bestimmten Stelle in der Datei zu navigieren und diese Zeile zu ändern. Wenn aber so etwas nötig ist, sollte man sich überlegen, ob eine Datenbank vielleicht doch angemessener wäre.
Für diesen Beitrag haben gedankt: blutengel
|
|
|