使用C#的固定宽度二进制Flatfile数据的ETL

时间:2018-11-05 22:04:21

标签: parsing binary-data flat-file filehelpers flatfilereader

我有一个二进制文件,它是一个固定宽度的平面文件,在整个过程中都使用二进制(hex)存储用户未键入的任何内容。例如,电话号码将存储为char,但存储ID或计算得出值将以二进制形式显示。

我一直在使用自定义GUI(https://youtu.be/OMeghA82kSk)来正确识别所有字段,并且通常对我现在的位置感到满意,但是现在是时候开始加载数据了,而不是“正确的前进方式。

我已经看到了很多可以使用的软件包,如果我的数据是CSV格式,或者如果它不使用二进制数据,但是我不知道下一步要做什么,因为我知道列和数据类型的基本信息在列中,或者如果我需要将输出一直导出到CSV。

我用于标识布局的应用程序输出以下数据格式,可用于绘制表格:

 define('WP_HOME','http://local.www.website.com:8080');
 define('WP_SITEURL','http://local.www.website.com:8080');

好,因此此数据只能使您在1500字节宽的行上定位84,这对于我而言是一个完美的示例。我尝试了FileHelpers并收到了Western编码错误,好像它不想读取不是基本ASCII文本的任何内容。我希望能够仅指定字段的开头,宽度,并且如果我不在乎行的末尾有1000个字节,不必定义一百个我不在乎的字段只是为了使解析器不会崩溃。

{
  "Date1": {
    "Starting Position": 5,
    "Column Width": 7,
    "Contains Control Chars": 1
  },
  "RandomID": {
    "Starting Position": 13,
    "Column Width": 1,
    "Contains Control Chars": 0
  },
  "CustomerID": {
    "Starting Position": 15,
    "Column Width": 2,
    "Contains Control Chars": 1
  },
  "FirstName": {
    "Starting Position": 19,
    "Column Width": 15,
    "Contains Control Chars": 0
  },
  "LastName": {
    "Starting Position": 35,
    "Column Width": 15,
    "Contains Control Chars": 0
  },
  "NickName": {
    "Starting Position": 51,
    "Column Width": 15,
    "Contains Control Chars": 0
  },
  "DontKnowOrCare": {
    "Starting Position": 67,
    "Column Width": 4,
    "Contains Control Chars": 0
  },
  "Date2": {
    "Starting Position": 72,
    "Column Width": 7,
    "Contains Control Chars": 0
  },
  "DontKnowOrCare2": {
    "Starting Position": 80,
    "Column Width": 4,
    "Contains Control Chars": 0
  }
}

我也在研究ETLyte等,但是我看不到如何对CustomerID等字段进行Little Endian转换,或者对date字段进行复杂的字节操作。

我的目标是能够以尽可能少的转换来查询数据。这不是一次转换,而是一个定时事件,每隔几分钟就会发生一次,事件会击中几百MB大小的表,因此可以提高效率。

0 个答案:

没有答案