C# 如何为实体对象生成自定义文本文件

C# 如何为实体对象生成自定义文本文件,c#,C#,前言:我正在编写一套程序,从共享驱动器检索文件,将其转换为数据库中的几个表,使用户能够对数据库中的记录执行CRUD操作(通过MVC4 ASP.NET web应用程序),然后将数据库中的记录重新组装为相同的文件格式,并通过FTP将文件传输回大型机。这些文件表示从大型机VSAM文件提取的数据,我无法控制其格式。接下来还有其他类似的项目——检索、翻译、编辑、组装和上传大型机解压缩文件。一切都已完成,但我编写代码来组装文件的方式是不可重用的,并且只针对当前项目域模型中的实体对象 机会:因为其他即将到来的

前言:我正在编写一套程序,从共享驱动器检索文件,将其转换为数据库中的几个表,使用户能够对数据库中的记录执行CRUD操作(通过MVC4 ASP.NET web应用程序),然后将数据库中的记录重新组装为相同的文件格式,并通过FTP将文件传输回大型机。这些文件表示从大型机VSAM文件提取的数据,我无法控制其格式。接下来还有其他类似的项目——检索、翻译、编辑、组装和上传大型机解压缩文件。一切都已完成,但我编写代码来组装文件的方式是不可重用的,并且只针对当前项目域模型中的实体对象

机会:因为其他即将到来的项目的文件中的数据格式非常相似,所以我希望有一些可恢复的代码来重新组装这些文件

数据:下面表示一些模拟文件数据。文件中的每一行文本(我现在称之为记录)都可以是特定的长度(本例中为80字节)。记录可以是以星号为前缀的注释。未注释记录可以有4种不同的类型

  • 线
  • 序列预告片
  • 桌上拖车
  • 台式拖车
“行”属于“序列”(序列号-仅对表格唯一)。“序列”属于“表”(表键-文件唯一)。“表”有一个类型,表按其类型和文件中的键排序

************************************************************************ * TABLE 00001 - SOME MORE COMMENTS * 04/04/11 CREATED TABLE ************************************************************************ * COMMENT FOR SEQ 1 720PFT0000100000001000001PROI00011E1037-E1039 720PFT0000100000001000002PGMI000016 720PFT0000100000001000003RTN 00004 NAC 720PFT0000100000001099999000000003 * COMMENT FOR SEQ 2 720PFT0000100000003000001PROI00011E1037-E1039 720PFT0000100000003000002CLSI000037,8 720PFT0000100000003000003MEDE000010 720PFT0000100000003000004RTN 00004 NAC 720PFT0000100000003099999000000004 720PFT0000199999999999999000000002 720PFT9999999999999999999000000001 该行的顺序如下所示:

  • 三位数的业务代码
  • 三字符表类型
  • 五字符表键
  • 九位序列号。左零填充
  • 六位数行号。左零填充
  • 三字符动作码
  • 一个字符,包括代码
  • 五位数的长度值
  • 其余的都是价值观
  • 顺序拖车的顺序如下:

  • 三位数的业务代码
  • 三字符表类型
  • 五字符表键
  • 九位序列号。左零填充
  • 五位数填充(“9”)
  • 顺序行的九位数计数(左零填充)
  • 表拖车的顺序如下所示:

  • 三位数的业务代码
  • 三字符表类型
  • 五字符表键
  • 十四位填充符('9')
  • 表中序列的九位数计数(左零填充)
  • 表拖车的顺序如下:

  • 三位数的业务代码
  • 三字符表类型
  • 十九位填充符('9')
  • 文件中表的九位数计数(表类型为#2)。(左零填充)
  • 表拖车发生在文件中每个有序的表集之后

    ************************************************************************ * TABLE 00001 - SOME MORE COMMENTS * 04/04/11 CREATED TABLE ************************************************************************ * COMMENT FOR SEQ 1 720PFT0000100000001000001PROI00011E1037-E1039 720PFT0000100000001000002PGMI000016 720PFT0000100000001000003RTN 00004 NAC 720PFT0000100000001099999000000003 * COMMENT FOR SEQ 2 720PFT0000100000003000001PROI00011E1037-E1039 720PFT0000100000003000002CLSI000037,8 720PFT0000100000003000003MEDE000010 720PFT0000100000003000004RTN 00004 NAC 720PFT0000100000003099999000000004 720PFT0000199999999999999000000002 720PFT9999999999999999999000000001 小结:我正在寻求一种可重用的生成文件的方法,就像我上面提到的那样。目前,我有一个类,它获取PlanFlexTable实体的IEnumerable,并对其进行迭代,组装要上载的文件。我已经考虑过使用反射来创建一些属性来放置在实体上,以定义如何构建文件;不过,我真的希望能就其他可能性提供更多反馈和想法


    谢谢

    您希望动态生成代码。。。。试试T4?您可以为您的实体类创建一个基本模板,其中包含模式要素(键控等),并基于VSAM文件填充该类的其余部分(对于VSAM文件,您将有一个可重用的解析器..)


    考虑到(生成的)实体类和DB表,CRUD工具的其余部分可能是可重用的?

    阅读所有这些教科书并不容易:)如果我不清楚,我道歉。我不需要动态生成实体类代码。我希望能够基于实体类的实例生成文件提取(在我文章的“数据”部分),这就是我考虑反射的原因(因为我所追求的过程类似于序列化)。