我有一個來自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