gpt4 book ai didi

c# - 主/细节平面文件与 FileHelpers 在同一行

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:28 25 4
gpt4 key购买 nike

我有一个像这样的主从平面文件:

CSTRID NAME PHN1 EMAIL1  PHN2 EMAIL2 ...
01 Bill 3433 1@b.com 2333 2@b.com
02 Jess 5555 3@b.com

(每一行都是一个客户。它可能有一个或多个联系信息字段)

有没有办法用 FileHelpers 自动建模?无论如何,我可以在同一行中有 master 和 details 吗?也许是行分隔符可能不同的某种 MultiRecord?

最佳答案

使用 FileHelpers 的最佳方式是将其视为一种描述文件格式的方式,并(暂时)忽略所需的目标类。然后,在通过 FileHelpers 引擎运行文件后,您可以在单独的步骤中转换生成的记录。

在系统之间移动数据有一个标准名称:ETL,代表Extract, Transform, Load .如果您愿意,FileHelpers 是其中“提取”部分的好工具。

所以在您的情况下,您的 FileHelpers 类看起来像这样:

[FixedLengthRecord()] 
public class MyFileHelpersClass
{
[FieldFixedLength(5)]
public String Cstrid;
[FieldFixedLength(10)]
public String Name;
[FieldFixedLength(10)]
public String Phn1;
[FieldFixedLength(20)]
public String Email1;
[FieldFixedLength(10)]
public String Phn2;
[FieldFixedLength(20)]
public String Email2;
// etc.
}

然后将其导入到 MyFileHelpersClass[] 数组中

MyFileHelpersClass[] res = engine.ReadFile("FileIn.txt") as MyFileHelpersClass[]; 

然后你转换并加载这些结果作为第二步,就像

foreach (MyFileHelpersSpec result in results)
{
Customer customer = new Customer();
customer.Name = result.Name;
if (!String.IsNullOrWhiteSpace(Phn1)
|| !String.IsNullOrWhiteSpace(Email1))
{
Contact contact = new Contact();
contact.Phone = result.Phn1;
contact.Email = result.Email1;
customer.Contacts.Add(contact);
}
if (!String.IsNullOrWhiteSpace(Phn2)
|| !String.IsNullOrWhiteSpace(Email2))
{
Contact contact = new Contact();
contact.Phone = result.Phn2;
contact.Email = result.Email2;
customer.Contacts.Add(contact);
}
}

如果您的转换逻辑非常基本,您可以经常使用 LINQ,例如

var customers = results
.Where(x => String.IsNullOrWhiteSpace(x.Phn1))
.Select(x => new Customer() { Name = x.Name, Phone = x.Phn1 })
.Union(
results
.Where(x => String.IsNullOrWhiteSpace(x.Phn2))
.Select(x => new Customer() { Name = x.Name, Phone = x.Phn2 })
);

关于c# - 主/细节平面文件与 FileHelpers 在同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16979480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com