2016-04-06 6 views
1

Ich habe eine Methode erstellt, die eine CSV-Dateierstellung durchführt. Zu Testzwecken habe ich Datei im Dateisystem gespeichert, aber ich möchte das nicht so machen.Erstellen Sie eine Methode, die CSV-Datei in C zurückgibt.

Dies ist mein Code:

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()); 
} 

Gibt es eine Möglichkeit CSV-Datei zurückzukehren, anstatt nur void-Methode zu haben?

+4

ersetzen 'void' mit' string' und 'Rückkehr csv.ToString();' – fubo

+0

@fubo Wird das funktionieren? Da ich wirklich physisch vorhandene csv-Datei zurückgeben muss, wenn jemand diese Methode aufruft ... –

+3

Nun, was möchtest du zurückgeben? Der Inhalt der Datei? Ein Zeiger auf eine Datei? –

Antwort

-1

Ich würde vorschlagen, void mit FileStream zu ersetzen, dann kehren Sie ein Objekt ‚System.IO.FileStream‘, die die Art der alles haben (.csv, sondern auch Text oder etwas anderes). als würden Sie müssen nur Parse/Verwenden Sie es so, wie Sie in dem Teil möchten, wo Sie die Methode aufrufen:

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

'Datei' ist eine statische Klasse, daher können Sie sie nicht instanziieren. Sie wollten wahrscheinlich die 'FileStream' Klasse benutzen. Dasselbe gilt für die Rückgabe des tatsächlichen CSV-Inhalts, sodass der Schritt zum Erstellen der Datei genauso gut übersprungen werden kann. –

+0

@PieterWitvoet du bist richtig, wo war mein Kopf. –

+0

Das ist also der einzige Weg, zumindest könnte ich daran denken, es zurückzugeben, außer dass er eine externe Bibliothek benutzt. –

Verwandte Themen