2016-04-28 6 views
1

Ich versuche, CSV-Datei zu generieren, die 4 Spalten enthält. Eine dieser Spalten ist Name, die den durch Leerzeichen getrennten Vor- und Nachnamen enthält.Platz in CSV-Datei als Komma erkannt

Wenn ich diese Textdaten in die Datei .csv schreibe, erkennt sie den Platz als Komma und fügt eine zusätzliche Spalte hinzu. Beispiel:

Name - First LastName verwandelt sich in:

Name | AdditionalColumn 

First | LastName 

aber sollte nur

  Name | 
First LastName | 

Datei zu generieren Ich verwende nächsten Methode:

public string Export(bool includeHeaderLine = true) 
    { 
     var sb = new StringBuilder(); 
     //Get properties using reflection. 
     IList<PropertyInfo> propertyInfos = typeof(T).GetProperties(); 

     if (includeHeaderLine) 
     { 
      //add header line. 
      foreach (PropertyInfo propertyInfo in propertyInfos) 
      { 
       sb.Append(propertyInfo.Name).Append(","); 
      } 
      sb.Remove(sb.Length - 1, 1).AppendLine(); 
     } 

     //add value for each property. 
     foreach (T obj in _objects) 
     { 
      foreach (PropertyInfo propertyInfo in propertyInfos) 
      { 
       sb.Append(MakeValueCsvFriendly(propertyInfo.GetValue(obj, null))).Append(","); 
      } 
      sb.Remove(sb.Length - 1, 1).AppendLine(); 
     } 

     return sb.ToString(); 
    } 
+0

Werte, die einen Separator enthalten, müssen angegeben werden. – Kevin

+0

Die PropertyInfo-Klasse als Aufzählung, die die Namen der Spalte zurückgibt und das Problem verursacht. Es kann nicht mit dem veröffentlichten Code behoben werden. – jdweng

+0

Was meinst du mit "erkennen"? Ihr Code * liest die CSV-Datei nicht * schreibt nur Text in eine Datei. Alle unerwarteten Ergebnisse werden durch den Code oder die Daten verursacht. Sind Sie beispielsweise sicher, dass Ihre Eigenschaftswerte keine Kommas oder Zeilenumbrüche enthalten? –

Antwort

0

Zunächst einmal, wie überprüfen erstellte CSV? Wenn Sie öffnen es Excell, als zunächst versuchen MakeValueCsvFriendly (Objektwert) und Kurswert mit Leerzeichen zu ändern:

...  
if (output.Contains(",") || output.Contains("\"") || output.Contains(" ")) 
       output = '"' + output.Replace("\"", "\"\"") + '"'; 
... 

Wenn Sie CSV exportieren mit Kopf, auch Besuche generiert CSV in Notepad, sind Sie doppelt Komma haben nach "Name".

+0

Nun, danke. Es hilft – demo

Verwandte Themen