8

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

4

2 回答 2

2

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

将数字写为文本并进行适当的替换以满足大型机分区有符号十进制格式是正确的过程。当然,做这些替换是一件痛苦的事,但是像你这样将它们写成一个字符串是把它放到大型机可以读取的文件中的正确方法。

于 2011-05-16T20:11:39.747 回答
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 是正确的,您可以使用 string 将其写入文件"\u0012\u0094&\u0000\u0000\u001C",但以二进制模式写入这些非文本字段会更有意义。

于 2011-05-17T11:30:50.677 回答