C# 使用压缩小数对 EBCDIC 中的文件进行编码
-
14-11-2019 - |
题
我必须为外部实体准备一个文件,该实体使用带有 COBOL 的 IBM 大型机,并要求该文件以 EBCDIC 进行编码。我正在用 C# 创建该文件。我想这是一个由两部分组成的问题...首先,下面的代码是否足以确保文件将以他们可以读取的方式生成?
StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));
其次,文件中的几个字段需要压缩十进制,格式为 S(9)13 COMP-3。由于我已经指定了 EBCDIC 编码,我可以只写十进制数吗(例如1234500000001) 使用以下命令添加到文件:
sw.WriteLine("1234500000001C");
...并且在生成的文件中结果正确吗?
从未使用 EBCDIC 或 COMP-3 做过任何事情。
解决方案
代码应该创建一个EBCDIC文件。这通常是没有必要的,因为FTP进程通常会将文件自动从ASCII将文件从ASCCDIC转换为EBCDIC,但如果不是这种情况,则您正在创建的文件应该是正确的,并且可以将文件发送为二进制而不是文本。
用适当的替换为文本写出若要满足大型机划分的十进制格式是正确的过程。当然,使这些替换机是一种痛苦,但是当您正在进行时将它们写出来是将它进入大型机可以读取的文件的正确方法。
其他提示
其次,文件中的几个字段需要十进制的十进制,以S(9)13 Comp-3。由于我已经指定了EBCDIC编码,因此我可以写小数号(例如1234500000001) 使用以下命令添加到文件:
sw.WriteLine("1234500000001C");
...并且在生成的文件中正确地出现了吗?
不,你不能。该语句将写入 EBCDIC 字节:
F1 F2 F3 F4 F5 F0 F0 F0 F0 F0 F0 F0 F1 C3
但这个领域是 COMP-3
. 。这不是编码字符;而是字符。它是带有符号 nybble 的 BCD(C=正数,D=负数,F=无符号)。
12 34 50 00 00 00 1C
假设代码页 37 是正确的,您 可以 使用字符串将其写入文件 "\u0012\u0094&\u0000\u0000\u001C"
, ,但以二进制模式编写这些非文本字段会更有意义。