我是靠谱客的博主 糊涂老虎,最近开发中收集的这篇文章主要介绍Cinchoo ETL - 固定长度阅读器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、简介

ChoETL 是一个用于 .NET 的开源 ETL(提取、转换和加载)框架。它是一个基于代码的库,用于在 .NET 环境中从多个来源提取数据、转换并加载到您自己的数据仓库中。您可以立即在数据仓库中获取数据。

本文讨论使用FixedLengthReaderChoETL 框架提供的组件。FixedLength这是一个从文件/源中提取数据的简单实用程序类。

特征

  • 遵循FixedLength标准文件规则。优雅地处理包含逗号和换行符的数据字段
  • 公开IEnumarable对象列表 - 通常与 LINQ 查询一起用于投影、聚合和过滤等。
  • 支持延迟阅读
  • 支持处理具有特定文化的日期、货币和数字格式的文件。
  • 支持不同的字符编码
  • 读取文件时识别各种日期、货币、枚举、布尔和数字格式
  • 在写入文件时提供对日期、货币、枚举、布尔值、数字格式的精细控制
  • 详细而强大的错误处理,让您快速发现并修复问题
  • 缩短您的开发时间

2. 要求

该框架库是使用 .NET 4.5 Framework 用 C# 编写的。

3.“世界你好!” 样本

  • 打开 VS.NET 2013 或更高版本。
  • 创建一个示例 VS.NET (.NET Framework 4.5) 控制台应用程序项目。
  • 使用 Nuget 命令通过包管理器控制台安装ChoETLInstall-Package ChoETL
  • 使用ChoETL命名空间。

让我们从一个读取FixedLength记录长度为 18 个字符、有 2 列的文件的简单示例开始(ID:8 个字符长,名称:10 个字符长)

清单 3.1 示例 FixedLength 数据文件(RecordLength:18 个字符)

您可以通过多种方式FixedLength以最少的设置开始文件解析。

3.1。快速加载 - 数据优先方法

这是立即加载FixedLength文件的快速方法。不需要 POCO 对象。下面的示例代码显示了如何加载文件。

该模型使用通用FixedLengthReader对象来解析文件。FixedLengthReaderauto 从第一行自动发现文件布局模式,仅当第一行的列值在它们之间隔开时。如果自动发现导致产生不正确的文件布局架构,您可以通过配置自己拼出架构。下面将讨论。

如果输入提要没有标题,则FixedLengthReader自动将列命名为Column1, Column2 ...动态对象模型中的名称。

3.2. 代码优先方法

FixedLength这是使用 POCO 类解析和加载文件的另一种方法。首先,定义一个简单的数据类来匹配底层FixedLength文件布局。

FixedLengthReader如果标题行的列值在它们之间隔开,则自动从第一行发现文件布局模式。如果自动发现导致不正确的文件布局架构,您可以通过配置拼出架构。

3.3. 配置优先方法

在此模型中,我们FixedLength使用所有必要的解析参数以及与基础文件FixedLength匹配的列来定义配置。FixedLength

3.4. 声明式配置的代码优先

这是定义 POCO 实体类以及以FixedLength声明方式装饰的配置参数的组合方法。

上面的代码说明了如何定义 POCO 对象来携带输入文件中每个记录行的值。首先要为每个记录字段定义属性,ChoFixedLengthRecordFieldAttribute 以符合FixedLength记录映射的条件。必须指定每个属性才能StartIndex, Size映射到 FixedLength 列。StartIndex0基于。

它非常简单,可以立即提取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-GBFixedLength
  • 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列标题的开头和结尾修剪空白。可能的值为TrimTrimStartTrimEnd
  • Truncate- 读者不适用

8.自定义固定长度字段

对于每一FixedLength列,您可以使用在 POCO 实体属性中指定映射ChoFixedLengthRecordFieldAttribute

清单 6.1 为 FixedLength 列自定义 POCO 对象

C#

以下是为每个属性添加一些自定义的可用成员:

  • StartIndex- 固定长度行中列的从零开始的字符位置。
  • Size- 列中的字符数。
  • FieldName- 按名称映射时,您指定FixedLength要用于该属性的列的名称。为此,该FixedLength文件必须具有标题记录。您指定的名称必须与标头记录的名称匹配。
  • FillChar- 读者不适用。
  • FieldValueJustification- 读者不适用。
  • FieldValueTrimOption- 该标志告诉读者在阅读时从字段值的开头和结尾修剪空白。可能的值为TrimTrimStartTrimEnd
  • 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值仅在ErrorModeIgnoreAndContinue或时设置ReportAndContinue

任何 POCO 实体属性都可以使用ChoETL.ChoFallbackValueAttribute.

8.3. 类型转换器

大多数原始类型都会自动转换并将它们设置为属性。如果FixedLength字段的值不能自动转换成属性的类型,你可以指定一个自定义/内置的.NET转换器来转换值。这些可以是IValueConverter TypeConverter转换器。

您可以通过多种方式为每个字段指定转换器:

  • 声明式方法
  • 配置方法

8.3.1. 声明式方法

该模型仅适用于 POCO 实体对象。如果您有 POCO 类,则可以为每个属性指定转换器以对其进行必要的转换。下面的示例显示了执行此操作的方法。

最后

以上就是糊涂老虎为你收集整理的Cinchoo ETL - 固定长度阅读器的全部内容,希望文章能够帮你解决Cinchoo ETL - 固定长度阅读器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部