该程序旨在从.csv
文件中读取信息;然后使用此文件中的数据创建Product
个对象,然后将其存储在列表中。
我的问题是,我不知道如何传输.csv
文件中的数据,这些文件会被','并存储在数组中的构造函数对象中。任何帮助将不胜感激。
.csv
看起来像这样:
到目前为止,这是我的代码:
class Product
{
public string ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Price { get; set; }
public string StockAvailable { get; set; }
public string WeeklySales { get; set; }
// Constructor
public Product(string iD, string name, string Desc, string price, string StockAva, string weeklysales)
{
ID = iD;
Name = name;
Description = Desc;
Price = price;
StockAvailable = StockAva;
WeeklySales = weeklysales;
}
}
private static void ReadProductFile()
{
string productPath = GetDataDirectory("prod");
string[] fileData = File.ReadAllLines(productPath);
string[] productDetails = new string[20];
for (int i = 0; i < fileData.Length; i++)
{
productDetails = fileData[i].Split(',');
// I have no idea what do do next!
}
}
答案 0 :(得分:1)
List<Product> myProducts = new List<Product>();
...
for (int i = 0; i < fileData.Length; i++)
{
productDetails = fileData[i].Split(',');
var p = new Product(productDetails[0],
productDetails[1],
...
productDetails[5]));
myProducts.Add(p);
}
正如其他人所提到的,Split(',')
不是解析CSV文件最可靠的方式 - 如果产品说明包含,
怎么办?使用正确的C# CSV parser将为您解决这些问题。
答案 1 :(得分:0)
这很简单,但要求您事先知道csv文件中字段的顺序。一旦你知道了,只需要读取所有特定字段并将它们发送到Product
类的构造函数(幸运的是已经接受了字段值)。
您应该使用CSV阅读器执行此任务。这将使解析和读取单个字段值变得更加容易。 .NET类库中有一个内置的CSV解析器。有关详细信息和用法,请参阅this SO post。
如果您使用CSV解析器,您的功能将如下所示:
private static List<Product> ReadProductFile()
{
string productPath = GetDataDirectory("prod");
if(!System.IO.File.Exists(productPath)) return null;
var lst = new List<Product>();
TextFieldParser parser = new TextFieldParser(productPath);
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
try
{
//assuming that the order of fields in the CSV file is the same as the
//order of arguments of Product's constructor.
Product p = new Product(field[0], field[1], ...);
lst.Add(p);
}
catch(Exception ee)
{
//Log error somewhere and continue with the rest of the CSV
}
}
}
parser.Close();
return lst;
}