我有一个来自IBM大型机源的需要解析并转换为ASCII的EBCDIC编码的数据文件。我可以通过以十六进制读取每个字节的数据进行转换,并在ASCII上查找相应的匹配项。从IBM数据文件解压字段
我的问题是EBCDIC编码的文件有30个字节被打包,需要解压才能得到实际值。我正在尝试使用PHP pack/unpack函数以及Perl的方式,但没有找到运气。我得到的价值似乎并不是我正在寻找的确切价值。我尝试用C c H h N解包它。
假设该文件包含EBCDIC编码数据; 包字段上的位置635-664,30个字节长 DATA1 = 9个字节 DATA2 = 9个字节 DATA3 = 3个字节 DATA4 = 3个字节 DATA5 = 3个字节 DATA6 = 3个字节
PHP:
$datafile = fopen("/var/www/data/datafile", "rb");
$regebcdicdata = fread($datafile, 634);
$packfields = fread($datafile, 30);
$arr= unpack('c9data1/c9bdata2/c3data3/C3data4/C3data5/C3data6',$packfields);
print_r($arr);
PERL:
open my $fh, '<:raw', '/var/www/html/PERL/test'; my $bytes_read = read $fh, my $bytes, 634; my $bytes_read2 = read $fh, my $bytes2, 30; my ($data1,$data2,$data3,$data4,$data5,$data6) = unpack 'C9 C9 C3 C3 C3 C3', $bytes2;
UPDATE: 已经找到了解决办法。这30个字节以指定格式打包。所以我只是使用PHP解压缩函数解压缩。
用于EBCDIC转换。我读取它的每个字节,使用bin2hex()函数获取十六进制值,找到匹配的ASCII十六进制值并获取ASCII表示,以便用户可以使用chr()函数以可读格式查看它。
您需要包括数据的东西,否则没有人会能够尝试您。你还应该包括你已经尝试过的实际代码。 [编辑]这个问题,并请添加。 – simbabque
由于机密性,我不能包含数据。不过,我可以给你我在Perl和PHP中使用的代码。 – user3472277