Laden...

C#: schreiben einer CSV-Datei

Erstellt von DB87 vor 14 Jahren Letzter Beitrag vor 14 Jahren 23.531 Views
D
DB87 Themenstarter:in
2 Beiträge seit 2009
vor 14 Jahren
C#: schreiben einer CSV-Datei

Hallo erstmal, bin neu hier.

Ich habe ein Problem. =)

Ich möchte eine CSV-Datei erstellen, mit Werten die ich vorher berechnet habe(funktioniert).
Mein Problem ist jetzt, dass wenn ich neue Parameter angebe und den "Berechnen" Button klicke erstellt er mir jedesmal eine neue CSV-Datei. Hätte es aber gerne so, dass wenn ich den "Berechnen" Button klicke er mir Werte in eine CSV-Datei untereinander schreibt, so oft ich auch die Parameter wechsele.
Erst bei klicken des "Beenden" Button soll er die CSV-Datei schließen und speichern.

Also sozusagen: CSV-Datei öffnen ->schreiben,schreiben,schreiben -> schließen
=)

Hoffe mir kann jemand helfen.
Hier mal noch mein bisheriger Quellcode für den Writer

   
    // CSV-Writer
    public class CsvWriter
    {
        // Schreibt Inhalt eines Array in eine CSV Datei
        // path = Pfad der CSV Datei
        // ivalue = Berechneter Wert 
        // i_M_value = 2. berechneter Wert
        public void opennewCsv ( string path , Double ivalue ,
                Double i_M_value , double i_Up , int i_SchrittUp )
        {
            // berechnet den angegebenen Prozentsatz 
            double tmp_nowUp = ( i_Up * i_SchrittUp ) / 100;
         
            FileStream aFile = new FileStream ( path , FileMode.Create );
        }
        public void writeCsv 
        {
            try
            {
                               
                using ( StreamWriter sw = new StreamWriter ( aFile , System.Text.Encoding.Default ) )
                {
                    // wandelt "," in "."
                    String M_value = i_M_value.ToString ( );
                    M_value = M_value.Replace ( "," , "." );
                    
                    String nowUp = tmp_nowUp.ToString ( );
                    nowUp = nowUp.Replace ( "," , "." );
                                     
                    String csv_str;
                    
                    // Lese Datum und Uhrzeit
                    DateTime today = DateTime.Now;
                    today.ToString ( "yyyy-MM-dd_HH:mm:ss" );

                  
                     // Überschrift inklusive Datum und Uhrzeit der Erstellung
                     csv_str = String.Concat ( " Erstellt am: , " , today );
                     sw.WriteLine ( csv_str );
                     csv_str = "";
                     sw.WriteLine ( csv_str );
                     csv_str = String.Concat ( "Up : , " , i_Up  );
                     sw.WriteLine ( csv_str );
                     csv_str = "";
                     sw.WriteLine ( csv_str );

                     // Spaltennamen
                     csv_str = "Up , Mittelwert , Ladung";
                     sw.WriteLine ( csv_str );

                     //Ausgabe 
                     csv_str = String.Concat ( nowUp , "," , M_value , " , " , ivalue );
                     sw.Write ( csv_str );
                    
                    // Erfolgsmeldung  --> CSV Datei mit Werten wurde erfolgreich erstellt 
                    MessageBox.Show ( "Ergebnisdatei erfolgreich geschrieben! Siehe " + path );
                }
            }

            // Fehler
            catch ( Exception ex )
            {
                MessageBox.Show ( "Error: Datei konnte nicht geschrieben werden. Original Fehler: "
                                 + ex.Message );

                File.Delete ( path );

                Application.Exit ( );
            }
        }
    }

R
69 Beiträge seit 2009
vor 14 Jahren

Hi,

vielleicht hilft Dir dieses Beispiel weiter...

http://www.tsql.de/csharp/csharp_textdatei.php

Gruß Ron

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo DB87

Erstmal willkommen auf myCSharp.de 😃

Du verwendest "new FileStream ( path , FileMode.Create );" womit die Datei immer wieder neu geschrieben wird. Versuch mal "FileMode.Append".

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

1.696 Beiträge seit 2006
vor 14 Jahren

Hallo,

... oder hier

using ( StreamWriter sw = new StreamWriter ( aFile, true, System.Text.Encoding.Default ) )

true für append!

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo DB87,

ich finde es etwas umständlich wie du an diese Sache rangehst.
Bei einer so kleinen CSV-Datei könntest du das Ganze auch in einen String packen und dann diesen in die Datei schreiben. (File.WriteAllLines

Siehe dazu: [Tutorial] Alles über Dateien 2.2
Dort findest du alle nötigen Informationen

Gruss
Michael

D
DB87 Themenstarter:in
2 Beiträge seit 2009
vor 14 Jahren

@Florian
Wenn ich anstatt "Create" - "Append" verwende schreibt das Programm alles wieder hinein( oder untereinander, nur mit den neuen Parametern). wollte das nur die Werte wieder geschrieben werden.
Die Werte beim Kommentar "Ausgabe".

Gruß

313 Beiträge seit 2006
vor 14 Jahren

Viele wollen ja nicht wirklich CSV sondern nur nur Excel:
http://www.ploetzeneder.eu/softwareentwicklung/cvbnet/38-datagridview-in-excel-exportieren.html

Hilft dir das ?

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo DB87

Ich weiß leider nicht woher genau die Daten deines Arrays kommen. Mit FileMode.Append (oder File.AppendText() oder StreamWriter(append)) schreibt die Klasse die neuen Werte hinten an die bestehende Datei an.

Woher kommen denn die anderen Daten? An der Stelle musst du sicherstellen, dass Header-Informationen nur einmal geschrieben werden, bzw. dir zu deinen berechneten Daten merken welche bereits geschrieben wurden und welche nicht.

BTW: Ich weiß ja nicht genau was dein Programm macht und ob CSV eine zwingende Anforderung ist. Wenn's aber einfach darum geht Daten zu schreiben und später wieder weiterzuverwenden würde ich empfehlen eine typisierte DataTable oder einen XmlSerializer oder irgendeine andere Serialisierung zu verwenden.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.