【发布时间】:2016-06-23 14:30:40
【问题描述】:
我从大型机获得了一个数据文件。我已经用 PHP 处理了 EBCDIC 到 latin1 的转换。但现在这些压缩十进制字段都剩下了。
例如,数字 12345 被打包成 3 个字节,看起来像:x'12345C'
负数就像:x'12345D'
所以右半字节告诉符号。有没有办法用 PHP 轻松做到这一点?
现在我这样做:
$bin = "\x12\x34\x5C";
var_dump(
unpack("H*", $bin)
);
结果:
array(1) {
[1]=>
string(4) "123c"
}
现在我可以检查最后一个符号是 C 还是 D 并手动完成所有操作。但也许有更好的解决方案?
【问题讨论】:
-
更好的解决方案是让大型机人员为您提供“仅文本”的所有内容。然后您可以在文件/记录级别进行代码集转换,并且不会有任何问题。这意味着一个“单独的符号”,以及一个比例因子或一个实际的小数点,以您更容易做的为准。除非 Mainframe 程序是用 Assembler 编码的,否则它们生成这样的数据是微不足道的,那么它就省去了你做很多事情的时间。另请参阅标记为 packed-decimal 的其他问题。
-
TL;DR "大型机。但也许有更好的解决方案?"是的。让恐龙处理程序来解决。
-
@Rhymoid 你的意思是 TS:DR?没有办法弄清楚。纳达。零。没有任何。你不需要想出很酷的绰号来让我们了解你有阅读困难。随便写。
-
Bill 是对的 - 在大型机上进行转换。它可以在 toytown 计算机停机的额外正常运行时间内完成。
-
当然最好在大型机上进行。但就我而言,我只是在 PC 上已经有了这些文件。它是每周完成的 dli 数据库转储。
标签: php mainframe bcd packed-decimal