Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1549 | Anzahl registrierter User: 1833 | Besucher online: 544
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

CSV Dateien schreiben


Autor: Gast
Sprache: C#
Bewertung:
6.54 (3 votes)
Anzahl der Aufrufe: 20221
  
Kick it on dotnet-kicks.de  

Beschreibung:

Eine Klasse um CSV Dateien zu schreiben.
Nutzung:
CSVWriter writer = new CSVWriter("csvtest.csv");

oder mit eigenem Delimiter:
CSVWriter writer = new CSVWriter("csvtest.csv",",");

writer.WriteLine("feld1","feld2","feld3","feld4");
writer.Flush();


Abgelegt unter: CSV, Klasse, Datei.



C#
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
    public class CSVWriter
    {
        /// <summary>
        /// Gets or sets the outfile.
        /// </summary>
        /// <value>The file to write.</value>
        public  string          Outfile             { get; set; }
        /// <summary>
        /// Gets or sets the delimiter.
        /// </summary>
        /// <value>The delimiter.</value>
        /// <remarks>Standard: ;</remarks>
        public  string          Delimiter           { get; set; }
        /// <summary>
        /// Gets or sets the write lines to file.
        /// </summary>
        /// <value>The write lines to file.</value>
        /// <remarks>Every X files are written to the file.
        ///          Standard: 100 lines
        /// </remarks>
        public  int             WriteLinesToFile    { get; set; }
        /// <summary>
        /// Gets or sets the cache.
        /// </summary>
        /// <value>The cache.</value>
        private List<string>    Cache               { get; set; }
        /// <summary>
        /// Gets or sets the line counter.
        /// </summary>
        /// <value>The line counter.</value>
        /// <remarks>Implemented for performance reason (cheaper to increase a counter than to count all elements of a list)</remarks>
        private int             LineCounter         { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="CSVWriter"/> class.
        /// </summary>
        /// <param name="Outfile">The outfile.</param>
        public CSVWriter(string Outfile)
        {
            this.Outfile = Outfile;
            this.Delimiter = ";";
            this.WriteLinesToFile = 100;
            Cache = new List<string>();
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="CSVWriter"/> class.
        /// </summary>
        /// <param name="Outfile">The outfile.</param>
        /// <param name="Delimiter">The delimiter.</param>
        public CSVWriter(string Outfile, string Delimiter)
        {
            this.Outfile = Outfile;
            this.Delimiter = Delimiter;
            this.WriteLinesToFile = 100;
            Cache = new List<string>();
        }

        /// <summary>
        /// Writes the specified value.
        /// </summary>
        /// <param name="value">The value.</param>
        public void Write(params object[] value)
        {
            Cache.Add(ConvertToCSVString(value));
        }

        /// <summary>
        /// Writes the line.
        /// </summary>
        /// <param name="value">The value.</param>
        public void WriteLine(params object[] value)
        {
            Cache.Add(ConvertToCSVString(value));
            LineCounter++;
            if (LineCounter == WriteLinesToFile)
                SaveFile();
        }

        /// <summary>
        /// Saves the file.
        /// </summary>
        private void SaveFile()
        {
            StreamWriter writer = new StreamWriter(Outfile, true);
            for (int i = 0; i < WriteLinesToFile; i++)
            {
                writer.WriteLine(Cache[i]);
            }
            writer.Close();
            Cache.Clear();
        }

        /// <summary>
        /// Converts to CSV string.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        private string ConvertToCSVString(params object[] value)
        {
            // StringBuilder implementation
            // faster string concatenation than using "+" etc.
            StringBuilder StringToWrite = new StringBuilder();
            // for-loops are _very_ cheaper (=faster) than foreach loops
            for (int i = 0; i < value.Length; i++)
            {
                StringToWrite.Append(Convert.ToString(value[i]) + Delimiter);
            }
            string result = StringToWrite.ToString();
            // Cut the last added delimiter
            if (result.EndsWith(Delimiter))
                result = result.TrimEnd(Delimiter.ToCharArray());
            return result;
        }

        /// <summary>
        /// Flushes this instance.
        /// </summary>
        /// <remarks>Writes the complete cache to the file</remarks>
        public void Flush()
        {
            int BackupWriteLinesToFile = WriteLinesToFile;
            WriteLinesToFile = Cache.Count;
            SaveFile();
            WriteLinesToFile = BackupWriteLinesToFile;
        }

    }
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Weh Pung schrieb am:  12.02.2009 16:57:08

This code is wrong.
It does not handle the case, that the Delimiter is part of the data.
regalis schrieb am:  09.03.2010 12:03:38

I like the your code and especially the comments!
Thanks :)

@ Weh Pung: Go and write some code to handle your problem..or simply change the standard Delimiter :D
Josef Schramm schrieb am:  11.10.2010 16:05:06

Unfortunately in "private void SaveFile()" this statement is missing:
>> LineCounter = 0;
(If LineCounter is not reset then only <WriteLinesToFile> lines will be written)


Diese Snippets könnten für Sie interessant sein:
[C#] Eventlog Eintrag finden
[C#] Generischer Converter für CSV Dateien
[C#] CSV und XML-Datei Datenbank-Import (incl. valid-check)
[VB.NET] ASP.Net Gridview to Excel
[C#] CSV Datei in DataTable einlesen
[C#] DataTable in CSV Datei speichern
[C#] CSV Datei in Datatable einlesen
[C#] arbeiten mit einem struct-Typ. Auflisten, zählen
[VB.NET] Original UNC Pfad eines Netzlaufwerkes ermitteln
[VB.NET] Berechnet den Durchschnittswert von grossen Zahlenlisten
[C#] Zugriff auf Variablen/Funktionen einer unbekannten Klasse
[VB.NET] Eigene Form aus ClassLibrary DLL Aufrufen
[VB.NET] Datei im Explorer anzeigen und markieren
[C#] Datei anlegen
[C#] Aktuelles Verzeichnis auslesen
[VB.NET] CRC32 Hash einer Datei berechnen
[VB.NET] Den MD5 Hash einer Datei ermitteln
[VB.NET] Datei mittels Windows Dialog löschen
[VB.NET] Datei mittels Windows Dialog verschieben
[VB.NET] Datei mittels Windows Dialog kopieren
[VB.NET] Den SHA1 Hash einer Datei ermitteln
[VB.NET] Prüfen ob Datei gerade benutzt wird
[C#] Dateien in die Zwischenablage kopieren
[ASP.net] Textdatei zum Download anbieten
[C#] MD5-Hash von Dateien ermitteln
[C#] Arraylist in Textdatei schreiben
[C#] Textdatei in Arraylist speichern
[C#] SHA-1 Hash einer Datei erzeugen
[VB.NET] Datei Paketweise Kopieren
[ASP.net] Datei nach Bildupload prüfen
[C#] Dateien suchen mit LINQ
[C#] Datei/Ordner durch Erweiterungsmethoden abfragen
[C#] Datei-Eigenschaften zeigen (Eigenschaften-Fenster)
[C#] Create Nice File Size in C#
[VB.NET] Programmpfad mittels Erweiterung ermitteln in VB
[VB.NET] Dateien nach Datum sortieren
[C#] Datei umbenennen
[C#] Datei im Windows-Explorer anzeigen und markieren
[VB.NET] File Owner / File Besitzer
[VB.NET] wie in der CMD Pfad zu Datei ermitteln anhand des EXE-namens
[C#] Anzahl der Dateien in einem Ordner ermitteln
[VB.NET] Dateigröße als formatierter String
[VB.NET] Alle Dateien eines Ordners auflisten
[VB.NET] Den kurzen Pfad einer Datei ermitteln (8.3 Format)
[VB.NET] Klasse für Dateisuche
[C#] Erzeugen eines zufälligen Strings
[VB.NET] Dummy Datei erstellen
[C#] Datei in Papierkorb verschieben
[C#] Zeilen einer Datei zählen
[C#] Schreibschutz einer Datei setzen / entfernen
[ASP.net] Eine Datei zum Download anbieten
[VB.NET] Prüfen ob Dateiattribut vorhanden ist
[VB.NET] Bestimmtes Dateiattribut entfernen
[VB.NET] Datei ein bestimmtes Attribut geben
[VB.NET] Prüfen ob Datei eine EXE Datei ist
[C#] Prüfen, ob eine Datei ausfürbar ist (.exe, .bat, etc.)
[C#] Alle Dateien eines Ordners auflisten - C# Version -
[C#] eindeutigen Dateinamen ermitteln
[VB.NET] Datei-Inhalt anzeigen
[C#] Dateien und Ordner rekursiv löschen
[C#] Stream in Datei umleiten
[C#] Ordnergröße ermitteln
[C#] Automatisches Umbenennen eines Pfades
[C#] Kapazität mit Einheit darstellen
[C#] LogWriter klasse
[C#] MIMETypeManager
[C#] externes Programm aufrufen (andere Version) mit Parameter
[C#] Herausfinden welches Programm ein bestimmtes Dokument öffnet
[VB.NET] Gibt das Bytearray einer Datei zurück
[C#] Datei ein bestimmtes Attribut geben/setzen
[VB.NET] Klasse für SimpleFileVerification (SFV)
[C#] Laden und speichern von komprimierten Binärdaten
[C#] Datei einlesen und als ArrayList jede Zeile zurückliefern
[C#] Parallele Dateisuche über mehrere Laufwerke
[C#] Byte Größenangaben als String formatieren (KB, MB, GB, ...)
[C#] Textdatei einlesen auf verschiedene Arten
[C#] Datei Teilweise einlesen (gestückelt)
[C#] Bestimmte Zeile einer Datei löschen
[C#] File Container
[C#] PDF Dateien erstellen
[C#] Ist Datei beschreibbar
[C#] Sichern einer MS-SQLServer Datenbank aus C#
[C#] Datei mi GZip packen
[C#] ini Datei anlegen - mit Dictionary
[C#] Dummy Files erzeugen. ( Mit Inhalt )
[C#] Byte-Array in Struktur kopieren
[C#] Text in Textdateien suchen
[VB.NET] Prüfen, ob eine Datei überschrieben werden kann

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.