【问题标题】:C# encoding a file in EBCDIC with packed decimalsC# 使用压缩小数在 EBCDIC 中编码文件
【发布时间】:2011-05-16 19:47:12
【问题描述】:

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

【问题讨论】:

    标签: c# encoding decimal ebcdic packed-decimal


    【解决方案1】:

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

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

    【讨论】:

    • FTP部分非常重要。如果您自己进行 ASCII 到 EBCDIC 的转换,您必须确保使用二进制模式进行传输,否则您将面临双重转换文件的风险。
    • 是的,您可能应该在第一次尝试时创建一个 ASCII 文件,然后让系统进行转换。只有当这不起作用时,您才应该弄乱制作 EBCDIC 文件。
    • @dan04 - 我的回答没有错。 OP 指定了 EBCDIC 和 COMP-3,它们是不兼容的格式。我的回答对于 EBCDIC 中的分区小数是正确的。我相信您对 COMP-3 的回答是正确的(我没有经验)。我们的哪个答案适用取决于实际要求是什么,这从问题中不清楚。
    【解决方案2】:

    其次,文件中的几个字段 需要压缩十进制,格式为 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=positive,D=negative,F=unsigned)。

    12 34 50 00 00 00 1C

    假设代码页 37 是正确的,您可以使用字符串 "\u0012\u0094&\u0000\u0000\u001C" 将其写入文件,但以二进制模式写入这些非文本字段会更有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多