Entwickler-Ecke
WinForms - Frage zum StreamWriter
blutengel - So 20.03.11 22:26
Titel: Frage zum StreamWriter
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 - 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 - 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 - 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 [
http://msdn.microsoft.com/de-de/library/s2tte0y1%28v=VS.80%29.aspx] einlesen. Bei letzterer Methode werden Zeilenumbruch und Zeilenvorschub nicht mit in den Rückgabewert geschrieben.
Grüße,
Yogu
blutengel - 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 - 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 - So 20.03.11 23:18
Noch ne andere Frage. Was hälst du von der Lösung meines Lehrers?
MFG
blutengel
Yogu - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!