C# CSV文件有不同的行
我有一个csv文件,如下所示:C# CSV文件有不同的行,c#,C#,我有一个csv文件,如下所示: M;2017.12.01 17:04;1;example@example.com T;1;K001;2 T;1;N001;1 M;2017.11.01 15:56;2;example@example.com T;2;P001;2 T;2;P001;1 我的问题是,我必须将此文件读入列表,并能够使用索引在其中导航,但长行之后的不同类型的行让我感到困惑 class Order { public string Type { get; set; }
M;2017.12.01 17:04;1;example@example.com
T;1;K001;2
T;1;N001;1
M;2017.11.01 15:56;2;example@example.com
T;2;P001;2
T;2;P001;1
我的问题是,我必须将此文件读入列表
,并能够使用索引在其中导航,但长行之后的不同类型的行让我感到困惑
class Order
{
public string Type { get; set; }
public DateTime Date { get; set; }
public string OrderID { get; set; }
public string Email { get; set; }
public string ItemNumber { get; set; }
public int Quantity { get; set; }
public Order(string[] ordered , string[] items)
{
Type = ordered[0];
Date = DateTime.Parse(ordered[1]);
OrderID = ordered[2];
Email = ordered[3];
Type = items[0];
OrderID = items[1];
ItemNumber = items[2];
Quantity = int.Parse(items[3]);
}
}
类程序
{
静态列表顺序=新列表();
静态void Main(字符串[]参数)
{
阅读();
}
私有静态无效读取()
{
使用(System.IO.StreamReader=new System.IO.StreamReader(“orders.csv”))
{
而(!reader.EndOfStream)
{
添加(新订单(reader.ReadLine().Split(“;”),reader.ReadLine().Split(“;”));
}
}
}
}
您可以在创建行之前尝试识别行。然后,您可以创建两种不同的方法来初始化订单
while (!reader.EndOfStream)
{
var values = reader.ReadLine().Split(';');
if(DateTime.TryParse(values.Skip(1).First(), out var date)) {
orders.Add(Order.FromOrderWithDate(values));
}
else
orders.Last().Items.Add(Item.FromOrderWithEmail(values));
}
这两种方法类似于
public static Order FromRow(string[] ordered) =>
new Order {
Type = ordered[0],
Date = DateTime.Parse(ordered[1]),
OrderID = ordered[2],
Email = ordered[3],
Items = new List<Item>();
};
public static Item FromRow(string[] items) =>
new Item {
Type = items[0],
OrderID = items[1],
ItemNumber = items[2],
Quantity = int.Parse(items[3])
};
public static Order FromRow(string[]ordered)=>
新秩序{
类型=有序[0],
Date=DateTime.Parse(有序[1]),
OrderID=有序[2],
电子邮件=已订购[3],
项目=新列表();
};
行中的公共静态项(字符串[]项)=>
新项目{
类型=项目[0],
OrderID=项目[1],
ItemNumber=项目[2],
数量=int.Parse(项目[3])
};
最后是两个不同的类,一个用于订单,另一个用于项目,order
应该包含项目列表。尝试如下操作:
List<Customer> customers = new List<Customer>();
Customer lastCustomer = null;
foreach(var line in File.ReadLines("orders.csv"))
{
var values = line.Split(';');
if (values[0]=="M")
{
lastCustomer = new Customer(values);
customes.Add(lastCustomer);
}
else if (values[0]=="T" && lastCustomer != null)
{
lastCustomer.AddOrder(values);
}
}
列出客户=新建列表();
客户lastCustomer=null;
foreach(File.ReadLines(“orders.csv”)中的var行)
{
变量值=行分割(“;”);
如果(值[0]=“M”)
{
lastCustomer=新客户(价值);
customes.Add(lastCustomer);
}
else if(值[0]=“T”&&lastCustomer!=null)
{
lastCustomer.AddOrder(值);
}
}
(您需要编写一个Customer类,该类可以从字符串数组中构造自己,并且有一个方法可以将新的Order对象添加到自己的订单列表中,再次从数组中构造它们)如果要解析两种不同类型的行,您需要使用至少一个代码分支短行代表什么?它们与前面的长线有关吗?是的,长线代表购买了某件物品的客户,而长线下的短线代表购买物品的数据。