问题标签 [comp-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
614 浏览

java - 处理 java 中的 comp3 和 ebcidic 转换为大文件的 ASCII

我正在尝试在我的 java 代码中转换 comp3 和 EBCIDIC 字符,但我遇到内存不足异常,因为处理的数据量约为 5 GB。我的代码目前如下:

这导致我可以理解的内存不足异常,但我也不能使用文件扫描仪,因为文件中的数据不会被拆分成行。

谁能指出我如何处理这个问题的正确方向

注意:文件可能包含不同长度的记录,因此不可能根据记录长度接缝对其进行拆分。

0 投票
0 回答
304 浏览

.net - 无法在 .NET 中解压“COMP-3”数据

从我们的供应商之一提供给我们的文件中解压缩包含数字和日期数据的 COMP-3 字段时,我们遇到了一些困难。

文件规范提供以下信息:

规范表明日期将扩展为 MMDDYYYY 格式。

当我从文件中检索这块数据时,我可以将它加载到内存中,并看到我检索了 5 个字节的数据。(在文件中,每个字符有一个字节。)检索到的字节如下:

没有符号被覆盖到最低有效数字(它总是出现的地方),所以这不是问题。这些位扩展为以下半字节:

这里有几个问题:

  1. 01001200 不太可能代表 MMDDYYYY 格式的有效日期,但这似乎是数据被打包到字段中的方式。

  2. 解压缩 COMP-3 字段时,模板指定它应扩展为 9 个字符,但如果扩展 COMP-3,它的大小将始终加倍(生成具有偶数个字符的字符串)。因此,预期大小与解压后的大小不匹配。

  3. 我在网上找到的算法似乎都无法解压这些数据。对于我们的源文件中的任何(假定的)BCD 值,似乎没有任何东西能够提出可识别的日期。

在这一点上,我怀疑我们可能没有处理真正的 BCD 格式。但是,请记住,我应该始终怀疑自己而不是工具,我正在寻求有关我对 COMP-3 格式的理解和我正在查看的数据的性质可能做错的建议。

我对格式的理解来自以下来源:

值得注意的是,在尝试解包之前,我曾尝试将数据从 EBCDIC 转换为 ASCII,反之亦然;两者都没有产生任何可理解的结果。我尝试了所有可以在 Internet 上找到的算法,但似乎没有一个产生任何有用的结果。

我想,最后,我的问题是:我真的在这里处理 BCD 或 COMP-3 数据吗?

更新

在回答一些问题时:

  1. 一旦我确定该值包含一个符号半字节,我就会清除该半字节。
  2. 我已经包含了所有我能做到的代码,这样你就可以准确地看到我在做什么。该类旨在提供大量诊断信息(如 Bytes 和 Nibbles 属性),以便您可以在解析值后查看它的结果。

我们手头有原始文件和未解析文件,可用作参考资料。我期待回来的日期是 06152008 (这不在我的脑海中,但你明白了要点)。我计算的值不是那样的。

根据要求,个人啃食:

0 1 0 0 1 2 0 0 0 2

对于那些对我的工作方式感兴趣的人,正在解包的课程:

以及支持它的扩展方法:

0 投票
1 回答
3337 浏览

java - Java 中的 COMP-3 数据解包(嵌入 Pentaho)

我们在读取嵌入在 Pentaho ETL 中的 Java 中的 COMP-3 数据时面临挑战。在平面文件中,很少有浮点值与其他纯文本一起存储为压缩小数。虽然可以正确阅读纯文本,但我们尝试使用Charset.forName("CP500");,但它从未奏效。我们仍然得到垃圾字符。

由于 Pentaho 脚本不支持 COMP-3,因此在他们的论坛中他们建议使用User Defined Java class. 如果您遇到并解决了此类问题,有人可以帮助我们吗?

0 投票
0 回答
1701 浏览

cobol - 如何在 COBOL 中将 PIC X 字段移动到 PIC S9 COMP-3 字段?

我的情况如下。

我正在将文件中的输入读入以下工作存储字段: WORKING-STORAGE SECTION.

01 WORK-FIELDS. 05 W1-INPUT. 10 TESTCASE-NUMBER PIC X(02). 10 PIC X(01). 10 TESTCASE-ID PIC X(18). 10 PIC X(01). 10 TESTCASE-CONTENT PIC X(20).

根据 TESTCASE-ID 包含的内容,我最终必须将 TESTCASE-CONTENT 字段的内容移动到以下字帖中的 AMOUNT-DECIMAL-FORMAT 或 AMOUNT-DECIMAL-NUMBER 字段中:

05 (*)AMOUNT. 10 AMOUNT-DECIMAL-FORMAT PIC S9(18) COMP-3. 10 AMOUNT-DECIMAL-NUMBER PIC S9(01) COMP-3. 10 AMOUNT-IN-XML-FORMAT PIC N(20).

然后我必须调用另一个程序来处理这些参数并填写 AMOUNT-IN-XML-FORMAT 字段。

无论如何,所以我的问题是:将我的 PIC X 字段的内容移动到我的 S9 COMP-3 字段的最佳方法是什么?

在此先感谢您的时间!

0 投票
3 回答
1273 浏览

binary - 转换放入 comp -3 字段 Cobol 的二进制文件

我正在尝试转换已在其中存储二进制文件的 pic S9 (9)V99 comp-3 字段。显示如下:6/PS X'000000002000'。

此金额应显示为 20.00。我正在尝试找到将其转换为 pic -9 (9)V99 字段的正确方法。

谢谢

0 投票
1 回答
1305 浏览

c# - 如何将十进制转换为压缩十进制/COMP-3

我需要将一些十进制转换为 PD6.2,然后将其发送到大型机。在 C# 中很难找到任何函数。请帮忙。太感谢了

0 投票
4 回答
8708 浏览

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

我有信息,一个PIC S9(4)字段是用 comp-3 编码的。我还有一个包含数据的数据文件(在我的情况下是关于客户的)。当我使用 notepad++ 打开数据文件时,它会显示像“DLE”、“BEL”或“NUL”这样的字符,这会将我带到这个。首先,你能告诉我,“comp-3”是做什么的吗?以及如何使用 c# 将其转换回人类可读的格式/数据(例如,将两个文件作为输入)?

0 投票
1 回答
539 浏览

editor - 使用记录编辑器工具将大型机中的 COMP-3 列转换为可读格式

在此处输入图像描述

这是我们从 Mainframes 收到的二进制文件,其中包括 COMP-3 列以及其他列

当我们尝试将此二进制文件加载到记录编辑器中时,它正在显示特殊字符

请让我们逐步了解如何处理 COMP-3 列并加载到记录编辑器中从开始到结束的过程。

0 投票
2 回答
1368 浏览

hex - 写入数据集后 Cobol COMP-3 值发生变化

解决了

我发现这条线在我将这些值移动到输出文件的地方很深:

将我的 X'00' 更改为 X'40',这就是我得到神秘的 '4' 的地方。我将此归因于我的第一个 Cobol 版本缺少的“;”。

感谢 Bruce 和匿名用户 user9835153 的帮助!


我需要一些帮助来解决我以前从未遇到过的奇怪情况。

我有一个无符号分区十进制数字作为输入,PIC 9(3).9(6),我需要将其作为有符号 COMP-3、PIC S9(3)V9(6) 写出到数据集。这适用于所有值,除非输入中的小数点周围有零。在这种情况下,小数点前的 0 始终更改为 4。

示例:当输入值为 31.006261 时,它被写为 +31.006261(实际输出文件中的 x'031006261C')。但是,当输入值为 30.006261 时,它将作为 +34.006261 (x'034006261C') 写入文件。

我无法更改值的输入方式,但可以更改输入布局。我尝试了多种移动这个值的方法,包括:从输入直接移动到 COMP-3,移动到工作存储中不同类型的临时字段,使输入成为字符字段并移动到数字(完全忽略小数) .

这是我正在做的简化版本:


但是,当我使用 HEX ON 打开输出文件时,我得到的是:

每次零围绕小数点时都会发生这种情况。我使用了 8 条记录的数据子集,并将一半更改为 10.1xxxxx,另一半更改为 10.0xxxxxx(x 是各种数字)。所有 10.0xxxxx 记录都更改为 14.0xxxxxx,但 10.1xxxxx 记录保持正确。使用 20.x、30.x、40.x 等进行此操作并得到相同的结果。

从无符号到有符号时,我也尝试过 COMPUTE 而不是 MOVE——结果相同。就像我之前提到的,我尝试了各种移动输入值的方法,但结果总是一样的。我想可能是显式十进制 (x'4B') 的一部分以某种方式被放置在上半字节中,所以我修改了输入以单独读取它,并将它的十六进制值更改为 x'00',但这不起作用任何一个。我完全不知道还能尝试什么,也找不到其他经历过这种情况的人。

关于为什么小数点前的 0 被 4 取代的任何想法或建议?

在提供建议后编辑 5/21/18:

写入数据集后,小数点前的零仍然会发生变化。

0 投票
2 回答
11301 浏览

file - 在 COBOL 中,如何将符号 comp-3 值与符号一起转换为可读格式

我遇到过这样一种情况,即来自记录的值低于格式 01 WS-PREMIUM PIC S9(05)V9(02) comp-3。

正如我们在 comp-3 中所知道的,符号存储在最后一个半字节中。例如,值为 +1234.10 的 WS-PREMIUM 将存储为 x'0123410C' 或值为 -1234.10 的 WS-PREMIUM 将存储为 x'0123410D'。

现在我想将其写入报告文件((假设为 Daily Premium 文件)。此值应写入文件,其符号为 +1234.10$ 或 -1234.10$。我在此论坛中搜索答案,但我能做什么found 是报告部分中的预定义符号变量,而我正在寻找的是通过查看最后一个半字节并相应地写入文件来识别符号的运行时标识。我还听说他们在 java 中有一种方法,但没有确定如何。

我知道,当我们使用 DISPLAY 时,它会向您显示未压缩的十进制及其符号字节。

有人可以帮我解决这个问题。提前致谢。

这是我使用的示例代码 -

我期待输出显示为

日期溢价20181119 +1224.05