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 ( );
}
}
}
Hi,
vielleicht hilft Dir dieses Beispiel weiter...
http://www.tsql.de/csharp/csharp_textdatei.php
Gruß Ron
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ß.
Hallo,
... oder hier
using ( StreamWriter sw = new StreamWriter ( aFile, true, System.Text.Encoding.Default ) )
true für append!
**:::
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
@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ß
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 ?
Unsere Website
iPhone Programmierung | Android Programmierung
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ß.