C#使用压缩小数对EBCDIC中的文件进行编码

我必须为外部实体准备文件,并且此实体使用IBM大型机和COBOL并要求文件以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转换为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 。 这不是编码字符; 它是带有符号的BCD(C =正数,D =负数,F =无符号)。

12 34 50 00 00 00 1C

假设代码页37是正确的,你可以写这个使用字符串的文件"u0012u0094&u0000u0000u001C" ,但它将使更多的意义写在二进制模式下,这些非文本字段。

链接地址: http://www.djcxy.com/p/7077.html

上一篇: C# encoding a file in EBCDIC with packed decimals

下一篇: Avoid Android Market filtering on optional use of location