Entwickler-Ecke
IO, XML und Registry - Einlesen mehrer CSV-Datein + einfügen in eine dritte Datei
DevInet - Mo 31.05.10 15:05
Titel: Einlesen mehrer CSV-Datein + einfügen in eine dritte Datei
Hallo alle miteinander.
Folgendes "Konstrukt" ist meine Ausgangssituation:
2xCSV-Datei
Die eine enthält die Namen, Kürzel, Tel.-Nr., etc der Mitarbeiter.
Die andere enthält die Namen incl. Datum von Veranstaltungen.
Die dritte Datei enthält ein Grundgerüst mit Platzhaltern.
Die Daten aus den beiden CSV-Dateien sollen nun an die Stelle der Platzhalter geschrieben werden.
Aus der dritten Datei soll ein Mail-Footer für den Mitarbeiter generiert werden.
Da ich diese Prozedur nicht von Hand und auch nicht für jeden Mitarbeiter einzeln machen will, habe ich mir überlegt, über Arrays und eine For-Schleife das ganze zu generieren. Einlesen der Dateien, schreiben des Inhalts in die Arrays und splitten des Arrays mit den Daten der Mitarbeitern ist kein Problem. Das Problem kommt erst beim einfügen der Daten, bzw ersetzen der Platzhalter. Hier fügt er nur bis zum dritten Footer die Daten korrekt ein, danach setzt er zum Teil Leerzeilen und "falsche" Inhalt ein.
Jemand ne Ahnung, woran das liegen kann? Oder wie ich das ganze besser und übersichtlicher mache?
Vielen Dank im vorraus.
Mfg DevInet
PS: Ich möchte mir die fertige Datei in einer Art Vorschaufenster anzeigen lassen. Wie kann ich das machen?
JüTho - Mo 31.05.10 15:18
DevInet hat folgendes geschrieben : |
| Jemand ne Ahnung, woran das liegen kann? |
Wenn du uns verrätst, wie du es bisher versuchst, gibt es vielleicht sinnvolle Antworten. Im Moment sagt meine Glaskugel, dass Indizes falsch sind.
DevInet hat folgendes geschrieben : |
| Oder wie ich das ganze besser und übersichtlicher mache? |
Normalerweise empfehle ich das typisierte Verfahren mit DataTable anstelle eines String-Arrays. Aber das muss nicht unbedingt sein, lässt sich aber ohne den bisherigen Code ebensowenig beantworten.
DevInet hat folgendes geschrieben : |
| PS: Ich möchte mir die fertige Datei in einer Art Vorschaufenster anzeigen lassen. Wie kann ich das machen? |
Dazu gibt es passende Controls; das ist aber eine Frage, die nichts mit dem Unterforum oder der Überschrift zu tun hat, sondern in eine neue Diskussion gehört. Deshalb darf es dazu hier keine Antwort geben.
Jürgen
DevInet - Mo 14.06.10 11:16
So, habe versucht das ganze nochmal neu zu schreiben und nun siehts im Rohbau so aus.
Zwar nicht sauber programmiert aber für den Anfang recht einfach gehalten, da ich nicht der C#-Profi bin und ich sonst nichts mehr verstehe:
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: 45: 46: 47: 48: 49:
| namespace Mail_Footer_Frontend { public partial class Form4 : Form { public Form4() { InitializeComponent(); }
private void btn1_Click(object sender, EventArgs e) { StreamReader tempread = new StreamReader("templ-aalen.txt", System.Text.Encoding.UTF7, true); { string line; while ((line = tempread.ReadLine()) != null) { fBox.Items.Add(line); }
} tempread.Close(); }
private void btn2_Click(object sender, EventArgs e) { StreamReader mread = new StreamReader("mitarbeiter.csv", System.Text.Encoding.UTF7, true); { string line2;
while ((line2 = mread.ReadLine()) != null) { mBox.Items.Add(line2); } } mread.Close();
string name = mBox.Text; string[] zeile = name.Split('\n'); string[] spalten = zeile.Split(':');
StreamWriter mwrite = new StreamWriter("mmit.txt", true); } } } |
Bei den rot markierten stellen bekomme ich die Fehlermeldungen:
Fehler 15 "System.Array" enthält keine Definition für "Split", und es konnte keine Erweiterungsmethode "Split" gefunden werden, die ein erstes Argument vom Typ "System.Array" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\hes\Eigene Dateien\Visual Studio 2010\Projects\Mail-Footer-Frontend\Mail-Footer-Frontend\Form4.cs 64 38 Mail-Footer-Frontend
und
Fehler 14 "System.Windows.Forms.RichTextBox" enthält keine Definition für "Items", und es konnte keine Erweiterungsmethode "Items" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.RichTextBox" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\hes\Eigene Dateien\Visual Studio 2010\Projects\Mail-Footer-Frontend\Mail-Footer-Frontend\Form4.cs 57 26 Mail-Footer-Frontend
Frage lautet nun, wieso er diese Fehler ausgibt. In Referenz-Dateien, welche wir von unserem AWE-Lehrer bekommen haben stehts auch so drin. Bin langsam echt am verzweifeln. Falls diese Frage hier falsch ist, bitte einfach sagen, wo ich nen neuen Thread aufmachen soll.
Moderiert von
Christian S.: C#-Tags hinzugefügt
Trashkid2000 - Fr 25.06.10 18:03
C#-Quelltext
1: 2: 3:
| mBox.Items.Add(line2); string[] zeile = name.Split('\n'); string[] spalten = zeile.Split(':'); |
Also, ich nehme mal an, dass mBox eine RichtextBox ist (aufgrund der Fehlermeldung). Und es gibt dabei keine Items. Und dass Zeile.Split nicht klappt, liegt daran, dass zeile ein string[] ist. Und Split kannst Du nur auf ein String anwenden. Also, wenn Du dort irgendwas splitten willst, müsstest Du Zeile für Zeile von "zeile" durchgehen, also z.B. so:
C#-Quelltext
1: 2: 3: 4:
| foreach (string z in zeile) { string[] spalten = z.Split(':'); } |
Hoffe, ich konnte Dir ein bisschen weiterhelfen. Aber ansonsten würde ich es wohl ganz anders machen, aber dass ist, ohne den Inhalt bzw. mal eine Zeile der Dateien zu sehen, nicht so einfach zu sagen.
Gruss, Marko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!