如何使用C#中的filehelpers或其他库从单个文本文件中读取两个实体

时间:2012-06-30 13:19:28

标签: c# asp.net-mvc filehelpers

文本文件包含订单和订单明细行。 订单头中的第一行。 之后,细节线数量可变。 细节之后有空白行,然后是下一个订单等。 对于订单行,第一个字段是订单号。 对于细节线,第一个字段始终为1。

128502 02.01.2012 20120 02.01.2012
1   Wine    0   1300
1   Meat    5,8333  5,83

128503 02.01.2012 20123 02.01.2012  
1   Wine    20  130
1   Meat    1,33    283,23
1   Cow 2,333   333,23

....

需要将此文件重新导入实体列表:

class Order {
  public string Number; // order number from first field, primary key 
  public string Date;
  ... other fields  
}


class OrderDetails {
  public string Number; // order number from previous line , foreign key to Order
  public string ProductName;
  ... other fields  
}

(而不是数字自定义整数id列也可以用于关系)

如何使用FileHelpers库或其他方式在C#ASP.NET MVC2中读取此类文件?

更新

样本

http://www.filehelpers.com/example_multirecords.html

引自

Multiple CSV strutures with FileHelpers

显示了如何读取两个表。 如何在这些表之间创建关系:在读取外键时,命令列应添加到详细信息表中。如何实现这一点,从前一个订单行获取最后一个订单号并将其转换为详细记录?

1 个答案:

答案 0 :(得分:0)

嗯,你可以一口气去蛮力。 读入整个文件 像空白一样分裂。 从每个拆分的第一行创建订单 其余部分创建详细信息。

如果文件很大,那么您可以读取每个空白行,然后按上述方式处理。

另一种可能有一些优势的解决方案。

通过编辑详细信息行的流程运行该文件,并从其编排的订单行中添加订单号。 然后是另一个将订单和细节分成两个单独的文件。 然后处理订单然后详细说明,而不必担心所有这些同上和两个结构。

第四个解决方案是,给予任何想出这种格式的人一个好的殴打,鼓励他们正确地做到这一点......

对此没有魔术棒解决方案,文件格式完全不适合任何有效的数据传递到可以合理存储它的东西。