মূল শ্রেণীর একটি সমস্যা আছে এবং এটি হ'ল যদি আপনি একটি নতুন কলাম যুক্ত করতে চান তবে আপনি রফতানি পদ্ধতিতে কী-নটফাউন্ডএক্সসেপশন পাবেন। উদাহরণ স্বরূপ:
static void Main(string[] args)
{
var export = new CsvExport();
export.AddRow();
export["Region"] = "New York, USA";
export["Sales"] = 100000;
export["Date Opened"] = new DateTime(2003, 12, 31);
export.AddRow();
export["Region"] = "Sydney \"in\" Australia";
export["Sales"] = 50000;
export["Date Opened"] = new DateTime(2005, 1, 1, 9, 30, 0);
export["Balance"] = 3.45f; //Exception is throwed for this new column
export.ExportToFile("Somefile.csv");
}
এটি সমাধান করার জন্য, এবং প্রতিবিম্বটি ব্যবহার করার জন্য @ কীবোর্ডকোবয় ধারণাটি ব্যবহার করে, আমি কোডটি সংশোধন করেছিলাম যাতে একই কলামগুলিতে নেই এমন সারি যুক্ত করার অনুমতি দেওয়া হয়। আপনি বেনাম শ্রেণীর উদাহরণ ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:
static void Main(string[] args)
{
var export = new CsvExporter();
export.AddRow(new {A = 12, B = "Empty"});
export.AddRow(new {A = 34.5f, D = false});
export.ExportToFile("File.csv");
}
আপনি সোর্স কোডটি এখানে সিএসভিএক্সপোর্টার ডাউনলোড করতে পারেন । বিনামূল্যে ব্যবহার করুন এবং সংশোধন করুন।
এখন, আপনি যে সমস্ত সারি লিখতে চান তা যদি একই শ্রেণীর হয় তবে আমি জেনেরিক ক্লাসটি তৈরি করেছি CSvWriter.cs , যা আরও ভাল পারফরম্যান্সের র্যাম ব্যবহার করে এবং বড় ফাইলগুলি লেখার জন্য আদর্শ lus । ব্যবহারের একটি উদাহরণ:
class Program
{
static void Main(string[] args)
{
var writer = new CsvWriter<Person>("Persons.csv");
writer.AddFormatter<DateTime>(d => d.ToString("MM/dd/yyyy"));
writer.WriteHeaders();
writer.WriteRows(GetPersons());
writer.Flush();
writer.Close();
}
private static IEnumerable<Person> GetPersons()
{
yield return new Person
{
FirstName = "Jhon",
LastName = "Doe",
Sex = 'M'
};
yield return new Person
{
FirstName = "Jhane",
LastName = "Doe",
Sex = 'F',
BirthDate = DateTime.Now
};
}
}
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public char Sex { get; set; }
public DateTime BirthDate { get; set; }
}