2016-04-28 3 views
1

CSVファイルを生成しようとしましたが、これには4つのカラムが含まれています。 この列の1つは、名前で、姓と名がスペースで区切られています。CSVファイル内のスペースがカンマで検出されました

このテキストデータを.csvファイルに書き込むと、スペースがカンマで検出され、追加の列が追加されます。例:

Name - First LastNameがに変換:

Name | AdditionalColumn 

First | LastName 

ちょうど

  Name | 
First LastName | 

次の方法で、私が使用してファイルを生成するには、次のようになります。すべての

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

セパレータを含む値は、引用符で囲む必要があります。 – Kevin

+0

列の名前を戻している列挙体としてPropertyInfoクラスが原因で問題が発生しています。これは、コードを投稿して修正することはできません。 – jdweng

+0

「検出する」とはどういう意味ですか?あなたのコード*は、テキストをファイルに書き込むだけのCSVファイルを読み込みません。予期しない結果は、コードまたはデータによって引き起こされます。たとえば、プロパティ値にコンマや改行が含まれていないことを確認してください。 –

答えて

0

まず、どのようにチェックします作成されたCSV? あなたがそれを開くとエクセルは、最初よりもスペースでMakeValueCsvFriendly(オブジェクトの値)と引用値を変更しよう:

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

あなたは、ヘッダーとCSVをエクスポートする場合、また、メモ帳で生成されたCSVをチェックし、あなたは二重のカンマを持っています"名前"の後に。

+0

まあ、ありがとう。助けになる – demo

関連する問題