Hallo Forum,
ich habe ein Problem mit einer CSV Datei.
Ich möchte ein Programm schreiben, dass eine CSV Datei einließt, die erste und die letzten beiden Zeilen der Datei entfernt und den Inhalt splitet...
Soweit der Plan, an der Umsetzung hapert es dann schon 😦
Die Datei ist wie folgt aufgebaut:
"""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"""
"""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"""
"""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"""
"""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"",""XXXX"""
Derzeit lese ich die CSV Datei in eine ListBox ein und hatte auch vor die Daten darin zu bearbeiten, oder geht es vielleicht einfacher?
private void button3_Click(object sender, EventArgs e)
{
string Pfad = label3.Text;
// Prüfen ob eine Datei angegeben wurde
if (label3.Text == "")// wenn nicht MessageBox
{
MessageBox.Show("Bitte eine Datei auswählen!", "Keine Datei ausgewählt", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else // ansonsten Zeile für Zeile aus der Datei auslesen
{
List<string> list = new List<string>();
using (StreamReader r = new StreamReader(Pfad))
{
int count = 0;
string line;
while ((line = r.ReadLine()) != null)
{
list.Add(line); // Zu Listbox1 hinzufügen
count = listBox1.Items.Count;
listBox1.Items.Add(line); // In Listbox1 anzeigen
}
}
}
}
So wenn die Datei drin ist, wollte ich die erste und die letzten beiden Zeilen löschen, daran hapert es aber schon. Hatte aus einem Forum diesen Befehl gefunden, der klappt aber nicht.
listBox1.Items.Remove(0);
Wobei 0 für die Zeile stehen soll...
Anschließend würde ich mit einem Split Befehl die Daten bei den " splitten.
Und alles wieder mit dem Streamwriter in eine Datei schreiben wollen.
Und diese dann per FTP auf ein Netzlaufwerk schieben, aber soweit sind wir noch nicht 😉 Da Problem liegt schon ganz klar darin, die 3 Zeilen zu entfernen.
Kann mir da einer helfen?
Es grüßt Totty
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo,
@JAck30lena wie du in dem Code sehen kannst, mach ich das ja auch mit dem LIST<string>, nur wie nutzt ich den weiter?
Hallo,
die beiden Zeilen mit der ListBox (Count und Add) stören die Verarbeitung nur. Weg damit! Lediglich wenn Du zwischendurch etwas sehen willst, dann kannst du die gesamte List<string> an die ListBox hängen.
Für die nächsten Schritte geht es etwa so (ohne Gewähr, nur hingekritzelt):
int maxi = list.Count - 2;
for(int x1 = 1; x1 < maxi; x1++) {
string[] contents = list[x1].Split(",");
string newline = String.Empty;
foreach(string content in contents) {
newline += content.Trim("\"") + ";";
}
File.AppendLine(destinationfile, newline);
}
Es gibt noch viele Varianten: newline durch **StringBuilder **ersetzen, alle newlines zuerst in einer neuen List<string> oder in einem gemeinsamen StringBuilder sammeln und am Schluss per **File.WriteAllText **speichern oder ...
Mir gefallen File.Read* und File.Write besser als das Hantieren mit StreamReader usw. Das erledigt mit einem Befehl das gesamte Einlesen bzw. Speichern.
/Edit
Achtung: Das Split mit Komma ist nur eine schnelle Lösung. Je nachdem, ob die Gänsefüßchen immer oder nur bei manchen Spalten auftreten, ist auch Split nach "","" sinnvoll. Aber ein vernünftiger CsvReader berücksichtigt das.
Ich hoffe, das gibt einige Ideen für das weitere Vorgehen. Jürgen
@MrLeeh
Asche auf mein Haupt. Ich bin doch sonst immer dafür, nur Stichworte zu liefern und nicht (halb-) fertigen Code.