2016-11-02 1 views
0

Ich versuche, den Inhalt einer Datentabelle an eine CSV-Datei mit Headern zu senden. Es gibt eine doppelte Frage, aber die angenommenen Antworten scheinen nur halbwegs zu funktionieren. An dieser Stelle habe ich die Antworten ohne Antwort gemischt und abgestimmt und brauche einen Punkt in die richtige Richtung.Senden Sie den Inhalt einer Datentabelle an eine CSV-Datei mit Headern

Ich kann die Spalten in die Datei einfach gut schreiben, und ich kann Daten gut, aber nicht zusammen schreiben. Auch die Daten kommen niemals in Anführungszeichen, nur durch Kommas getrennt ohne Anführungszeichen.

//This is how the FileHelpers class is built 
public class ScannedFileInfo 
{ 
    //this prefix will handle the double quotes issue 
    //delimiters must reside between double quotes 
    //Must specify FieldOrder too 
    [FieldQuoted('"', QuoteMode.AlwaysQuoted)] 
    [FieldOrder(1)] 
    public string DA_Id; 
    [FieldQuoted('"', QuoteMode.AlwaysQuoted)] 
    [FieldOrder(2)] 
    public string Name; 
    [FieldQuoted('"', QuoteMode.AlwaysQuoted)] 
    [FieldOrder(3)] 
    public string Extension; 
    [FieldQuoted('"', QuoteMode.AlwaysQuoted)] 
    [FieldOrder(4)] 
    public string Fullname; 
    [FieldQuoted('"', QuoteMode.AlwaysQuoted)] 
    [FieldOrder(5)] 
    public string PathLength; 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    [FieldOrder(6)] 
    public string Directory; 
} 

//this is how I send it to the file 
public static void ImportDirectory(string result, SqlConnection myconn, SqlConnection destConn ,ListBox lbInfo, DataGridView dgView) 
{ 
    //create data table code here - works fine... 
    MessageBox.Show("Scan complete. Starting Import..."); 

    //build file 
    var engine = new FileHelperEngine<ScannedFileInfo>(); 
    var orders = new List<ScannedFileInfo>(); 
    engine.HeaderText = engine.GetFileHeader(); 
    engine.WriteFile(@"C:\DirectoryScan.csv", orders); 
    MessageBox.Show("You now have proper labeled columns in your file."); 

    //now the data import is successful but it overwrites the column info 
    CommonEngine.DataTableToCsv(dt, @"C:\DirectoryScan.csv", ','); 
    MessageBox.Show("You now have data in your file, but no columns"); 

} 

Antwort

0

Ich kann nicht empfehlen, dass Sie in CSVHelper genug schauen. Dieses kleine Paket hat mich davor bewahrt, bei so vielen Gelegenheiten meine Haare auszuziehen, ich kann sie nicht alle zählen.

Wenn Sie in mit ihm sind, können Sie die Konfigurationseinstellungen verwenden, um schnell einen Kopfsatz, Trennzeichen zu setzen, ignorieren Anführungszeichen oder nicht usw.

1

Der CommonEngine.DataTableToCsv() Anruf nicht alle Funktionen von FileHelpersEngine unterstützt . Insbesondere fehlen das Feld quoting und die Spaltenüberschriften. Die CommonEngine ist nicht so voll ausgestattet wie die FileHelpersEngine<T>.

Stattdessen sollten Sie eine Liste von ScannedFileInfo anstelle einer Datentabelle erstellen und dann FileHelpersEngine<ScannedFileInfo>.WriteFile() verwenden.

//create list of ScannedFileInfo here 
var records = new List<ScannedFileInfo>(); 
records.Add(new ScannedFileInfo() { Name = ..., etc... }); 
// (or if you prefer, loop through your datatable to build the list) 

MessageBox.Show("Scan complete. Starting Import..."); 

// build file 
var engine = new FileHelperEngine<ScannedFileInfo>(); 
engine.HeaderText = engine.GetFileHeader(); 
engine.WriteFile(@"C:\DirectoryScan.csv", records); 

MessageBox.Show("You now have data and properly labelled columns in your file."); 
Verwandte Themen