8

外部エンティティ用にファイルを準備する必要があります。このエンティティは COBOL を使用する IBM メインフレームを使用しており、ファイルを EBCDIC でエンコードする必要があります。C#でファイルを作成しています。これは 2 つの部分からなる質問だと思います...まず、以下のコードは、ファイルが読み取り可能な方法で生成されることを保証するのに十分ですか?

StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));

次に、ファイル内のいくつかのフィールドには、S(9)13 COMP-3 形式のパック 10 進数が必要です。すでに EBCDIC エンコーディングを指定しているので、次のように 10 進数 (例: 1234500000001) をファイルに書き込むことはできますか?

sw.WriteLine("1234500000001C"); 

...そして、生成されたファイルで正しく表示されますか?

EBCDIC または COMP-3 で何もしたことがありません。

4

2 に答える 2

2

そのコードは、EBCDIC ファイルを正常に作成するはずです。通常、FTP プロセスは自動的にファイルを ASCII から EBCDIC に変換するため、これは必要ありませんが、そうでない場合、作成しているファイルは正しく、テキストではなくバイナリとして送信される可能性があります。

メインフレームのゾーン符号付き 10 進数形式を満たすように、適切な置換を使用して数値をテキストとして書き出すのが正しい手順です。もちろん、これらの置換を作成するのは面倒ですが、メインフレームが読み取ることができるファイルに入れるための正しい方法は、文字列として書き出すことです。

于 2011-05-16T20:11:39.747 に答える
1

次に、ファイル内のいくつかのフィールドには、S(9)13 COMP-3 形式のパック 10 進数が必要です。すでに EBCDIC エンコーディングを指定しているので、次のように 10 進数 (例: 1234500000001) をファイルに書き込むことはできますか?

sw.WriteLine("1234500000001C");

...そして、生成されたファイルで正しく表示されますか?

いいえ、できません。そのステートメントは、EBCDIC バイトを書き込みます。

F1 F2 F3 F4 F5 F0 F0 F0 F0 F0 F0 F0 F1 C3

しかし、このフィールドはCOMP-3. これはエンコードされた文字ではありません。これは、符号ニブル (C=正、D=負、F=符号なし) の BCD です。

12 34 50 00 00 00 1C

コード ページ 37 が正しいと仮定すると、string を使用してこれをファイルに書き込むことができ"\u0012\u0094&\u0000\u0000\u001C"ますが、これらの非テキスト フィールドをバイナリ モードで書き込む方がはるかに理にかなっています。

于 2011-05-17T11:30:50.677 に答える