2016-04-06 3 views
1

いくつかのcsvファイル作成を行うメソッドを作成しました。テスト目的のためにファイルシステムにファイルを保存していましたが、このようにしたくありません。CsvファイルをC#で返すメソッドを作成します。

void ICreateNewCsv.CreateCsvForIndividuals(List<FormattedPerson> formattedPersons) 
{ 
     //var CsvFilePath = "C:\\temp\\individuals.csv"; 
     var csv = new StringBuilder(); 
     var toExclude = new HashSet<string> 
     { 
      "ID", 
      "SubSystemID", 
      "System", 
      "Component" 
     }; 

     var props = typeof (FormattedPerson).GetProperties(BindingFlags.Public | BindingFlags.Instance). 
          Where(property => !toExclude.Contains(property.Name)); 

     var header = string.Join(", ", props.Select(p => p.Name.ToString()).ToArray()); 
      csv.AppendLine(header); 

     for (var i = 0; i < formattedPersons.Count; i++) 
     { 
      var personTexts = formattedPersons 
       .Select(p => string.Join(",", p.Surname, p.FirstName, p.MiddleName, p.DateOfBirth, 
         p.NationalID, p.Gender, p.Address1, p.Address2, p.Address3, 
         p.City, p.Country, p.PostalCode, p.UniqueID)); 
      var joined = string.Join(Environment.NewLine, personTexts); 

      csv.AppendLine(joined); 
     } 
     //File.AppendAllText(CsvFilePath, csv.ToString()); 
} 

csvファイルを返すだけではなく、ボイド方法を持つための方法があります:

これは私のコードはありますか?

+4

'' STRING'と '(csv.ToStringを返す)とvoid'を置き換えます;' – fubo

+0

@fuboこれは機能しますか?誰かがこのメソッドを呼び出すと、実際には物理的に存在するCSVファイルを返す必要があるので... –

+3

あなたは何を返そうと思いますか?ファイルの内容は?ファイルへのポインタ? –

答えて

-1

私は、あなたはすべてのタイプ持っている(.CSVをだけでなく、テキストまたは何か他のもの)ができ「System.IO.FileStream」オブジェクトを返します 、FileStreamvoidを交換することをお勧め。あなたはそれにあなたがメソッドを呼び出す部分で希望の方法を使用してください/解析する必要があるよりも :

FileStream objFile = ICreateNewCsv.CreateCsvForIndividuals(formattedPersons); 
+1

'File'は静的なクラスなので、インスタンス化することはできません。おそらく 'FileStream'クラスを使うつもりです。それでは、実際のCSVコンテンツを返すのと同じことです。そのため、ファイル作成の手順はスキップされる可能性があります。 –

+0

@PieterWitvoetあなたの権利は、私の頭はどこですか。 –

+0

これは、少なくとも私がそれを返すと考えることができる唯一の方法ですが、彼はいくつかの外部ライブラリを使用しています。 –

関連する問題