概述
一、简介
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 对象。下面的示例代码显示了如何加载文件。
该模型使用通用FixedLengthReader
对象来解析文件。FixedLengthReader
auto 从第一行自动发现文件布局模式,仅当第一行的列值在它们之间隔开时。如果自动发现导致产生不正确的文件布局架构,您可以通过配置自己拼出架构。下面将讨论。
如果输入提要没有标题,则FixedLengthReader
自动将列命名为Column1, Column2 ...
动态对象模型中的名称。
3.2. 代码优先方法
FixedLength
这是使用 POCO 类解析和加载文件的另一种方法。首先,定义一个简单的数据类来匹配底层FixedLength
文件布局。
FixedLengthReader
如果标题行的列值在它们之间隔开,则自动从第一行发现文件布局模式。如果自动发现导致不正确的文件布局架构,您可以通过配置拼出架构。
3.3. 配置优先方法
在此模型中,我们FixedLength
使用所有必要的解析参数以及与基础文件FixedLength
匹配的列来定义配置。FixedLength
3.4. 声明式配置的代码优先
这是定义 POCO 实体类以及以FixedLength
声明方式装饰的配置参数的组合方法。
上面的代码说明了如何定义 POCO 对象来携带输入文件中每个记录行的值。首先要为每个记录字段定义属性,ChoFixedLengthRecordFieldAttribute
以符合FixedLength
记录映射的条件。必须指定每个属性才能StartIndex, Size
映射到 FixedLength 列。StartIndex
是0
基于。
它非常简单,可以立即提取FixedLength
数据。
我们首先创建一个新的ChoFixedLengthReader
对象实例。就这样。解析器和将数据流加载到对象中的所有繁重FixedLength
工作都是由引擎盖下的解析器完成的。
默认情况下,在加载文件FixedLengthReader
时发现并使用默认配置参数。FixedLength
这些可以根据您的需要被覆盖。以下部分将详细介绍每个配置属性。
4. 阅读所有记录
就像设置与FixedLength
文件结构匹配的 POCO 对象一样简单,您可以将整个文件读取为可枚举模式。这是一种延迟执行模式,但在对它们进行任何聚合操作时要格外小心。这会将整个文件记录加载到内存中。
该模型使您的代码保持优雅、干净、易于阅读和维护。还利用 LINQ 扩展方法来执行分组、连接、投影、聚合等。
5. 手动读取记录
就像设置与FixedLength
文件结构匹配的 POCO 对象一样简单,您可以将整个文件读取为可枚举模式
6.自定义固定长度记录
使用ChoFixedLengthRecordObjectAttribute
,您可以以声明方式自定义 POCO 实体对象。
清单 6.1 为每条记录自定义 POCO 对象
C#
以下是对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 对象
C#
以下是可用的成员,可根据您的需要为其添加一些自定义。
FillChar
- 读者不适用Justification
- 读者不适用TrimOption
- 此标志告诉读者在阅读时从FixedLength
列标题的开头和结尾修剪空白。可能的值为Trim
,TrimStart
,TrimEnd
。Truncate
- 读者不适用
8.自定义固定长度字段
对于每一FixedLength
列,您可以使用在 POCO 实体属性中指定映射ChoFixedLengthRecordFieldAttribute
。
清单 6.1 为 FixedLength 列自定义 POCO 对象
C#
以下是为每个属性添加一些自定义的可用成员:
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 - 固定长度阅读器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复