用C将COMP和COMP-3压缩十进制转换为可读值



我有一个EBCDIC平面文件要从大型机处理到C模块。将COMP和COMP-3值转换为可读值的良好过程是什么?我是否必须将ebcdic字符转换为ascii然后十六进制的COMP-3?那么COMP呢?由于

Bill Woodger通过他对你的问题的评论给了你一些很好的建议,实际上他回答了你应该回答的问题把他的评论作为回答。

我想重申他的一些观点,并对其他一些观点进行扩展。

如果您需要转换从可能是COBOL应用程序创建的文件,以便它可以被读取由其他非cobol程序,可能是在与创建它的机器的体系结构不同的机器上您应该要求仅使用显示格式化数据(即所有字符数据)创建文件。打浆non-display(二进制、打包、编码)数据在创建它的操作环境之外只是一个公式长期的痛苦。您将享受整理各种顺序问题的乐趣在体系结构和代码页转换之间。这些都是文件传输协议是为了管理而设计的——它们做得很好,所以不要试图重新发明它们。简而言之,使用FTP或类似的文件传输机制,在机器之间移动数据。并且只能传输基于显示(字符)的数据。

压缩十进制(COMP-3)数据类型根据其特定的PICTURE布局占用不同数量的字节。小数点的位置是隐含的,因此不参考用于定义它的PICTURE就不能确定。打包的十进制字段可以是带符号的或无符号。如果有符号,则符号嵌入到最低有效数字的低4位。压缩十进制的每个字节数据类型包含两位数字,除了可能的第一个和最后一个字节。如果字段有符号,则第一个字节仅包含1位数字并且包含偶数位。如果无符号,最后一个字节包含2位数字,如果有符号,则只有1位。还有其他一些微妙之处您需要知道是否要进行自己的打包十进制到字符的转换。在这一点上,我希望你能看到这不是一个简单的练习。

二进制(COMP)数据类型有不同但同样复杂的问题需要解决。同样,这不是一个简单的练习。

那么你应该怎么做呢?基本上,按比尔的建议去做。生成该文件的程序是否使用显示格式用于输出(意味着您不必执行任何操作)。或者,如果做不到这一点,可以使用DFSORT/SYNCSORT之类的实用程序进行转换给你。去公用事业公司route仍然要求您拥有原始的COBOL文件布局(并且您理解它),以便进行转换。最后一种方法是编写一个简单的读取记录写入记录的COBOL程序,该程序接受未格式化的数据moves将每个COMP-whatever字段转换为相应的DISPLAY字段,并再次将其写出来。

正如Bill所说,如果生成这个文件的小组告诉您生成一个DISPLAY格式的文件太难/太昂贵输出文件他们对你撒谎他们是无能的只是懒得做他们被雇来做的工作。我想不出其他的借口。

使用XML传输数据。

也就是说,编写一个程序将文件转换为字符(如果在大型机上,保留EBCIDIC,但数字字段被解包等),然后将每个记录和每个字段包含在XML标记中。

这避免了格式问题(列1中有什么字段,列2中有什么字段,分隔符是空格还是逗号,等等)。

然后传输XML文件与您最喜欢的实用程序,从EBCIDIC转换为ASCII。

最新更新