将 comp-3 转换回人类可读的格式

jds*_*erk 0 c# cobol comp-3

我有信息,一个PIC S9(4)字段是用 comp-3 编码的。我还有一个包含数据的数据文件(在我的例子中是关于客户的)。当我使用记事本 ++ 打开数据文件时,它会向我显示诸如“DLE”、“BEL”或“NUL”之类的字符,这将我引向此。首先,你能向我解释一下,“comp-3”是做什么的?以及如何使用例如 c# 将其转换回人类可读的格式/数据(将两个文件作为输入)?

Bru*_*tin 5

Comp-3 格式

Comp-3 格式

value     comp-3 (hex)
 123        x'123c'
-123        x'123d'
Run Code Online (Sandbox Code Playgroud)

有很多现有的问题https://stackoverflow.com/search?q=%22comp-3%22+cobol

如果这是一个大型机文件并已转换为 ASCII;它将无法使用!!!。COBOL COMP-3 数字格式问题中的第二个答案给出了在进行 ascii 转换时 Comp-3 损坏的一个很好的例子。

大型机问题

如果是来自大型机,你面临的问题:

  1. 您必须进行二进制传输
  2. 您必须阅读大型机文件结构(例如,FB 记录将是固定长度的记录;没有 cr/lf)。
  3. 您需要转换压缩十进制。

大型机选项

最好的选择是在大型机/Cobol 上进行转换并传输文本文件。

或者有像coboltocsv这样的项目,它会使用 Cobol Copybook 将 Cobol 文件转换为 Csv。


转换 comp-3

至于转换 comp-3 是很容易的。有2种方法

  1. 将十六进制转换为十六进制字符串(即转换 x'123c' --> "123C)并检查最后一个符号字符。参见Java 中的 COMP-3 数据解包(嵌入 Pentaho)

  2. 把这个领域分成一系列的 nybles