利用XML模板分析c#中固定长度流文件
http://tech.ddvip.com 2007年10月05日 社区交流
内容摘要:通过对这个问题的分析我想出了利用XML的映像文件来构建一个分析文件布局的分析库。这个分析库将加载映像文件,分析它并生成一个关于流文件布局的内部映像。接着我们可以使用内部映像来分析流文件并将它转换成list<T>各式的纪录。每个纪录也是以list<T>开始(一个list<list<T>>格式的集合)。
固定长度的流文件中存储的数据在各数据域间没有分界符。通常固定长度流文件的布局显示为一系列字段列,每列有一个起始点和指示列位置的长度值。
这样使得开发人员可以通过文件记录分析和分离各列。通常情况下分析路径很难编码为应用,这意味着文件布局的每次改变或者需要包含一个新文件时,你不得不改变源代码和重新编译。
我最近开发的一个项目要求做大量不同的文件布局分析。文件布局将会经常改变还可能增加新的内容,也有可能需要包含新文件。我需要的是一个分析库,利用它可以引入任何数量的不同文件布局,而不需要分析员改变源代码。
解决方案
通过对这个问题的分析我想出了利用XML的映像文件来构建一个分析文件布局的分析库。这个分析库将加载映像文件,分析它并生成一个关于流文件布局的内部映像。接着我们可以使用内部映像来分析流文件并将它转换成list<T>各式的纪录。每个纪录也是以list<T>开始(一个list<list<T>>格式的集合)。
这种方案的首要困难是提供分析流文件所需的XML数据,正如我前面所说,固定长度的流文件各个域通常由它们的起始位置和所占字符长度定义。列表A中显示的XML是作为一个模板的应用实例:
列表 A
<xmlversion="1.0" encoding="utf-8" ?>
<FileMap>
<FieldName="FirstName" Start="0" Length="5"/>
<FieldName="LastName" Start="5" Length="10"/>
<FieldName="Address" Start="15" Length="15"/>
<FieldName="City" Start="30" Length="14"/>
<FieldName="State" Start="44" Length="2"/>
<FieldName="Zip" Start="46" Length="5"/>
</FileMap>
来源:builder.com.cn 责编:豆豆技术应用