概述
一、简介
ChoETL 是一个用于 .NET 的开源 ETL(提取、转换和加载)框架。它是一个基于代码的库,用于在 .NET 环境中从多个来源提取数据、转换并加载到您自己的数据仓库中。您可以立即在数据仓库中获取数据。
本文讨论使用FixedLengthReader
ChoETL 框架提供的组件。FixedLength
这是一个从文件/源中提取数据的简单实用程序类。
特征
- 遵循
FixedLength
标准文件规则。优雅地处理包含逗号和换行符的数据字段 - 公开
IEnumarable
对象列表 - 通常与 LINQ 查询一起用于投影、聚合和过滤等。 - 支持延迟阅读
- 支持处理具有特定文化的日期、货币和数字格式的文件。
- 支持不同的字符编码
- 读取文件时识别各种日期、货币、枚举、布尔和数字格式
- 在写入文件时提供对日期、货币、枚举、布尔值、数字格式的精细控制
- 详细而强大的错误处理,让您快速发现并修复问题
- 缩短您的开发时间
2. 要求
该框架库是使用 .NET 4.5 Framework 用 C# 编写的。
3.“世界你好!” 样本
- 打开 VS.NET 2013 或更高版本。
- 创建一个示例 VS.NET (.NET Framework 4.5) 控制台应用程序项目。
- 使用 Nuget 命令通过包管理器控制台安装ChoETL:
Install-Package ChoETL
- 使用
ChoETL
命名空间。
让我们从一个读取FixedLength
记录长度为 18 个字符、有 2 列的文件的简单示例开始(ID:8 个字符长,名称:10 个字符长)
清单 3.1 示例 FixedLength 数据文件(RecordLength:18 个字符)
您可以通过多种方式FixedLength
以最少的设置开始文件解析。
3.1。快速加载 - 数据优先方法
这是立即加载FixedLength
文件的快速方法。不需要 POCO 对象。下面的示例代码显示了如何加载文件。
清单 3.1.1 使用迭代器加载 FixedLength 文件
清单 3.1.2 使用循环加载 FixedLength 文件
该模型使用通用FixedLengthReader
对象来解析文件。FixedLengthReader
auto 从第一行自动发现文件布局模式,仅当第一行的列值在它们之间隔开时。如果自动发现导致产生不正确的文件布局架构,您可以通过配置自己拼出架构。下面将讨论。
如果输入提要没有标题,则FixedLengthReader
自动将列命名为Column1, Column2 ...
动态对象模型中的名称。
3.2. 代码优先方法
FixedLength
这是使用 POCO 类解析和加载文件的另一种方法。首先,定义一个简单的数据类来匹配底层FixedLength
文件布局。
清单 3.2.1 简单的 POCO 实体类
在上面,该类定义了与示例FixedLength
文件模板匹配的属性。
清单 3.2.2 加载 FixedLength 文件
FixedLengthReader
如果标题行的列值在它们之间隔开,则自动从第一行发现文件布局模式。如果自动发现导致不正确的文件布局架构,您可以通过配置拼出架构。
3.3. 配置优先方法
在此模型中,我们FixedLength
使用所有必要的解析参数以及与基础文件FixedLength
匹配的列来定义配置。FixedLength
清单 3.3.1 定义 FixedLength 配置
在上面,我们定义了与示例FixedLength
文件模板匹配的配置。
清单 3.3.2 加载不带 POCO 对象的 FixedLength 文件
清单 3.3.3 使用 POCO 对象加载 FixedLength 文件
3.4. 声明式配置的代码优先
这是定义 POCO 实体类以及以FixedLength
声明方式装饰的配置参数的组合方法。
清单 3.4.1 定义 POCO 对象
上面的代码说明了如何定义 POCO 对象来携带输入文件中每个记录行的值。首先要为每个记录字段定义属性,ChoFixedLengthRecordFieldAttribute
以符合FixedLength
记录映射的条件。必须指定每个属性才能StartIndex, Size
映射到 FixedLength 列。StartIndex
是0
基于。
它非常简单,可以立即提取FixedLength
数据。
清单 3.4.2 主要方法
我们首先创建一个新的ChoFixedLengthReader
对象实例。就这样。解析器和将数据流加载到对象中的所有繁重FixedLength
工作都是由引擎盖下的解析器完成的。
默认情况下,在加载文件FixedLengthReader
时发现并使用默认配置参数。FixedLength
这些可以根据您的需要被覆盖。以下部分将详细介绍每个配置属性。
4. 阅读所有记录
就像设置与FixedLength
文件结构匹配的 POCO 对象一样简单,您可以将整个文件读取为可枚举模式。这是一种延迟执行模式,但在对它们进行任何聚合操作时要格外小心。这会将整个文件记录加载到内存中。
清单 4.1 读取 FixedLength 文件
或者:
清单 4.2 读取 FixedLength 文件流
该模型使您的代码保持优雅、干净、易于阅读和维护。还利用 LINQ 扩展方法来执行分组、连接、投影、聚合等。
清单 4.3 使用 LINQ
5. 手动读取记录
就像设置与FixedLength
文件结构匹配的 POCO 对象一样简单,您可以将整个文件读取为可枚举模式
清单 5.1 读取 FixedLength 文件
6.自定义固定长度记录
使用ChoFixedLengthRecordObjectAttribute
,您可以以声明方式自定义 POCO 实体对象。
清单 6.1 为每条记录自定义 POCO 对象
以下是对FixedLength
文件执行加载操作自定义的可用属性。
RecordLength
- 可选的。如果未指定,它将根据 POCO 类中定义的所有属性进行计算。EOLDelimiter
- 用于分隔FixedLength
行的值。默认为 rn(换行符)。CultureName
-用于读取和写入数据的区域性名称(例如 ,en-US
) 。en-GB
FixedLength
IgnoreEmptyLine
- 一个标志,让读者知道如果记录为空,则在阅读时是否应跳过该记录。如果所有字段都为空,则记录被认为是空的。Comments
- 用于表示被注释掉的行的值。可以指定多个注释。必须用逗号分隔。QuoteChar
- 用于转义包含分隔符、引号或行尾的字段的值。QuoteAllFields
- 读者不适用。Encoding
- 文件的编码FixedLength
。HasExcelSeperator
- 读者不适用。如果文件中指定了 Excel 分隔符,Reader 将无缝识别FixedLength
并使用它们进行解析。ColumnCountStrict
- 此标志指示如果缺少读取预期字段,是否应引发异常。ColumnOrderStrict
- 此标志指示如果读取预期字段在文件中的错误位置是否应引发异常。ColumnCountStrict
仅当is时才会执行此检查true
。BufferSize
- 当阅读器来自StreamReader
.ErrorMode
- 此标志指示如果读取和预期字段未能加载,是否应引发异常。这可以被每个属性覆盖。可能的值为:IgnoreAndContinue
- 忽略错误,将跳过记录并继续下一步。ReportAndContinue
- 如果是IChoNotifyRecordRead
类型,则向 POCO 实体报告错误ThrowAndStop
- 抛出错误并停止执行
IgnoreFieldValueMode
- 一个标志,让读者知道在阅读时是否应该跳过一条记录,如果它是空的 /null
。这可以被每个属性覆盖。可能的值为:Null
- 不适用DBNull
- 不适用Empty
- 如果记录值为空则跳过WhiteSpace
- 如果记录值仅包含空格,则跳过
ObjectValidationMode
- 一个标志,让读者了解要使用记录对象执行的验证类型。可能的值为:Off
- 不执行对象验证MemberLevel
- 在每个FixedLength
属性加载值时执行的验证ObjectLevel
- 在所有属性加载到 POCO 对象后执行验证
7.自定义FixedLength Header
如果FixedLength
文件有标题,您可以使用ChoFixedLengthFileHeaderAttribute
.
清单 6.1 为文件头自定义 POCO 对象
以下是可用的成员,可根据您的需要为其添加一些自定义。
FillChar
- 读者不适用Justification
- 读者不适用TrimOption
- 此标志告诉读者在阅读时从FixedLength
列标题的开头和结尾修剪空白。可能的值为Trim
,TrimStart
,TrimEnd
。Truncate
- 读者不适用
8.自定义固定长度字段
对于每一FixedLength
列,您可以使用在 POCO 实体属性中指定映射ChoFixedLengthRecordFieldAttribute
。
清单 6.1 为 FixedLength 列自定义 POCO 对象
以下是为每个属性添加一些自定义的可用成员:
StartIndex
- 固定长度行中列的从零开始的字符位置。Size
- 列中的字符数。FieldName
- 按名称映射时,您指定FixedLength
要用于该属性的列的名称。为此,该FixedLength
文件必须具有标题记录。您指定的名称必须与标头记录的名称匹配。FillChar
- 读者不适用。FieldValueJustification
- 读者不适用。FieldValueTrimOption
- 该标志告诉读者在阅读时从字段值的开头和结尾修剪空白。可能的值为Trim
,TrimStart
,TrimEnd
。Truncate
- 读者不适用。Size
- 读者不适用。QuoteField
- 告诉读者FixedLength
列值被引号包围的标志。ErrorMode
- 此标志指示如果读取和预期字段未能加载,是否应引发异常。可能的值为:IgnoreAndContinue
- 忽略错误并继续加载记录的其他属性。ReportAndContinue
- 如果是IChoRecord
类型,则向 POCO 实体报告错误。ThrowAndStop
- 抛出错误并停止执行。
IgnoreFieldValueMode
- 一个标志,让读者知道在阅读时是否应该跳过一条记录,如果它是空的 /null
。可能的值为:Null
- 不适用DBNull
- 不适用Empty
- 如果记录值为空则跳过WhiteSpace
- 如果记录值仅包含空格,则跳过
8.1。默认值
当FixedLength
值为空或空格(通过 控制IgnoreFieldValueMode
)时,它是使用并设置为属性的值。
可以使用默认值指定任何 POCO 实体属性System.ComponentModel.DefaultValueAttribute
。
8.2. ChoFallbackValue
它是值设置FixedLength
失败时使用并设置到属性的值。Fallback
值仅在ErrorMode
为IgnoreAndContinue
或时设置ReportAndContinue
。
任何 POCO 实体属性都可以使用ChoETL.ChoFallbackValueAttribute
.
8.3. 类型转换器
大多数原始类型都会自动转换并将它们设置为属性。如果FixedLength
字段的值不能自动转换成属性的类型,你可以指定一个自定义/内置的.NET转换器来转换值。这些可以是IValueConverter
或TypeConverter
转换器。
您可以通过多种方式为每个字段指定转换器:
- 声明式方法
- 配置方法
8.3.1. 声明式方法
该模型仅适用于 POCO 实体对象。如果您有 POCO 类,则可以为每个属性指定转换器以对其进行必要的转换。下面的示例显示了执行此操作的方法。
最后
以上就是舒心指甲油为你收集整理的Cinchoo ETL - 固定长度阅读器的全部内容,希望文章能够帮你解决Cinchoo ETL - 固定长度阅读器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复