我有一个二进制文件,它是一个固定宽度的平面文件,在整个过程中都使用二进制(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大小的表,因此可以提高效率。