我得到的信息是,PIC S9(4)字段是用comp-3编码的。我还有一个数据文件,其中包含数据(在我的例子中是关于一个客户的)。当我使用notepad++打开数据文件时,它显示的是me字符,比如"DLE“、"BEL”或"NUL",这就引出了这个表格。首先,你能告诉我,"comp-3“是怎么做的吗?如何使用c#将其转换回人类可读的格式/数据(将两个文件作为输入)?
发布于 2017-01-23 22:38:15
Comp-3格式
以Comp-3格式
value comp-3 (hex)
123 x'123c'
-123 x'123d'存在许多问题,https://stackoverflow.com/search?q=%22comp-3%22+cobol
如果这是一个大型机文件,并已转换为ASCII;它的将不能使用!COBOL COMP-3数字格式问题中的第二个答案给出了一个很好的例子,说明在进行ascii转换时Comp-3的损坏。
大型机问题
如果是来自大型机,您所面临的问题:
主机选项
最好的选择是在大型机/ Cobol上进行转换并传输一个文本文件。
或者,还有像共体这样的项目,它将使用Cobol文案将Cobol文件转换为Csv。
转换comp-3
至于转换comp-3,这是相当容易的。有两种方法
发布于 2017-01-23 16:18:16
当您将数字存储在普通PIC 9(4)字段中时,存储的值将使用这些字符的十六进制代码。
示例:
如果要将1234存储到COMP字段中,它将被存储为00001234,这意味着您将有以下十六进制字节001234。如果您想要将它转换回来,您可能需要将该字段转换回EBCDIC (或者您在COBOL侧使用的编码),并查看该字段的实际十六进制值。
发布于 2017-01-25 14:47:12
Comp-3是一种打包格式.S9(4) comp-3占用3个字节.+1234将以十六进制格式存储为x'01234C‘。而-1234将被存储为x'01234D‘。如您所见,第一个字节的前4位在本例中总是0,因此基本上浪费了1位数字。S9(5)和S9(4)占用相同的字节。显然,你没有真正使用3270模拟器,我也不知道notepad++,我认为超级编辑可以显示文件的十六进制格式。PS:我建议你用COMP代替COMP-3.COMP是二元模式,其计算效率是COMP-3的3倍.
至于你的第二个问题把绳子分成几个部分。除了最后的4位外,每4位补偿0000将给你人类可读的结果。最后4个位,取决于它的C或D,是+或-符号。
https://stackoverflow.com/questions/41805313
复制相似问题