Laden...

CSV-Datei Einlesen und bearbeiten

Erstellt von Totty vor 15 Jahren Letzter Beitrag vor 15 Jahren 12.300 Views
T
Totty Themenstarter:in
2 Beiträge seit 2009
vor 15 Jahren
CSV-Datei Einlesen und bearbeiten

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

3.971 Beiträge seit 2006
vor 15 Jahren

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

Gelöschter Account
vor 15 Jahren

die anzeige solltest du nur dafür verwenden, wofür sie auch gedacht ist. nämlich zum anzeigen 😃

für deine zwecke eigenet sich viel besser eine List<string> statt der guicontrols.

T
Totty Themenstarter:in
2 Beiträge seit 2009
vor 15 Jahren

Hallo,

@JAck30lena wie du in dem Code sehen kannst, mach ich das ja auch mit dem LIST<string>, nur wie nutzt ich den weiter?

M
194 Beiträge seit 2008
vor 15 Jahren

Hallo Totty,

Da gab es doch eine lustige kleine Funktion namens String.Split. Die würde ich mir mal zu Gemüte ziehen.

Beste Grüße
MrLeeh

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

J
3.331 Beiträge seit 2006
vor 15 Jahren

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 "&quot;,&quot;" 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.

Gelöschter Account
vor 15 Jahren

ja, aber du machst das remove innerhalb der lisbox, was an der stelle sinnlos ist. wozu hälst du auch noch ide daten doppelt?