C#编码带有压缩小数的EBCDIC文件

时间:2011-05-16 19:47:12

标签: c# encoding decimal ebcdic packed-decimal

我必须为外部实体准备一个文件,并且该实体使用带有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做过任何事情。

2 个答案:

答案 0 :(得分:2)

该代码应该可以很好地创建一个EBCDIC文件。这通常不是必需的,因为FTP进程通常会自动将文件从ASCII转换为EBCDIC,但如果不是这样,那么您创建的文件应该是正确的,并且可以作为二进制而不是文本传输。 / p>

将数字写为具有适当替换的文本以满足大型机分区带符号十进制格式是正确的过程。当然,制作这些替换是一种痛苦,但是将它们作为字符串写出来就是将它放入大型机可以读取的文件中的正确方法。

答案 1 :(得分:1)

  

其次,文件中的几个字段   要求压缩十进制,格式   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"将其写入文件,但是以二进制模式编写这些非文本字段会更有意义